Bygga
Type the product name from the box. Bygga shows every assembly step in 3D, with the parts, screws and tools for each one, and reads it out loud.
翻译准备中
尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
Shelf-first fragrance app with a grounded AI agent: collection score, daily pick, layering lab, explained recommendations and exact-bottle price checks. Spec-first PM portfolio project with public evals.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Know your shelf. Wear it better. Buy the next bottle for a reason.
A fragrance collection manager with a grounded AI agent, built end to end as a product-management portfolio project.
▶ Open the live demo (no sign-up, about 2 minutes) · Case study · One-pager · PRD · Public evals
| Problem | Collectors with a dozen bottles still buy the wrong next one (a fifth fresh blue scent, the EDT when they wanted the EDP, a "deal" that's a tester) and wear the same bottle every day. Fragrantica knows every perfume but not your shelf; chatbots don't know your shelf and will invent a price. |
| Product | Start from what you own. Sillage scores how well your collection covers your life, picks what to wear today, predicts how two bottles might layer, recommends what to buy next with reasons and caveats, and checks prices for the exact bottle. An AI agent ties it together in plain English. |
| AI design | One agent, ten typed tools, deterministic engines underneath. The model plans and explains; tested code ranks, scores and matches. Anything a tool didn't return is removed before you see it. Runs free on Gemini, or on Claude with one key. |
| My role | Product owner, end to end: two spec-first PRDs, 61 logged decisions, eval criteria written before the first run, a UX audit, and launch on production. Built with Claude Code as the engineer. |
| Evidence | 38,365-fragrance open catalog · exact-bottle price matching at 100% precision on 61 adversarial listings (up from 83%) · 0 of 7 planted fake products or prices reached users · 119 unit, 62 database-security and 14 end-to-end tests including a WCAG 2.2 AA scan. |
| Honest status | Live MVP on free tiers. Not yet tested with real users; the bet below is a hypothesis, and the roadmap starts with five interviews. |
The bet. Recommendations get far more relevant when they start from what you own and what you've said you like, and they're only trustworthy when every claim traces back to data.
| You have | Read | You'll see |
|---|---|---|
| 2 minutes | The live demo → Open a sample shelf | The product working on a seeded collection |
| 5 minutes | One-pager | Problem, user, value, solution, metrics, risks |
| 15 minutes | Case study | The decisions I'd talk through in an interview, and what evals changed |
| Deep dive | PRD · Agent design · Metrics · Decision log | How it's specified, built, measured and governed |
| Your shelf, understood. Add bottles from 38k fragrances. See your family mix, which seasons and times of day you can cover, and your signature accords, weighted by how much you like each bottle. | Collection Score. 0–100 across five explained dimensions, with strengths, gaps and a fix for each gap. Missing data lowers confidence; it's never scored as zero. |
| "What would it change?" Preview any bottle against your shelf before buying: Now → With it, and the bottle it overlaps most. | Today. Pick the occasion and the weather; it ranks only bottles you own, explains why, and learns from "Wore this". |
| Scent Lab. Pair two bottles you own. A labelled prediction of how they might layer, then your own logged result. | Discover. Similar, Different or Fill gaps. Every pick shows why, what's uncertain, and its score breakdown. |
| Prices for the exact bottle. Testers, flankers, wrong sizes and gift sets are rejected; you can inspect what was hidden. Suspiciously cheap offers and marketplace sellers are flagged. | The advisor. Ask in plain English. Every answer shows its tool calls, latency and a grounding check. |
flowchart LR
U([User]) --> A[Advisor agent<br/>Gemini or Claude]
A -- "8 read tools" --> E[Deterministic engines<br/>ranking · score · today · lab · price match]
A -- "2 propose tools" --> C{{User confirms}}
E --> D[(Supabase Postgres<br/>row-level security)]
A --> G[Grounding check<br/>strips ids and prices<br/>no tool returned]
G --> U
Full design, failure modes and the eval plan: docs/design/AGENT-DESIGN.md.
Pass criteria were written before each run. Every run is kept in docs/evals/history and published at /evals.
| Run | What changed | Offer precision | Personas passing | Fakes reaching users |
|---|---|---|---|---|
| v1 | Baseline | 83.3% | 27 / 30 | 0 / 7 |
| v2 | Flanker detection: an allowlist of words the matcher understands | 100% | 28 / 30 | 0 / 7 |
| v3 | Budget alternatives became a user choice, not a tuning exercise | 100% | 29 / 32 | 0 / 7 |
| v4–v7 | Collection Intelligence (9 / 9 checks), free model, price trust, UX audit | 100% | 29 / 32 | 0 / 7 |
The two personas that still fail are a product question, not a bug: for a Tobacco Vanille lover the engine prefers close alternatives from smaller houses over the famous names I annotated. Users now choose whether to see labelled budget alternatives (DEC-30).
Production taught as much as the evals: the first live price check hid every listing as unsafe (Google now sends links with raw spaces), the "free" backup model was closed to new accounts, and a new "show what was hidden" list exposed mislabelled rejections the same day it shipped. Each is in the build log.
| Product | One-pager · PRD (living) · Metrics & instrumentation · Roadmap · Case study |
| Design | Agent design · UX audit |
| Governance | Decision log (61) · Requirements → code → tests · Eval report · Build log |
| Source specs | The original spec pack and PRD 08 the build was checked against |
| Engineering | Local development · |
The full index is in docs/README.md.
I worked as product owner with an AI coding agent (Claude Code) as the engineer: a seven-document spec pack first, then a second PRD for Collection Intelligence, then a UX audit. I made the product calls (data sources under a zero-cost constraint, model and provider, scope, trade-offs); the agent proposed defaults for the rest and every one was logged. Each stage ended with evidence: tests run, numbers measured, bugs written down.
Stack: Next.js 16 (App Router), TypeScript, Supabase (Postgres, Auth, row-level security), Gemini and Claude APIs (tool use), Zod, Tailwind. Tested with Vitest, pgTAP and Playwright with axe.
Data: 38,365 fragrances with notes, accords and community votes from Fragrantica's public catalogue via the open Decant dataset (downloaded at build, never committed; facts and aggregates only, every page links to its source). Live fallback to Open Beauty Facts, weather from Open-Meteo, optional live prices from Google Shopping via SerpApi.
Built by Aditya Hasija, product manager · Portfolio