Features — Plain & Technical

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.)

Recipes & Discovery

Find, save, customize, and compare cocktails — from 180-year-old canon to the bespoke recipe you just invented at 2 a.m.

Canon recipe database

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.

Open route
Custom recipes

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.

Open route
Favorites & My Favorites

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.

Open route
Recipe Finder

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.

Open route
Recipe Comparison

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).

Open route
Recipe Lineage (family tree)

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.

Open route
Ingredient Impact

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.

Open route
Public recipe browser (SEO)

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`.

Open route

Knowledge Base

Reference material that actually travels with you. No more 'check the binder under the well.'

Techniques Library

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).

Open route
Glassware Guide

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.

Open route
Flavor Theory & Flavor Wheel

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.

Open route
Template Ratios

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.

Open route
Wine & Beer Pairing

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.

Open route
Safe Alcohol Service

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).

Open route

Bar Operations

The during-the-shift tools. Built to be usable on a phone while you're being yelled at.

Inventory Tracking

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.

Open route
Order Tracking

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.

Open route
Service Area Floor Plan

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.

Open route
Party Mode (Session Tracking)

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.

Open route
Batch Calculator

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.

Open route
Tipout Calculator

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.

Open route
Freepour Test

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.

Open route
Menu Engineering Matrix

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.

Open route

AI Features

Used sparingly, where it actually saves time. We don't shove AI into everything for the sake of it.

AI Cocktail Generator

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.

Open route
URL Recipe Importer

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.

AI Recipe Enrichment

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.

Safe Service AI Quiz

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.

Open route
Voice Commands & Ordering

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.

Labs (Specialty Builds)

For when you're spending a Sunday afternoon prepping a 5-gallon batch.

Sangria Lab

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.

Open route
Blended Lab

Plain

Frozen-drinks recipes that actually work in a blender. Ice ratios included.

Technical

Blended-style recipe builder with ice-volume modeling.

Open route
Punch Lab

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.

Open route

Teams & Management

If you run a bar program, the Pro tier turns this into a team tool.

Team Management

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.

Open route
Team Lead Dashboard

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.

Open route
Shared House Menus

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.

CSV Import

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.

Open route

Mobile & Cross-Platform

One app, three platforms. Same data everywhere. Works offline.

Web App (PWA)

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.

iOS Native App

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.

Android Native App

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.

Offline Support

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.

Push Notifications

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.

Account, Billing & Privacy

Boring infrastructure done right.

Sign in with email + password (or Google)

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).

Subscription tiers

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.

Open route
Extra-usage credit packs

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.

Open route
Privacy-respecting analytics

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.

Allergen & dietary safety

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.).

Data export & deletion

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.