Back to selected work

Product case study

Frolio

A fragrance collection that helps you choose.

Founder & developer

Jan 2026 — present

Visit Frolio

I design and build Frolio solo with Claude Code, owning the product decisions, interface, data model, and production setup. It connects a personal collection, wear journal, and private notes with guided discovery, semantic search, daily recommendations, and buying information.

Frolio’s October 2026 public landing page, with its collection story and three fragrance bottles.
Current public landing page · October 2026
01The problem & the angle

A collection is more than a list.

What someone owns, what they have sampled, and what they actually wear tell different stories. Frolio brings those records together and gives beginners a way into discovery without requiring expert scent vocabulary.

02What I built

Start, collect, wear, discover.

The public catalog and community sit alongside a personal collection and journal. The experience connects a first exploration with the small decisions someone makes each day.

  • Collection and privacy. Owned, sampled, wishlist, and archived states organize bottles. A public collection can include ratings and recent wear history; personal notes remain private.
  • A wear journal and a habit. Wear logs, ratings, a calendar, private notes, and logging streaks help people revisit what they actually use. Weekly tasks and a capped freeze balance support the streak.
  • Buying with context. Researched US retailer offers identify bottle size, concentration, source, and checked date. Before you buy compares listed notes and accords with owned bottles and samples.
  • Reviewable photo intake. A bottle or shelf photo can start collection entry; each proposed bottle is reviewed by the user before it is added.
  • Three interface languages. English, Simplified Chinese, and Traditional Chinese interfaces share the product flows, with reviewed scent terminology.
  1. Find a starting point

    Choose a starting path, describe familiar smells, and explore catalog-grounded matches and learning quests.

  2. Build a personal record

    Organize owned bottles, samples, and a wishlist; save private notes, rate fragrances, and log what you wear.

  3. Choose what comes next

    Return to daily picks, search by a description, or compare a possible purchase with the collection you already have.

Frolio’s public example shelf on mobile, showing collection states and fragrance bottles.

The public example shelf makes owned, sampled, and wishlist states concrete before signup. Personal notes remain private in the signed-in product.

03Discovery & decisions

Three ways into discovery.

A guided starting point, a search from a description, and daily recommendations solve different tasks. Frolio combines model-assisted semantic retrieval with deterministic matching and ranking.

  • A familiar-smell taste finder. A rule-based taste finder returns up to three catalog matches without a model request. Three saved learning quests help beginners take the next step.
  • Semantic search and similar fragrances. Claude interprets a scent description; Voyage AI produces 1,024-dimensional embeddings. pgvector and an HNSW index retrieve candidates for reranking and the similar-fragrances rail.
  • Personal daily picks. Up to three private daily discoveries use collection ratings, wear history, scent facets, and negative feedback. Deterministic ranking adds variety and duplicate safeguards without a model call.
04How it fits together

Frolio architecture

Collection states, ratings, wear history, and private notes live in PostgreSQL through Prisma. Daily picks use deterministic ranking; semantic search uses Claude query interpretation, Voyage AI embeddings, and pgvector retrieval. Next.js and NextAuth provide the interface and account boundary, while Docker and Cloudflare serve the product.

The verified components behind Frolio’s public product.

Cloudflare Tunnel · Docker
Next.js · NextAuthProduct interface & authentication
Prisma · PostgreSQLpgvector · HNSW
Collections · Wear history · Vector retrieval
Voyage AI · AnthropicEmbeddings · moderation
Guided · Semantic · Daily discovery
Upstash · Sentry · systemd backups

Product experience, discovery, and production infrastructure.

05Running it in production

A product that has to keep running.

Running the product is part of building it. Frolio runs in Docker behind a Cloudflare tunnel, with rate limits, error monitoring, content moderation, and scheduled backups.

  • Application safeguards. Upstash handles rate limits, Sentry monitors application errors, and Anthropic supports safety moderation.
  • Scheduled backups. A systemd timer runs scheduled backup jobs.
06Current numbers

Current numbers

Product scale, verified through the public discovery API on October 1, 2026.

71,430
Fragrances

Catalog entries, not users or recommendation-quality measurements.

07Scope & limits

Keep the evidence visible.

Discovery and buying aids offer useful context, with limits that should stay visible in the product.

  • Note and accord overlap is a comparison clue, not proof that two fragrances smell alike.
  • Retailer offers cover researched US bottle variants; dated observations and Fragrantica shop ranges are labeled separately.
  • Photo recognition requires user review. Forum image uploads on Cloudflare R2 remain disabled.