
Live
Mise en Place
A personal dinner planning web app for managing a recipe bank, planning weekly meals, generating shopping lists, and saving reusable meal plan templates.
Notes
Auth
- Password stored as base64-encoded bcrypt hash in env vars — raw bcrypt hashes contain special characters that break
.envparsing - Session managed via iron-session cookie (30 days)
- Single shared password, no user accounts — personal use only
- Demo mode is not authenticated
Data Architecture
- Soft delete pattern for recipes —
deletedflag set, data retained in Redis - Redis key structure:
recipes:ids— set of all recipe IDsrecipes:{id}— individual recipe JSONweeks:{monday-date}— week slot data keyed by Monday's dateplans:ids— set of all plan IDsplans:{id}— individual plan JSON
Hosting & Infrastructure
- Vercel and Upstash regions should be matched for lowest latency — worth checking in both dashboards
export const dynamic = 'force-dynamic'should be added to all API routes to prevent stale caching on Vercel- Photo storage not implemented — would require Vercel Blob or Cloudflare R2 if added later
Known Issues
- PWA standalone mode is inconsistent across pages — Apple pins the URL from when you added to home screen (
/recipes), so only that page runs in true standalone mode. No clean fix exists; known iOS limitation
Future Ideas
- Photo storage per recipe (Vercel Blob or Cloudflare R2)
- Cook mode
- Serving size multiplier
- Filter recipes by ingredient
- Notes per week slot
- Season/occasion tags
- iOS App
- More alternatives to 'eating out'
- Confirmation modals
- Planner notes
- Custom confirmation modals
- Demo mode
Stack
Next.jsTypeScriptReactCSS Modulesiron-sessionbcyptjsZodnanoidUpstash Redis
Infrastructure
HostingVercel
DatabaseUpstash Redis
Meta
Last reviewed2026-05-17
Added5/17/2026