This is the dual-audience reference page intended for grant applications, investor decks, developer onboarding, and AI context-loading. The user-facing version lives at /features. Toggle between the plain-language and technical descriptions below.
For deeper technical reference:
See ARCHITECTURE-MAP.html in the project root for the complete services / dependencies / cost map. (Gitignored, dev-only.)
Find, save, customize, and compare cocktails — from 180-year-old canon to the bespoke recipe you just invented at 2 a.m.
Plain
Over 180 hand-curated classic cocktail recipes. Every recipe has full metadata: ingredients with measurements, technique, glass, garnish, history, flavor profile.
Technical
Drizzle ORM tables: `recipes`, `ingredients`, `recipe_ingredients` (join with quantities). Curated import scripts in `scripts/` populate from public-domain sources and modern licensed databases. Each row carries `source_attribution`, `pd_source` flag, `archetype` classification, structured flavor profile, allergens, ABV estimate.
Plain
Save your own creations. Edit anytime. Tag with notes. Share with your team if you have one.
Technical
`recipes.created_by` FK to user; `recipes.is_public` flag controls discoverability; team-scoped recipes via `team_recipes` join.
Plain
Two lists: 'Favorites' for the bar's house list (team-shared if you're on a team), 'My Favorites' for your personal go-tos.
Technical
`user_favorites` table (user_id + recipe_id), separate `team_favorites` for shared house lists. House favorites visible to team members only.
Plain
Tell it what ingredients you have, what flavors you want, what mood you're going for — it surfaces the recipes that fit.
Technical
Server-side filtered query against the recipes table with weighted scoring: ingredient overlap, flavor-axis distance, archetype match. Results paged + sortable.
Plain
Put two or three recipes side-by-side to see exactly how they differ — ingredients, ratios, technique, glass, garnish.
Technical
Client-side diff view; reads from cached recipe queries; renders structured ingredient deltas (added / removed / quantity changed).
Plain
See where a cocktail came from and what came after it. The Daiquiri begat the Hemingway Daiquiri begat the Floridita — visually.
Technical
`recipe_relationships` table (parent_id, child_id, relationship_type). Rendered as a directed graph with d3-style force layout.
Plain
Swap in a different gin, a different bitters, a different syrup — see what actually changes about the drink.
Technical
Predictive view: takes a recipe + a substitution candidate, applies stored flavor-axis vectors per ingredient, and renders the predicted shift.
Plain
Anyone on the internet can search and view a curated subset of recipes — no account needed. Great for sharing a drink with a friend.
Technical
Server-rendered routes `/recipes`, `/recipes/:slug`, `/recipes/recommended-reading` with full Schema.org Recipe JSON-LD, per-recipe OG share cards (auto-generated at build), inclusion in `sitemap-recipes.xml`.
Reference material that actually travels with you. No more 'check the binder under the well.'
Plain
Every standard bartending technique — how to do it, when to use it, common mistakes, prerequisites — explained without jargon.
Technical
`techniques` table with `prerequisite_ids[]` for skill-tree relationships (currently flat reference, optional progressive skill tree visualization deferred).
Plain
What goes in what glass, why, and what to use as a substitute when you don't have the right one.
Technical
Reference page with structured glass-type metadata, capacity, occasion mapping.
Plain
How flavors work together. Why a smoky mezcal pairs with grapefruit. What 'balanced' actually means in a sour. With an interactive flavor explorer.
Technical
Curated flavor-axis taxonomy (sweet/sour/bitter/aromatic/herbal/smoky/etc.), interactive d3 wheel visualization, ingredient tagging by axis.
Plain
The math behind every cocktail family. Sour template = 2:1:0.75. Spirit-forward = 2:1:dash. Internalize the ratio, riff freely.
Technical
Template definitions with default ratios + scaling helpers. Used by Cocktail Generator and Recipe Finder for archetype matching.
Plain
Quick reference for the cocktail-adjacent stuff your guests order. Wine basics, beer styles, what pairs with what food.
Technical
Static reference content, queryable by style / occasion / dish.
Plain
BAC math, signs of overservice, refusal-of-service scripts, state-specific requirements. Plus a built-in AI quiz that drills you on real-life scenarios.
Technical
Static content + AI-driven quiz endpoint (`/api/safe-service/quiz/`) that generates scenario questions via Claude. Rate-limited (30 req/hr).
The during-the-shift tools. Built to be usable on a phone while you're being yelled at.
Plain
Track what's behind your bar. Stock levels, costs, low-stock alerts. Tie it back to recipes so you know what you can actually make.
Technical
`inventory_items` table per user/team; `recipe_ingredients` join enables cross-reference. Future: auto-deduction from order events.
Plain
Log drinks as they go out. See your sales mix in real time. Useful for pace, prep, and end-of-night.
Technical
`orders`, `order_items` tables with timestamps. Real-time aggregations for shift dashboards.
Plain
Drag-and-drop your room layout. Assign sections. Tag tables. Track who's covering what.
Technical
`service_rooms`, `service_tables`, `service_seats` schema with x/y coordinates. React-based drag-and-drop editor with persisted layout.
Plain
For private events, parties, or VIP service: track every drink served, who got it, what they liked. Hand the report to the host at the end.
Technical
`bartender_sessions`, `session_drinks` tables. Exportable end-of-night report.
Plain
Scaling up for an event? Tell it the recipe and the number of servings — it does the math, including dilution and oz-to-ml conversion.
Technical
Pure-function scaling with stored conversion ratios and dilution factors per technique. Output shareable / printable.
Plain
End-of-night math: house tipout, support staff splits, your take-home. Save your defaults, run it in 30 seconds.
Technical
Persistent per-user tipout rules, structured payouts.
Plain
A drill: pour a 'one count' into a vessel, the app tells you how close you got. Calibrate your hand.
Technical
Manual measurement input + tolerance scoring against target volume.
Plain
Plot every cocktail on your menu by popularity vs. profit margin. Identifies your Stars (push them), Plowhorses, Puzzles, and Dogs (cut them). Switch between the canonical 1982 Kasavana & Smith framework and our bar-context-aware BBB Bar Model, which adds per-category thresholds (a $3 shot and a $24 craft cocktail no longer compete in the same statistical pool), 28-day trend velocity (rising vs. fading), a regulars-favorite flag (don't cut a Dog that anchors a regular's loyalty), low-confidence flagging on under-sampled items, and an optional labor-adjusted margin axis for menus that mix fast pours with frozen / blended / batched builds.
Technical
`/api/insights/menu-engineering/:teamId?model=ks|bbb&labor=on|off`. K&S path uses canonical 70%-of-mean popularity threshold and $contribution-margin profit axis with one global pair. BBB path computes per-category medians (`recipes.categories[0] || archetype || spiritType`), 28-day-vs-prior-28-day trend windows from `orders.createdAt`, regulars detection (customers with ≥3 distinct order dates via `orders.customerId`), and a `marginPerLaborMinute = cmDollars / (orderCount × prepTimeSeconds / 60)` axis when labor toggle is on. Both responses share the same item shape; client renders extra columns (trend, regulars %, low-N badge) only in BBB mode.
Used sparingly, where it actually saves time. We don't shove AI into everything for the sake of it.
Plain
Tell it what you want (ingredients, mood, occasion). It invents a coherent, correctly-balanced cocktail with a name, ingredients, technique, and history.
Technical
Anthropic Claude Sonnet (`claude-sonnet-4-6`). Structured prompt with template-ratio constraints. Output validated against recipe schema.
Plain
Paste any cocktail blog URL — it reads the page and uses AI to fill in any missing fields (ingredients, ratios, instructions, glass, garnish).
Technical
Cheerio HTML parsing + Claude completion for gap-filling. Admin-only. AI rate-limited at 30/hr.
Plain
For curated canon recipes, AI adds historical context, flavor descriptions, and serving suggestions when the source data is sparse.
Technical
`server/claude.ts` `enrichRecipeData()`. Output cached in `recipes.ai_enrichment_*` columns to avoid re-running.
Plain
Generates real-world responsible-service scenarios on demand. 'A regular's been here 4 hours, slurring, asks for a third old fashioned. What now?'
Technical
Scenario-template prompts to Claude with state-law context.
Plain
Push to talk — 'old fashioned for table 12, neat manhattan for the bar' — and orders are logged hands-free.
Technical
Browser Web Speech API (no server-side TTS for input); Kokoro TTS proxy planned for output. Floating push-to-talk component on every screen.
For when you're spending a Sunday afternoon prepping a 5-gallon batch.
Plain
Build, scale, and balance a sangria from scratch. Account for fruit weight, maceration time, and how the wine evolves over 24 hours.
Technical
Custom builder UI with stored maceration timing model and inventory cross-check.
Plain
Frozen-drinks recipes that actually work in a blender. Ice ratios included.
Technical
Blended-style recipe builder with ice-volume modeling.
Plain
Historical punch recipes (oleo-saccharum and all) and a builder for inventing new ones.
Technical
Punch-style recipe builder with citrus-oleo and dilution modeling.
If you run a bar program, the Pro tier turns this into a team tool.
Plain
Invite your bartenders. Manage roles. Share menus, favorites, inventory, service area.
Technical
`teams`, `team_members` schema with role enum (lead, bartender, viewer). Role-gated route access enforced server-side.
Plain
If you're the lead: see what your team's working on, what needs attention, what's selling.
Technical
Aggregate views over team-scoped data with role-gated server endpoints.
Plain
Publish your bar's official menu so your team and your guests are always on the same page.
Technical
`team_menus`, `team_menu_items` schema; menu versioning supported.
Plain
Bulk-import recipes from a spreadsheet. Useful when migrating from your old binder, Google Doc, or POS.
Technical
Multer file upload + structured CSV parser; admin-only.
One app, three platforms. Same data everywhere. Works offline.
Plain
Works in any modern browser. Install it to your home screen. Works offline for the parts that don't need a server.
Technical
Service worker (`client/public/sw.js`) caches the app shell + critical data. Web App Manifest configured for installation prompt.
Plain
Real native app on the App Store. Same features as web, native performance.
Technical
Capacitor 7 wrapper, bundle id `com.moonlitsociallabs.theservicewell`, native plugins for AdMob / RevenueCat / Push / Camera / Microphone.
Plain
Real native app on Google Play. Same features as web, native performance.
Technical
Capacitor 7 wrapper, package `com.moonlitsociallabs.theservicewell`, same native plugin set as iOS.
Plain
Lose signal mid-shift? The app keeps working. Your changes sync up when you're back online.
Technical
Service worker offline-first caching for app shell + recipe data. Local IndexedDB for in-flight writes.
Plain
(Mobile only.) Optional alerts — new shared recipe in your team, low-stock warning, weekly digest.
Technical
Capacitor Push Notifications plugin; backend dispatcher to FCM/APNs.
Boring infrastructure done right.
Plain
Standard login. Forgot-password works. Sign in once on each device, stay signed in.
Technical
Supabase Auth (JWT). Server sessions in Postgres via `connect-pg-simple`. Rate-limited (15 attempts / 15 min).
Plain
Free, Plus ($4.99/mo), Pro ($9.99/mo). See the pricing page for the full breakdown.
Technical
Stripe Checkout (web), RevenueCat (iOS/Android IAP). `users.subscription_tier` enum.
Plain
Pre-purchased AI credits that get used when you opt in to overage. Off by default, never expires, no surprise bills.
Technical
`credit_packs` SKUs in Stripe + RevenueCat; `users.extra_credits_balance` ledger; `users.overage_enabled` opt-in flag.
Plain
We use PostHog to see which features are used and where people get stuck. We don't sell data and we don't run ad-tracking pixels.
Technical
PostHog client SDK with `respect_dnt: true` and IP-anonymization. No third-party advertising trackers in the React app.
Plain
Recipes are tagged for common allergens (egg, dairy, nuts, gluten) so you can warn guests.
Technical
`recipes.allergens[]` enum; `recipes.diet_tags[]` (vegan, kosher, halal-compatible, etc.).
Plain
Email us and we'll export everything you've created or wipe it permanently — whichever you ask for. GDPR/CCPA compliant.
Technical
Manual right-to-access + right-to-erasure flow via support email; planned automation.
© 2025-2026 Moonlit Social Labs. All rights reserved.