OvenLovin

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

  1. OVENLOVIN_DEMO_MODE=1 turns demo mode on.
  2. On Vercel production, the dedicated demo project must also set OVENLOVIN_DEMO_PROJECT=1. If the product production project has OVENLOVIN_DEMO_MODE set, the build fails.
  3. An uncookied kitchen visit goes to GET /api/demo/enter, which copies the sample household into a private sandbox and sets the ol_demo_sandbox cookie (httpOnly, about 24 hours): 5 people (rules + loves), about 20 recipes with images, cookbooks, a meal plan, a shopping list, and one API key.
  4. 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.
  5. Settings shows this sandbox's MCP URL (/mcp) and API key. MCP is stateless: each POST authenticates and tools see the key-derived household.
  6. Nightly cron GET /api/cron/demo-cleanup (0 8 * * * UTC) wipes expired sandboxes. Production requires Authorization: Bearer $CRON_SECRET.

Demo logic lives in apps/web/src/lib/demo/.

Local run

pnpm db:migrate
OVENLOVIN_DEMO_MODE=1 DATABASE_URL=postgresql://ovenlovin:ovenlovin@localhost:5432/ovenlovin \
  pnpm --filter @ovenlovin/web dev

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.

On this page