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
Share this project:

Updates