Roadmap · what’s next

The backend, rebuilt in Rust.

The foundation work is done. Fraghab’s recommendation engine — the heaviest part of every request — now runs on a dedicated server written in Rust, live in production and proven identical to the original across thousands of real comparisons. Next, that core gets pushed to scale, then Fraghab leaves the browser: native iOS and Android apps on the App Store and Google Play. Everything shipped so far is logged below.

Rust
Live backend
5
Phases planned
Q4 ’26
Next target
74
Already shipped
0
Rollbacks
Backend live · Jun 2026 — Next · Q4 2026
The platform rebuild
Backend live · scaling next

A dedicated Rust backend.

The roadmap reopened, and the work went quieter and deeper: reading every log and bug report from the live app, then rebuilding Fraghab’s backend on a dedicated server written in Rust. That backend is now live in production — engineered so the experience grows faster, not slower, as the community grows.

The heaviest compute — the recommendation engine — has moved off the edge and into a memory-safe, fearlessly concurrent core, swapped in only after it proved identical to the original across thousands of live comparisons. Next comes performance at scale, and then the core powers what follows: native iOS and Android apps on the App Store and Google Play, served by the same API.

The stackRustAxumTokiosqlxTurso
Live architectureIn production
Every wearer
Browser · mobile · the community
Next.js · Vercel
UI · Server Components · Server Actions
Rust backendNew
Axum · Tokio · the compute-heavy core
Claude tool-use
Suggestions · NLQ
Cache layer
Read-through · tagged
Turso / libSQL
Primary store · pooled · writes-first
Edge frontend · Rust core · pooled dataMoving compute down →
The plan
5 phases · sequential
LiveShipped · Jun 2026·4 workstreams

Signal & triage

Before rebuilding anything, we listened. Every log line and bug report from the live app was read, grouped, and ranked — so the new architecture was shaped by real bottlenecks, not guesses.

Step 1 of 5
01
Structured Logging & Tracing

Request-level traces across Server Actions and the Suggest engine. Every slow path earns a span, so the hot routes surface themselves instead of hiding inside averages.

02
Bug Report Triage Cadence

The in-app bug queue gets a standing review rhythm. Reports are reproduced, grouped by root cause, and ranked by how many wearers each one touches.

03
Performance Baselines

p50 / p95 / p99 latency captured per route, plus a slow-query log against Turso. You can't improve what you haven't measured first.

04
Real-User Web Vitals

LCP, INP, and CLS sampled from real sessions and split by page and device — so frontend cost and backend cost can finally be told apart.

LiveShipped · Jun 2026·4 workstreams

Architecture & profiling

With the data in hand, we designed the backend that scales — mapped the hot paths, drew clean service boundaries, and landed a versioned API contract between the Next.js app and the new server.

Step 2 of 5
01
Hot-Path Profiling

Pinpoint the most expensive work — Suggest scoring, Claude tool-use loops, feed and marketplace queries, and on-the-fly image generation.

02
Service Boundary Design

Decide exactly what moves to a dedicated backend and what stays at the edge, with a clean, versioned API contract between the Next.js app and the new server.

03
Data-Access Redesign

A typed, pooled query layer replacing ad-hoc calls — with read-through caching and tag invalidation so popular reads stop hammering the database.

04
Capacity Model

Project load against exponential user growth and size the system to stay ahead of demand, rather than chase it after the fact.

LiveShipped · Jun 2026·4 workstreams

The Rust backend

A dedicated backend server, written in Rust — memory-safe, fearlessly concurrent, and fast enough that compute stops being the ceiling. The recommendation engine, the heaviest hot path in the app, now runs here in production.

Step 3 of 5
01
Axum + Tokio Service

A live async Rust service on the Tokio runtime with Axum routing — the new home for compute-heavy work, deployed alongside the existing app.

02
Typed Database Layer

A typed query layer against Turso / libSQL with real connection pooling, tuned for high concurrency.

03
Suggest Engine Port

Done. The recommendation scoring engine — the heaviest per-request work in the app — is fully reimplemented in Rust, matched against the original to the last decimal.

04
Dual-Run Migration

Complete. The two engines ran side by side until the Rust path proved identical across a thousand-plus live comparisons; it now serves production, with instant rollback always one switch away.

NowNow · Q4 2026·4 workstreams

Performance at scale

The payoff: an application that gets faster under load, not slower. Horizontal scaling, layered caching, and continuous benchmarking turn exponential growth into a non-event.

Step 4 of 5
01
Load & Stress Testing

Reproducible benchmarks that model peak community moments — the SOTD world map, tournaments, live feeds — at many multiples of today's traffic.

02
Horizontal Scaling

Stateless backend instances behind a load balancer, scaling out automatically as concurrent wearers climb.

03
Layered Cache

A multi-tier cache — per-region runtime cache plus shared invalidation — so the database serves writes while reads come from memory.

04
Cost & Latency Budgets

Per-request cost and latency budgets enforced in CI, so a performance regression never reaches production unnoticed.

QueuedQ1 2027 →·4 workstreams

Native mobile apps

Once the backend stands on its own, Fraghab leaves the browser. Native apps ship to the Apple App Store and Google Play — built on the very API the Rust rebuild was designed to serve, so the phone in your pocket gets the same speed as the web.

Step 5 of 5
01
One Core, Every Client

The versioned API contract from the Rust backend becomes the shared foundation web and mobile both read from. Native apps are possible precisely because the backend was rebuilt to serve them cleanly.

02
iOS on the App Store

A native iPhone app with Face ID sign-in and push notifications for wearing prompts, streak milestones, social pings, and marketplace offers — your collection a tap away.

03
Android on Google Play

A native Android app at full parity with iOS, tuned for the device in hand rather than wrapped in a browser shell.

04
Camera, Offline, In Sync

Snap a bottle straight from the camera, log a wearing with no signal, and let it sync the moment you're back online. Share to anywhere through the system share sheet.

Lower latencyHigher throughputReady for exponential growthZero-downtime migrationNative iOS & Android
Everything shipped so far
Mar 27 — May 25 · 2026

Everything shipped so far.

The build before the rebuild. Sixty days, 74 shipments, zero rollbacks — the numbered roadmap, the engine overhaul, and the platform foundation, laid out in full below. It opens with the day-by-day velocity: one bar per day, the May 25 surge marking the community-launch block where five phases landed together once their dependency gates cleared.

44
Numbered
13
Engine
17
Foundation
74
Total
0
Rollbacks
Daily ship rate · 60 days42 numbered
14 on May 25
MarAprMay
Peak · May 25 surge
·
3 or more shipped
·
1–2 shipped
11 active days
Hard gates
5 chains · all unblocked
AWishlist Catalog

#8 → #12 + #13. Auto-fill populates accord data both downstream features read.

BCommunity Review

#21 → #22 → #23 → #25. Reviews earn rep; Passport surfaces it; Blind Verdict awards it.

CSocial → Suggest

#23 + follows → #38. Passport makes the social graph rich enough to feed scoring.

DTracker → Marketplace

#35 → #36. The per-wishlist split tracker shipped first; the collector marketplace followed.

ENatural Sequence

#10 → #33 → #34. Each enriches the wishlist data model the next reads from. Soft chain.

Phase 01
01 / 9

Collection intelligence

Mar 27 – Mar 30·5 shipped

Five analytics features derived from existing wearings and remaining_ml data — zero new tables, highest value-to-effort ratio in the backlog.

wearings tableremaining_mlzero new tablesdetail page
Tobacco Oud · detailFV-0042
Tobacco Oud
18
Wears
★ 9.0
Rating
~4 mo
Drain
ml left
62 / 100
Year heatmap
Oct — Apr
Cost per wear
$22 → $11−50%
Best conditions
DaySaturday
TimeEvening
SeasonFall
OccasionDinner
5 analytics · zero new tables · detail pageView details →
Build log · 5 entriesAll shipped
01
Wearing Heatmap Calendar#1

GitHub-style contribution heatmap of every date this fragrance was worn. Click any day to surface the occasion and notes from that wearing.

Mar 27Shipped
02
Full Wearing History with Filters#2

Replaces the 5-entry preview with a paginated full timeline. Filters by season, occasion, and date range.

Mar 27Shipped
03
Bottle Drain Predictor#3

"At your current pace, this bottle runs out in ~4 months." Derived from remaining_ml, bottle_size, and wear frequency.

Mar 29Shipped
04
Cost & Value Analytics#4

Total investment, cost per ml, cost-per-wear trend, and estimated bottle value remaining based on remaining_ml / bottle_size.

Mar 29Shipped
05
Best Conditions Insight#5

"You wear this most on Saturday evenings in Fall." Aggregated from day-of-week, occasion, and date → season. Zero extra user input.

Mar 30Shipped
Phase 02
02 / 9

Suggest UX + wishlist catalog

Mar 30 – Mar 31·6 shipped

Suggest page UX improvements built on the existing scoring engine, plus the catalog lookup that gates two Phase 3 wishlist features.

suggest enginecatalog_fragranceswishlistscoring layer
Suggest · context builderWizard
MoodTimeOccasionWeatherInventory
Low inventory
Prioritize bottles < 20 ml
Exclude almost-empty
Baccarat 5404 ml
Oud Wood12 ml
Tobacco Oud18 ml
Wishlist scent profile
Sauvage Elixir
Sauvage Elixir
Dior
Auto
LicoriceLavenderAmberCardamomCinnamon
8 of 12 items auto-filled
Per-occasion rotation
From #9
Work
6 wk ago
Casual
4 times
Date
Last Wed
5 signals · low-inventory toggle · auto-fill #8Generate pick →
Build log · 6 entriesAll shipped
01
Context Builder Flow#6

Pre-suggestion wizard surfacing mood, time of day, event type, and weather override. The engine already handled these signals — this makes them first-class UX.

Mar 30Shipped
02
Low Inventory Awareness#7

"Prioritize bottles running low" re-weights toward remaining_ml < 20ml. Opposite toggle excludes almost-empty bottles.

Mar 30Shipped
03
Scent Profile Auto-Fill from Catalog#8Unlocks #12, #13

Looks up each wishlist item in catalog_fragrances and auto-populates notes, accords, season, and concentration. Adds a mini scent-profile card to every wishlist item.

Mar 30Shipped
04
Per-Occasion Rotation Stats#9

"You haven't worn this for Work in 6 weeks, even though you've worn it casually 4 times." Per-occasion rotation awareness surfaced in the fit breakdown.

Mar 31Shipped
05
Purchase Archive#10

When an item is promoted to collection, the wishlist record is retained as "purchased" with date bought, price paid vs. estimated, and retailer.

Mar 31Shipped
06
Collection Poster GeneratorBonus

Canvas-based shareable poster of the full bottle collection. 1080px-wide dynamic-height PNG with stats header, accord color bar, adaptive bottle grid, and FRAGHAB footer.

Mar 31Shipped
Phase 03
03 / 9

Visual depth + wishlist intel

Apr 1·5 shipped

Visual upgrade to the detail page via radar chart, plus two wishlist-intelligence features gated on #8 from Phase 2.

radar chartcatalog_fragrancesaccord matchingoverlap detection
Scent radar · Oud Wood3-axis
ProjLonVer
Overlap detected
Tobacco Oud
Tobacco Oud
Tom Ford · owned
4 accords
Oud for Greatness
OFG (decant)
Initio · try first
3 accords
Restock18 ml — target 20
3-axis radar · overlap · try-before-buy · restockView similar →
Build log · 5 entriesAll shipped
01
Scent Radar Chart#11

SVG spider/radar chart replacing linear progress bars. 3-axis triangle with grid rings, animated data polygon, diamond vertices, coordinated hover, and stat strip with icons.

Apr 1Shipped
02
Collection Overlap Detection#12Requires #8

When viewing a wishlist item, cross-references its accords against owned fragrances. "You already own Tom Ford Oud Wood, which shares 4 accords with this."

Apr 1Shipped
03
Try Before You Buy#13Requires #8

Surfaces matching decants already in the user's collection that share the most accords. "You have a Replica decant that shares 3 accords — try it first."

Apr 1Shipped
04
Similar Fragrances from Collection#14

Surfaces the top 3–5 fragrances from the user's collection that share the most accords/notes with the fragrance on the detail page.

Apr 1Shipped
05
Restock Alert#15

Set a remaining_ml threshold per bottle with an optional purchase URL. A banner appears when the threshold is crossed.

Apr 1Shipped
Phase 04
04 / 9

Sharing, polish + suggest depth

Apr 1 – Apr 2·6 shipped

Five standalone features with no upstream dependencies — shareability, detail-page depth, and suggest ergonomics.

canvas PNGVenn diagramshareable linkdaily picker
Share · today's pickPNG ready
Fraghab · daily pick
Oud Wood
Oud Wood
Tom Ford · ★ 8.8 · 18 wears
OudAmberSmoky
1080 × 1350Download PNG
Accord overlap
OudAmber4 shared
Daily narrative
“Cold Tuesday morning, overcast. Reach for something dark and resinous.”
PNG card · Venn · convince-me · gift listGenerate card →
Build log · 6 entriesAll shipped
01
Shareable Fragrance Card#16

Generates a downloadable, Spotify Wrapped-style image card showing name, brand, rating, top notes, wear count, and cost per wear.

Apr 1Shipped
02
Side-by-Side Comparison#17

Pick any fragrance from your collection to compare — notes overlap in a Venn diagram, performance diff, cost per wear, total wears.

Apr 1Shipped
03
"Convince Me" Modal#18

From any recommendation card: "Why not X?" shows the top suggestion vs. runner-up side-by-side with score breakdown diffs.

Apr 1Shipped
04
Daily Pick Hero Card#19

Pinned "Today's Pick" at the top of Suggest with a narrative: "Cold Tuesday morning, overcast. Reach for something dark and resinous." Refreshes daily.

Apr 1Shipped
05
Shared Wishlist / Gift Registry#20

Read-only shareable link to the wishlist or a curated priority subset. Items can be marked "gifted" and grayed out. No auth required to view.

Apr 1Shipped
06
Community Fragrance CopyBonus

Search across all users' fragrances from the Add Fragrance wizard to copy metadata into your own collection. Anonymous, deduplicated, sorted by popularity.

Apr 2Shipped
Phase 05a
05 / 9

Community infrastructure

Apr 2 – Apr 3·3 shipped

The most sequentially dependent block in the roadmap. #21 is the keystone — reputation and passport both require it. Built in strict order.

community reviewsreputation systempublic passport
Group Therapy · reviewVerdict
Baccarat Rouge 540
Review@fraghead_nyc · 2h ago
Baccarat Rouge 540
Maison Francis Kurkdjian
★ 9.2 / 10.0Nose · lvl 4
Longevity
8/10
Projection
9/10
Value
6/10
Uniqueness
7/10
8.2
Avg
12
Reviews
9 of 12
Recommend
Badges unlockedNoseVeteranHouse Expert
Review · rep · passport · 3 badgesOpen passport →
Build log · 3 entriesAll shipped
01
Community Review Database#21Unlocks #22, #23, #25

New "Review" post type with structured fields: overall rating, longevity, projection, value, uniqueness (1–10). When 3+ reviews exist, they aggregate into a Community Verdict card.

Apr 2Shipped
02
Reputation System + Expert Badges#22Requires #21

Users earn points from reviews, reactions, helpful answers, trades completed. Unlock tiered badges: Nose, House Expert, Holy Grail Guardian.

Apr 2Shipped
03
Public Scent Passport#23Unlocks #38Requires #21, #22

Every user gets a public profile: collection size, most-worn, top notes, top houses, favorite season, fragrance DNA radar. "Your collection is 78% similar to @fraghead_nyc."

Apr 3Shipped
Interstitial · system update
Apr 4 – Apr 6

Suggest engine overhaul.

Between community infrastructure and Phase 5b, the recommendation engine was rebuilt from the inside out. Thirteen targeted upgrades to how Fraghab scores, matches, and surfaces your next fragrance — plus a weight rebalance so mood and intent drive results, not just rotation gaps.

8
Engine
5
UX + NLQ
13
Total
Scoring intelligence
8
EngineYour Location, Your Weather

Recommendations now use real weather from your saved location — not a hardcoded default. Set your city once, or let the browser detect it.

WasSame weather for everyone
NowYour city's live forecast
EnginePerformance-Aware Picks

The engine factors in how loud and long-lasting each fragrance is. Office picks favor quieter projection; evening picks favor fragrances that last all night.

WasIgnored projection & longevity
NowOccasion-tuned performance matching
EngineDeeper Scent Matching

Mood matching weighs base notes and accords more heavily than fleeting top notes. A dark base counts more than a bright opening for "mysterious."

WasFlat keyword search across all notes
NowLayered scoring: base > accord > heart > top
Engine9 Moods to Choose From

Four new moods join the original five: Romantic, Professional, Cozy, and Mysterious. Each has its own scent vocabulary tuned to the notes that define it.

Was5 moods
Now9 moods with dedicated scent signals
EngineSmart Season Inference

Untagged fragrances still get scored. The engine reads your notes and accords to infer whether a fragrance fits summer or winter — flagged as "inferred."

WasUntagged = invisible to season scoring
NowNotes-based inference with confidence
EnginePrecise Temperature Curve

No more crude hot/cold/mild buckets. A continuous warmth curve maps every degree to a score, so a heavy oud at 55°F scores differently than at 73°F.

Was3 buckets, 25° dead zone
NowContinuous curve, every degree matters
Engine12 Occasions

Six new occasions join the original six: Gym, Outdoor, Beach, Night Out, Wedding, Travel. Each has its own projection/longevity preferences and NLQ vocabulary.

Was6 occasions
Now12 occasions across 4 categories
EngineLearns Your Style

The engine builds a scent preference profile from your wear history and ratings. Accords you reach for often get a subtle boost; accords you avoid don't dominate picks.

WasNo personalization beyond wear count
NowAccord-level preference profile
Suggest experience
5
UXFresher Daily Picks

The daily recommendation checks the last 5 days and avoids repeats. Larger collections get an expanded candidate pool so the engine can surprise you.

WasSame top pick could repeat daily
Now5-day lookback, expanded pool
UXCompliment Getter Mode

A new recommendation mode that prioritizes your most-complimented, highest-rated fragrances with crowd-pleasing projection. Built for guaranteed-hit days.

WasNo social-proof mode
NowDedicated mode weighted on compliments
UXSmarter Natural Language

"Something for Easter brunch" now works. The NLQ parser handles holidays, abstract vibes, fragrance slang, negation, and compound intents.

WasKeyword matching — brittle on real English
NowSemantic parser with holiday & slang support
UXCollection-Aware AI

The AI sees your entire collection — names, accords, wear counts, ratings, feedback. "Something like my Ombré Nomade but fresher" resolves to the actual bottle.

WasAI was blind to your collection
NowFull collection + feedback context
UXStronger NLQ Resilience

Extended timeout, per-user cache for instant repeats, and a smarter keyword fallback that handles natural phrasings like "not too heavy."

Was2s timeout, no cache, rigid fallback
Now4s timeout, per-user cache, natural fallback
Phase 05b
06 / 9

Community depth

May 25·2 shipped

Community engagement features that add entertainment value once the core social infrastructure is active and generating content.

trendingweekly digestblind verdictgamification
Blind verdict · challenge 422h left
?Masked
Blind · @curiousnose
“Smoke curling off church incense. Dry resinous wood underneath. A whisper of plum from a dusty wine cellar.”
SmokyResinousPlumDry wood
Your guess
Type a fragrance name or house…
Detective leaderboard
90d
1@sillage_sam28+340 rep
2@oudarchive24+290 rep
3@curiousnose19+220 rep
Mask · guess · 24h reveal · rep awardSubmit guess →
Build log · 2 entriesAll shipped
01
Trending Algorithm + Weekly Digest#24

"This Week in Group Therapy": most-reacted post, most-discussed fragrance, fastest-rising poll. Posts hitting thresholds earn "Community Certified" and are pinned for 24 hours.

May 25Shipped
02
Blind Verdict Challenge#25Requires #21, #22

Post a scent description without revealing the name. Community guesses in comments. Answer revealed after 24 hours. Correct guessers earn rep. Fragrance Detective leaderboard.

May 25Shipped
Phase 06
07 / 9

Advanced suggest + wishlist commerce

Apr 5 – May 25·5 shipped

Suggest's deeper new-infrastructure features — suggestion logging, travel mode, rotation planning — alongside wishlist price-tracking and sale utilities.

suggestion_log tabletravel modeprice historysale events
Travel mode · ParisMay 12 – 16
PAR
Destination
Paris, FR · 5 days
55 – 70°F
Cloudy · light rain
Mon
Oud
58°Oud
Tue
Amber
62°Amber
Wed
Fruity
70°Fruity
Thu
Gourmand
67°Gourmand
Fri
Wood
55°Wood
Price history · Sauvage Elixir
Target $150
90 daysLow $142 · −23%
Black Friday in 47 days
$450 wishlist queued
Destination · suggestion log · price log · saleOpen planner →
Build log · 5 entriesAll shipped
01
Historical Suggestion Accuracy#26

Tracks whether the user actually wore the top suggestion each day. "You wore the top suggestion 14 out of last 30 days." Requires a new suggestion_log table.

Apr 5Shipped
02
Travel Mode#27

Destination city + travel dates. The engine swaps local weather for the destination's forecast and re-scores the collection. Outputs a day-by-day packing list with swap alternatives.

Apr 6Shipped
03
Weekly Rotation Planner#28

Auto-fills a Mon–Sun grid using the engine, spacing fragrances to avoid repeats within 2 days and respecting tagged occasions. Weather-aware scoring with per-day forecast.

Apr 6Shipped
04
Target Price + Price History Log#29

Set a "buy at" target price per wishlist item. Manually log observed prices over time. Mini trend graph: "Low was $70 on Black Friday." Banner fires when target is hit.

May 25Shipped
05
Seasonal Sale Countdown#30

Tag known fragrance sale events (Black Friday, Nordstrom Anniversary, FragranceNet). Banner: "Black Friday in 47 days — your high-priority wishlist totals $450."

May 25Shipped
Phase 07
08 / 9

Community big bets + wishlist commerce closing

May 25·6 shipped

High-effort Group Therapy features with no upstream dependencies, plus the wishlist's split and bundle mechanics. #35 must ship before #36.

world maptournamentsbundle optimizermarketplace
SOTD world map · live847 live
23 active now
Live@davidsf · Sauvage Elixir·@parfumtokyo · Baccarat 540·@moscownose · Aventus
Bracket · R2/8
Oud Wood64%
Tobacco Oud36%
Aventus48%
Layton52%
Marketplace
Oud Wood 50 ml
Tom Ford · decant · 30 ml left
$95Verified seller
World map · ticker · brackets · marketplaceView listing →
Build log · 6 entriesAll shipped
01
Live SOTD World Map#31

Real-time wall showing what the community is wearing — geographic heatmap with city-level pins, rolling ticker of most-recent SOTDs. "23 people are wearing Sauvage right now."

May 25Shipped
02
Fragrance Tournament Brackets#32

Community-run bracket tournaments: "Best Summer Fragrance 2026 — Round 2 of 8." Head-to-head polls per matchup. Seasonal championships, note-category battles, house battles.

May 25Shipped
03
Smart Bundle Optimizer#33

Groups wishlist items by retailer URL domain. Surfaces: "3 of your high-priority items are on FragranceX — buying together saves shipping."

May 25Shipped
04
"Ready to Buy" Action Surface#34

A dedicated section at the top of Wishlist: "You can afford these 3 items right now." Uses budget goal minus already-spent. Shows only HIGH priority items that fit.

May 25Shipped
05
Decant / Split Tracker#35Unlocks #36

For expensive bottles, track a split with friends — log who's in, amounts owed, ml allocation per person. A "splits" tab per wishlist item.

May 25Shipped
06
Collector Marketplace#36Requires #35

Buy and sell decants and full bottles, collector to collector. Listings with photos and condition, offers, order tracking, seller reviews, and off-platform payment.

May 25Shipped
Phase 08
09 / 9

Cross-feature integration

Apr 4 – May 25·6 shipped

Features that wire together multiple existing systems. #38 is the payoff of the entire social infrastructure built since Phase 5. Outfit vision and couple pairings cap the roadmap.

social graphNLP querygamificationoutfit visioncouple pairings
Outfit match · Vision AIAnalyzed
Outfit photoUploaded
Palette
FormalityRefined · navy
StyleEvening · warm
Top matches
1
Tobacco Oud
Tobacco Oud
Tom Ford
92
score
2
Oud Wood
Oud Wood
Tom Ford
84
score
3
Layton
Layton
PDM
71
score
NLQ + circle favorites
Claude
“Something like my Ombré Nomade but fresher.”
Reference: Ombré Nomade5 in circleChallenge: unworn
Vision · NLQ · circle · challengeView breakdown →
Build log · 6 entriesAll shipped
01
Fragrance Events & Meetup Board#37

Post type for IRL events: fragrance pop-ups, brand launches, collector meetups, decant swaps. RSVP with headcount. Calendar view filtered by city.

May 25Shipped
02
Social Graph Feeds Suggest Engine#38Requires #23

SOTD fragrances from followed users start influencing Suggest scores. "5 people you follow are reaching for X this week." A "Your Circle's Favorites" card in the sidebar.

May 25Shipped
03
Collection Challenge Mode#39

"Unworn Streak": challenge to wear every bottle in your collection at least once this month. Progress bar, count of remaining unworn. Engine recommends which unworn fits today best.

May 25Shipped
04
Natural Language Query#40

Claude-powered semantic parser on Suggest: "Something dark and smoky for a dinner party in the cold." Collection-aware — references your bottles by name, handles holidays, vibes, slang, negation.

Apr 5Shipped
05
Couple's Fragrance Pairings#41

Tag fragrances as masculine, feminine, or unisex and build complementary pairing sets for date nights and events. Community-shared pairings surface on Group Therapy with voting.

May 25Shipped
06
Outfit-Based Suggest#42

Upload an outfit photo and Vision AI analyzes color palette, formality, and style to recommend the best-matching fragrance from your collection with a full score breakdown.

Apr 4Shipped
Parallel track
17 features · Mar 22 – May 24

Platform foundation.

Seventeen features built outside the numbered roadmap — collection essentials, growth surfaces, and platform infrastructure the 42-feature plan assumes exists. Most shipped before Phase 1 began; the rest filled gaps the roadmap never enumerated.

4
Core
5
Growth
8
Platform
Core collection
4
CoreLayering Combos

Combine two or more fragrances into a named layering combo. Photo, ratings, wear history, dedicated detail page, sharable combo image.

combo cardsimage genmilestones
ShippedMar 24
CoreDecants Collection

First-class decant inventory parallel to bottles — size, remaining ml, rating, source, photo. Picker for wearings, list view, detail drawer, mobile sheet.

remaining mlpickermobile sheet
ShippedMar 22
CoreFavorites + Shelf Manager

Star any fragrance and organize the collection into named shelves with assignment dialogs. Favorites get a dedicated page and surface across discovery.

favorites pageshelvesassignment
ShippedMar 22
CoreWearings Archive

Soft-delete archive for wearings with mark-all-as-read and a dedicated archive list. Removes noise from history without losing the audit trail.

soft deletemark all readaudit trail
ShippedApr 19
Growth & retention
5
GrowthOnboarding Wizard

Multi-step welcome flow — pick favorite mood, rate a sample set, see your first personalized result. Token-based welcome route for new accounts.

mood pickrate setfirst result
ShippedApr 4
GrowthDaily Streak + Milestones

Consecutive-day wearing streak with flame badge, streak milestones, and a milestone modal that triggers on first combo, first wearing, and rotation goals.

flame badgemilestone modalstreak
ShippedApr 6
GrowthNotification System

Header bell with unread badge, in-app toasts, and a provider feeding the bell, messages, and wearing prompts. Foundation for every social ping.

bell + badgetoastsprovider
ShippedMar 26
GrowthMonthly Stats Image

Generates a shareable monthly summary image — top-worn fragrances, wear count, accord mix, standout days. Distinct from #16 fragrance card.

canvas PNGmonthly recapshareable
ShippedMar 30
GrowthDashboard Theme Picker

Per-user theme picker with persisted dashboard themes. Token-driven palette swap — preserves the industrial system while letting users tune contrast.

per-user themestoken-driven
ShippedApr 4
Platform surfaces
8
PlatformBuy AI

AI-powered buying assistant for new purchases. Two-step intent + results wizard, scored breakdown for each candidate, "Why this?" rationale modal, post-purchase rate prompt.

intent wizardwhy modalpost-buy rate
ShippedApr 8
PlatformCreator Program

Public creator showcases, analytics dashboard, invite flow, and referral-link onboarding. Powers the curator side of the platform — distinct from collector profiles.

showcasesanalyticsreferrals
ShippedMar 27
PlatformHouse API

Public partner API surface for brands. Application form, signed access, and a landing page for the program. Foundation for verified catalog contributions.

partner accessbrand surface
ShippedMar 27
PlatformURL & CSV Bulk Import

Paste a list of fragrance URLs from supported retailers — Fraghab scrapes name, brand, notes, accords, and image — then review and bulk-confirm. CSV upload pathway too.

URL scrapereview gridCSV
ShippedMay 24
PlatformCollection Export / Print

Print-ready export of the entire collection — formatted for sharing, archiving, or insurance. Bottle metadata, ratings, and remaining ml in one document.

print layoutarchive doc
ShippedMay 24
PlatformBug Report System

In-app bug report surface with screenshot + context capture. Feeds an admin queue separate from feedback so issues never get lost in feature requests.

in-app formadmin queue
ShippedMar 31
PlatformLocation Detection

Auto-detect city via browser geolocation with a dismissible banner. Powers real-weather scoring (Engine Upgrade #1) and Travel Mode destination overrides.

geolocationweather feed
ShippedApr 6
PlatformGroup Therapy Feed

Public-facing community feed with six post types, threaded comments, reactions, and search. The social surface that everything in Phase 5+ plugs into.

6 post typesthreadsreactions
ShippedApr 2
Full build log
74 shipments

Every shipment, in order.

One row per shipped feature across the numbered roadmap, the engine overhaul, and the platform foundation. Sorted by ship date. No gaps, no rollbacks.

DateFeatureID
Mar 22Decants CollectionCore
Mar 22Favorites + Shelf ManagerCore
Mar 24Layering CombosCore
Mar 26Notification SystemGrowth
Mar 27Wearing Heatmap Calendar#1
Mar 27Full Wearing History with Filters#2
Mar 27Creator ProgramPlatform
Mar 27House APIPlatform
Mar 29Bottle Drain Predictor#3
Mar 29Cost & Value Analytics#4
Mar 30Best Conditions Insight#5
Mar 30Context Builder Flow#6
Mar 30Low Inventory Awareness#7
Mar 30Scent Profile Auto-Fill from Catalog#8
Mar 30Monthly Stats ImageGrowth
Mar 31Per-Occasion Rotation Stats#9
Mar 31Purchase Archive#10
Mar 31Collection Poster GeneratorBonus
Mar 31Bug Report SystemPlatform
Apr 1Scent Radar Chart#11
Apr 1Collection Overlap Detection#12
Apr 1Try Before You Buy#13
Apr 1Similar Fragrances from Collection#14
Apr 1Restock Alert#15
Apr 1Shareable Fragrance Card#16
Apr 1Side-by-Side Comparison#17
Apr 1"Convince Me" Modal#18
Apr 1Daily Pick Hero Card#19
Apr 1Shared Wishlist / Gift Registry#20
Apr 2Community Fragrance CopyBonus
Apr 2Community Review Database#21
Apr 2Reputation System + Expert Badges#22
Apr 2Group Therapy FeedPlatform
Apr 3Public Scent Passport#23
Apr 4Outfit-Based Suggest#42
Apr 4Onboarding WizardGrowth
Apr 4Dashboard Theme PickerGrowth
Apr 4Your Location, Your WeatherIntel
Apr 4Performance-Aware PicksIntel
Apr 4Deeper Scent MatchingIntel
Apr 49 Moods to Choose FromIntel
Apr 4Smart Season InferenceIntel
Apr 5Historical Suggestion Accuracy#26
Apr 5Natural Language Query#40
Apr 5Precise Temperature CurveIntel
Apr 512 OccasionsIntel
Apr 5Learns Your StyleIntel
Apr 5Fresher Daily PicksUX
Apr 5Compliment Getter ModeUX
Apr 6Travel Mode#27
Apr 6Weekly Rotation Planner#28
Apr 6Daily Streak + MilestonesGrowth
Apr 6Location DetectionPlatform
Apr 6Smarter Natural LanguageUX
Apr 6Collection-Aware AIUX
Apr 6Stronger NLQ ResilienceUX
Apr 8Buy AIPlatform
Apr 19Wearings ArchiveCore
May 24URL & CSV Bulk ImportPlatform
May 24Collection Export / PrintPlatform
May 25Trending Algorithm + Weekly Digest#24
May 25Blind Verdict Challenge#25
May 25Target Price + Price History Log#29
May 25Seasonal Sale Countdown#30
May 25Live SOTD World Map#31
May 25Fragrance Tournament Brackets#32
May 25Smart Bundle Optimizer#33
May 25"Ready to Buy" Action Surface#34
May 25Decant / Split Tracker#35
May 25Collector Marketplace#36
May 25Fragrance Events & Meetup Board#37
May 25Social Graph Feeds Suggest Engine#38
May 25Collection Challenge Mode#39
May 25Couple's Fragrance Pairings#41
42
Numbered
13
Engine
17
Foundation
74
Total
Get started

Ready to build
your archive.

Sign up with Google or create an account with email — start cataloging your collection in seconds.

Fraghab — Fragrance Collection Index, Est. 2026
Est. 2026