Public demo
OvenLovin can run as a separate Vercel project of the same repo. Visitors skip Clerk, land in a private sample kitchen, and can connect Claude or Grok with a sandbox API key.
The product production project must never enter demo mode.
How it works
OVENLOVIN_DEMO_MODE=1turns demo mode on.- On Vercel production, the dedicated demo project must also set
OVENLOVIN_DEMO_PROJECT=1. If the product production project hasOVENLOVIN_DEMO_MODEset, the build fails. - An uncookied kitchen visit goes to
GET /api/demo/enter, which copies the sample household into a private sandbox and sets theol_demo_sandboxcookie (httpOnly, about 24 hours): 5 people (rules + loves), about 20 recipes with images, cookbooks, a meal plan, a shopping list, and one API key. - Writes are allowed but rate-limited (60/hour). Recipe imports are capped at 5. Image uploads are off. AI calls are off. MCP paste import uses the same deterministic parser as REST.
- Settings shows this sandbox's MCP URL (
/mcp) and API key. MCP is stateless: each POST authenticates and tools see the key-derived household. - Nightly cron
GET /api/cron/demo-cleanup(0 8 * * *UTC) wipes expired sandboxes. Production requiresAuthorization: Bearer $CRON_SECRET.
Demo logic lives in apps/web/src/lib/demo/.
Local run
Open http://localhost:3000 - demo mode seeds a sandbox and redirects to /recipes.
Product landing
Set NEXT_PUBLIC_DEMO_URL on the product Vercel project so the main landing page shows Try the demo.
Agent connect
Just looking? The public demo at https://ovenlovin-demo.vercel.app issues a 24h sandbox key at /api/demo/enter?format=json.
GET /api/demo/enter?format=json returns mcpUrl and apiKey. Or open Settings after visiting the kitchen. GET /api/demo/reset and the nightly cron are internal.
- MCP URL:
https://ovenlovin-demo.vercel.app/mcp - Header:
Authorization: ApiKey rkapi_… - Transport: stateless HTTP (no session id). Household comes from the key.
Full Vercel project settings, env vars, and cron config: docs/demo.md.