Modern fragrance-focused e-commerce experience built with Next.js, TypeScript, and Tailwind CSS.
- Overview
- Features
- Performance & Scalability Goals
- Roadmap
- Tech Stack
- Project Structure
- Getting Started
- Available Scripts
- Screenshots
- Deployment
- Contributing
- License
Scent is a full-stack fragrance-focused e-commerce application developed collaboratively by a full-stack engineer and a UX/UI designer.
The project was created as a production-oriented portfolio application focused on delivering a modern shopping experience while following real-world frontend engineering practices.
Key areas of focus include:
- scalable architecture
- strict TypeScript usage
- reusable component design
- responsive layouts
- collaborative Git workflow
- performance optimization
- accessibility and user experience
- Fully responsive modern interface
- Accessible UI components
- Optimized Next.js App Router architecture
- Type-safe development with TypeScript
- Reusable component-based architecture
- Tailwind CSS design system
- Conventional Commits and structured PR workflow
- Production-oriented frontend workflow
The application is designed with a production-oriented mindset, focusing on perceived performance, scalability, and resilience under real-world constraints such as high latency and increased user load.
The current performance objectives include:
- Optimized user experience under high-latency and unstable network conditions
- Efficient rendering strategy with minimal unnecessary client-side JavaScript
- Scalable architecture designed to support high traffic workloads (100k+ concurrent users) under appropriate horizontal scaling conditions.
- Reduced Time to First Byte (TTFB) and optimized server response times via caching strategies
- Optimized asset delivery (image optimization, lazy loading, and CDN usage)
- Stable UI performance under heavy interaction load (animations, cart updates, navigation transitions)
Additional engineering targets for production readiness:
- Effective caching strategy (server-side + edge where applicable)
- Database query optimization and avoidance of N+1 patterns
- Stateless backend design to support horizontal scaling
- Graceful degradation under partial service failure
- Monitoring-ready architecture (logs, metrics, and error tracking integration)
- Core Web Vitals optimization (LCP, CLS, INP within “good” thresholds)
- Website structure
- Branding (color scheme, fonts, spacing)
- Breakpoints definition
- Desktop design — all pages and component states
- Tablet and mobile adaptive design
- Design polish and organization
- Complete official Next.js course
- Learn Prisma, PostgreSQL, and relational databases
- Learn NextAuth basics
- Initialize Next.js + TypeScript + Tailwind CSS
- Integrate Shadcn UI
- UI kit (custom colors, fonts, buttons, tags, breadcrumbs)
- Reusable components (header, footer, product card, search, comments)
- All client-side pages
- Metadata (title, description, favicon)
- Set up Prisma + PostgreSQL
- Design database schema
- Seed database with initial data
- Configure NextAuth
- Configure localization
- React Server Components
- Authentication
- User profile
- Shop (filters, sorting, search, gender/brand views)
- Product interactions (wishlist, cart, comments)
- Newsletter subscription
- Stripe payment integration (test mode)
- Order storage
- React Server Components optimization
- Authentication
- Dashboard home
- Products CRUD
- Orders management
- Users management
- Tablet and mobile responsiveness
- SEO optimization
- PageSpeed Insights audit
- Unit and integration testing
- Production readiness review
- Secrets and environment variables audit
- Configure Vercel environment variables
- Deploy to Vercel
- Custom domain setup
- Finalize README
- Set repository public
- Post on LinkedIn and Dev.to
- React v19
- Next.js v16
- TypeScript v5
- Tailwind CSS v4
- Shadcn/ui
- Radix UI
- Lucide React
- Swiper
- Prisma (ORM)
- PostgreSQL (database)
- Vercel (hosting & deployment)
- pnpm (package manager)
- ESLint (linting)
- Prettier (code formatting)
src/
├── app/
│ ├── account/ # Account related pages
│ │ ├── cart/
│ │ ├── orders/
│ │ ├── profile/
│ │ ├── wishlist/
│ │ └── layout.tsx
│ ├── shop/ # Shop related pages
│ │ ├── [[...slug]]/
│ │ ├── brands/
│ │ ├── product/
│ │ └── layout.tsx
│ ├── globals.css # Global styles, themes, and utilities
│ ├── layout.tsx # Root layout
│ └── page.tsx # Homepage
│
├── assets/ # Fonts, images, icons
│ ├── images/
│ └── fonts.ts
├── components/ # Reusable components
│ ├── ui/ # UI primitives
│ ├── icons/ # Custom icons
│ ├── layout/ # Layout-related components
│ │ ├── footer.tsx
│ │ ├── header.tsx
│ │ └── nav.tsx
│ └── pages/ # Page-specific components
├── hooks/ # Custom React hooks
└── lib/ # Shared data, utilities and types
├── data.ts
├── types.ts
└── utils.ts git clone https://github.com/Abviol/scent.gitcp .env.example .envpnpm installpnpm devOpen:
http://localhost:3000pnpm devpnpm buildpnpm startpnpm lintThe application is deployed on Vercel automatically on push to dev.
Please read Contributing before creating branches, commits, or pull requests.
MIT License.



