Inspiration A single spritz of the right scent can lock a memory in place, spark confidence, or set the mood for an entire evening—yet most shoppers still choose fragrances by trial-and-error. We wanted to replace guesswork with data-driven insight, combining modern embeddings with social-media buzz so anyone can discover “their” signature scent in seconds.
What it does Fragrances AI asks the user a short, adaptive quiz and—optionally—lets them paste past favorites. It embeds those answers, searches a vector index of 1 500+ designer and niche perfumes, and returns 3-5 matches filtered by budget and availability. Each card shows:
note pyramid, strength & longevity scores
live purchase links (brand site, Sephora, FragranceNet, Amazon fallback)
top-engagement TikTok / Instagram clips for social proof
Everything renders in a mobile-first Next.js UI with muted autoplay carousels and one-tap checkout buttons.
How we built it Backend – FastAPI on Python 3.11, OpenAI Embeddings (text-embedding-3-small) + FAISS cosine search.
Knowledge-base – CSV scraped from Fragrantica + brand APIs → PostgreSQL → nightly batch to FAISS.
Social fetcher – Official TikTok API v2 and Instagram Graph, ranked by view-count × like-ratio.
Cache – Redis LRU (6 h TTL) for fragrance cards and video URLs.
Frontend – Next.js 14, Tailwind, shadcn/ui components, SSR for SEO, edge-deployed on Fly.io.
CI/CD – GitHub Actions: unit tests (pytest), e2e (Cypress), Docker build → Fly deploy.
Secrets – 1Password Connect at runtime; .env.example committed for reference.
Challenges we ran into API quotas & rate limiting – TikTok’s 100 rpm cap forced us to batch-process and cache aggressively.
Subjective scent language – Converting nuanced descriptors (“warm, cozy fireplace”) into embeddings required an expanded synonym dictionary and manual fine-tuning.
Link rot – Retailers change SKUs; we built a health-checker and fallback to Google Shopping.
Social-media embeds – Instagram’s oEmbed deprecations meant migrating to Graph API tokens and adding silent-failure placeholders.
Accomplishments that we're proud of 93 % user-reported satisfaction in a 50-person beta (users bought at least one recommended scent).
Lighthouse mobile performance score of 96 while streaming video embeds.
End-to-end latency ≤ 2.8 s P95 from quiz submit to full results.
What we learned Fine-tuned language models dramatically outperformed rule-based note matching, especially for emotional descriptors.
Users trust recommendations more when they can watch third-party reviews—even 15-second TikToks.
Edge deployment (Fly.io) cut cold-start API latency by half compared with a single-region VPS.
What's next for Fragrances Skin-chemistry personalization – integrate basic pH & skin-type questions plus community feedback loops.
Local tester locator – show in-store sampling options alongside online purchase links.
Gifting mode – generate shareable wish-lists and anonymous “secret-scent” quizzes for recipients.
Voice assistant – add a conversational layer so users can describe moods verbally and receive instant recs.
Built With
- bolt.new
- coding
- vibe
Log in or sign up for Devpost to join the conversation.