A high-fashion, brutalist lifestyle & e-commerce destination inspired by contemporary editorial fashion aesthetics. Built with React 19, Vite, Tailwind CSS v4, Lenis Smooth Scroll, and Framer Motion on the client, and backed by a robust Node.js, Express, and Supabase (PostgreSQL) API service.
- Kinetic Hero Typography (
HeroTitle.jsx):- Viewport-scaling wordmark (
text-[19.8vw]) set in Swiss Neo-Grotesque (Inter Tight 900). - Letter-by-letter masked reveal with staggered randomized entry animations (
cubic-bezier(0.16, 1, 0.3, 1)). - Kinetic animated structural divider rule expanding on page mount.
- Viewport-scaling wordmark (
- Dynamic Asymmetric Lookbook (
Lookgrid.jsx):- Editorial staggered grid with dynamic column/row spanning and custom aspect ratios (
aspect-[3/4],aspect-[4/5], etc.). - Dual-Angle Hover Crossfade: Smooth transition between the primary front view (
primaryImage) and alternate angle (hoverImage) on hover. - Interactive Category Filtering: Real-time category filter pills with live item count badges.
- Left-to-Right Animated Underlines: Pseudo-element underline effect that grows seamlessly from left to right on card hover (
group-hover:after:w-full) and direct link hover. - Scroll-Triggered Reveals: Smooth fade-and-slide up animations via Framer Motion (
whileInView).
- Editorial staggered grid with dynamic column/row spanning and custom aspect ratios (
- Smooth Inertial Scrolling (
lenis/react):- Global smooth scrolling powered by Lenis (
ReactLenis), providing an ultra-fluid editorial luxury feel.
- Global smooth scrolling powered by Lenis (
- Manifesto & Brand Narrative (
Manifesto.jsx):- Bold, impactful brand statement section with animated kinetic divider lines and author signature.
- Privacy Policy & Terms Pages (
Privacy.jsx,Terms.jsx):- Structured editorial legal pages with categorized numbered blocks (
01β05), Lucide iconography, interactive contact cards, and responsive layouts.
- Structured editorial legal pages with categorized numbered blocks (
- Unified Navigation & Modern Footer (
Footer.jsx):- City coordinates, live year mark, legal links with word-fitted kinetic underlines, and social links.
- Decoupled Architecture:
- Centralized API & service layer (
services/productService.js,hooks/useProducts.js). - React Router v7 (
react-router-dom) with multi-route setup (/,/privacy,/terms). - Production-ready SPA routing fallback via
vercel.json.
- Centralized API & service layer (
- Design Tokens & Palette:
- Luxury Warm Cream (
#EDE4DD), Pitch Black (#000000), Dark Charcoal (#101010/#141414), and Fashion Accent Selection (#F31919DC).
- Luxury Warm Cream (
- Express.js (ES Modules):
- Clean modular layered pattern (
controllers/,routes/,services/,middleware/,config/,utils/). - Multi-origin CORS support with automatic trimming and
*.vercel.appsupport.
- Clean modular layered pattern (
- PostgreSQL on Supabase:
- Cloud relational database managed via
@supabase/supabase-js. - Structured
productstable schema with Row Level Security (RLS) policies and performance indexes. - Automated Database Seeding: Pre-seeds a full 16-item curated lookbook collection via
npm run seed:supabase.
- Cloud relational database managed via
- Operational Error Handling:
- Custom
AppErrorclass,asyncHandlerwrappers, and centralizederrorHandlermiddleware.
- Custom
- Standardized Response Shapes:
- Consistent JSON payloads across all endpoints via
ApiResponse.
- Consistent JSON payloads across all endpoints via
VibeLane-Ecom/
βββ frontend/ # Client Application (React 19 + Vite + Tailwind v4)
β βββ public/ # Static assets, product images & favicon
β βββ src/
β β βββ assets/ # Brand assets & static media
β β βββ components/ # Reusable UI components
β β β βββ hero/ # HeroTitle.jsx (kinetic masked typography)
β β β βββ layout/ # Navbar.jsx, Footer.jsx, Manifesto.jsx, Privacy.jsx, Terms.jsx
β β β βββ lookbook/ # Lookgrid.jsx (staggered editorial grid & hover states)
β β βββ context/ # App state (AppContext.jsx)
β β βββ hooks/ # Custom React hooks (useProducts.js, useFetch.js)
β β βββ pages/ # Page views (Home.jsx)
β β βββ services/ # API client & services (productService.js, api.js)
β β βββ styles/ # Design tokens (index.css)
β β βββ utils/ # Constants & helpers (constants.js)
β β βββ App.jsx # Application root layout with Lenis & React Router
β β βββ main.jsx # React DOM 19 entrypoint
β βββ .env.example # Frontend environment variables template
β βββ index.html # HTML entry with typography (Inter, Inter Tight)
β βββ vercel.json # SPA rewrites for Vercel deployment
β βββ vite.config.js # Vite config with @tailwindcss/vite & API reverse proxy
β βββ package.json
β
βββ backend/ # API Server (Node.js + Express + Supabase PostgreSQL)
β βββ src/
β β βββ config/ # Supabase client & DB connection (db.js)
β β βββ controllers/ # Request handlers (productController.js, healthController.js)
β β βββ middleware/ # Middlewares (errorHandler.js, asyncHandler.js)
β β βββ models/ # Mock data fallback (mockData.js)
β β βββ routes/ # Express API routes (productRoutes.js, index.js)
β β βββ scripts/ # Seed scripts (seedSupabase.js)
β β βββ services/ # Business logic layer (productService.js, cartService.js)
β β βββ utils/ # API helpers (ApiResponse.js, AppError.js)
β β βββ app.js # Express app setup & CORS configuration
β β βββ server.js # Server listener & bootstrap entrypoint
β βββ supabase_schema.sql # PostgreSQL table schema and RLS policies
β βββ .env.example # Backend environment variables template
β βββ .env # Local backend environment configuration
β βββ package.json
β
βββ .gitignore # Root gitignore rules
βββ package.json # Workspace script runner (concurrently)
βββ README.md # Project documentation
- Node.js: v18.0.0 or higher
- npm: v9.0.0 or higher
- Supabase Account: Free project created on supabase.com
Install dependencies for both frontend and backend concurrently from the root directory:
npm run install:allOr individually:
# Frontend
npm --prefix frontend install
# Backend
npm --prefix backend install-
Open your Supabase Project SQL Editor.
-
Run the SQL script found in
backend/supabase_schema.sql:CREATE TABLE IF NOT EXISTS public.products ( id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, item_number VARCHAR(100) NOT NULL, name VARCHAR(255) NOT NULL, slug VARCHAR(255), category VARCHAR(100) NOT NULL, price NUMERIC(10, 2) NOT NULL DEFAULT 0.00, badge VARCHAR(50) DEFAULT '', primary_image TEXT NOT NULL, hover_image TEXT NOT NULL, description TEXT DEFAULT '', in_stock BOOLEAN DEFAULT TRUE, stock_quantity INTEGER DEFAULT 20, created_at TIMESTAMP WITH TIME ZONE DEFAULT timezone('utc'::text, now()) NOT NULL, updated_at TIMESTAMP WITH TIME ZONE DEFAULT timezone('utc'::text, now()) NOT NULL ); ALTER TABLE public.products ENABLE ROW LEVEL SECURITY; CREATE POLICY "Allow public read access on products" ON public.products FOR SELECT TO public USING (true); CREATE POLICY "Allow write access on products" ON public.products FOR ALL TO public USING (true) WITH CHECK (true);
PORT=5000
NODE_ENV=development
CLIENT_URL=http://localhost:5173
API_PREFIX=/api/v1
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_KEY=your-supabase-publishable-or-anon-keyVITE_API_BASE_URL=http://localhost:5000/api/v1Seed the curated 16-item lookbook into your Supabase database:
cd backend
npm run seed:supabaseStart both backend server and frontend client concurrently:
npm run devOr in separate terminal tabs:
- Frontend (
http://localhost:5173):npm run dev:frontend
- Backend API (
http://localhost:5000):npm run dev:backend
- Create a new Web Service on Render.
- Connect your Git repository.
- Configure settings:
- Root Directory:
backend - Runtime:
Node - Build Command:
npm install - Start Command:
npm start
- Root Directory:
- Set Environment Variables:
NODE_ENV:productionAPI_PREFIX:/api/v1SUPABASE_URL:https://your-project.supabase.coSUPABASE_KEY:your-supabase-keyCLIENT_URL:https://your-vibelane-site.vercel.app,http://localhost:5173
- Import repository on Vercel.
- Configure settings:
- Framework Preset:
Vite - Root Directory:
frontend
- Framework Preset:
- Set Environment Variable:
VITE_API_BASE_URL:https://your-render-service.onrender.com/api/v1
- Deploy!
All backend endpoints are prefixed with /api/v1:
| Method | Endpoint | Description |
|---|---|---|
GET |
/ |
API greeting & health check |
GET |
/api/v1/health |
Health check timestamp and server status |
GET |
/api/v1/products |
Fetch all products (supports ?category=, ?search=, ?sort=, ?minPrice=, ?maxPrice=) |
GET |
/api/v1/products/categories |
Retrieve distinct product categories |
GET |
/api/v1/products/:id |
Retrieve single product by numeric id, slug, or item number |
- Frontend:
- React 19 & Vite
- Tailwind CSS v4
- React Router v7
- Lenis Scroll (
lenis/react) - Framer Motion
- Lucide React
- Backend & Database:
- Node.js & Express.js
- Supabase (PostgreSQL &
@supabase/supabase-js) - Cors & Morgan
- Deployment:
This project is licensed under the MIT License.
The Website is under development.