Stop blind buying with personalized fragrance recommendations powered by a Scent DNA profile.
SNIFF helps people discover perfumes that actually fit their taste before purchasing.
Users rate fragrances they know, the system builds a Scent DNA, and recommendations are ranked by compatibility.
- Personalized matching with explainable scoring (0-100%)
- Realistic quiz flow with longevity, sillage, and budget preferences
- Blind-buy risk indicator on fragrance detail pages
- Dataset-backed discovery with expanded external catalog matching
- Psychology insight overlays from research datasets
- Retail comparison-ready detail pages for confident buying
- Build DNA: Rate perfumes -> profile updates instantly
- Discover: Filter and sort by match, occasion, mood, and scent family
- Explore: Search across in-app catalog and extended dataset results
- Decide: Review notes, performance, risk, and market signals on detail pages
- Handcrafted base catalog: 33 premium fragrance profiles
- Auto-generated expansion: 220+ dataset-backed entries
- Total searchable catalog: 253+ fragrances
Datasets used include merged Fragrantica exports and aroma-psychology/compound references.
- Next.js 16 (App Router)
- TypeScript 5
- React Context API (DNA and ratings state)
- CSS Modules
- Next.js API route for server-side dataset search
npm install
npm run devnpm run lint
npm run buildnpm run generate:datasrc/
|- app/
| |- page.tsx
| |- my-dna/
| |- discover/
| |- explore/
| |- fragrance/[id]/
| \- api/dataset-search/
|- components/
|- context/
|- data/
| |- fragrances.ts
| |- datasetCatalog.ts
| |- generated/
| \- csv/
|- types/
\- utils/Vercel-ready with no environment variables required for the current build.
npm i -g vercel
vercelOr connect the repository in Vercel and deploy automatically.
Production build and lint pass on current main branch.