The Setup
A self-hosted kitchen platform for people who want their recipes to stay theirs.
Culinode is a full kitchen management app — recipes, meal plans, pantry, shopping lists, and multi-provider AI — designed and built end-to-end in two months. It runs on your own hardware with a single Docker command, no cloud account required.
Pulls scattered recipes into one place you actually own.
Bookmarks, screenshots, text threads, and printed notes all collapse into a single searchable library. Because the whole stack is self-hosted, nothing gets paywalled, migrated, or sunset out from under the person cooking.
Turns a weekly meal plan into a shopping list without the busywork.
Plan the week, and the shopping list generates itself — grouped by aisle, de-duplicated across recipes, and cross-checked against what’s already in the pantry. The part of meal planning that usually burns an hour on Sunday just stops being work.
The Landscape
Recipe apps either lock you in or leave everything to you.
Most home cooks keep recipes scattered across bookmarks, screenshots, messaging apps, and paper notes. The mainstream apps that solve the storage problem come with subscriptions, walled gardens, and the constant risk of getting shut down or re-priced — taking the collection with them.
The self-hosted alternatives solve ownership but stop at storage. Meal planning, pantry tracking, shopping list generation, and AI assistance are left as exercises for the user. I wanted the full workflow in one place, running on my own hardware.
Recipe detail with serving multiplier, ingredient checklist, and numbered instructions.
The Mission
Ship a full kitchen platform — not just a recipe box — that one person can run at home.
Design and build an end-to-end tool covering recipes, meal planning, pantry, and shopping lists, with optional multi-provider AI. It had to deploy with a single Docker command, keep all data local, and still feel like a real product — not a weekend hack.
The Moves
Four bets, shipped in sequence.
PRD first, monorepo second, working app inside a week
Wrote the PRD in Claude Code, defining the core entities (recipes, ingredients, meal plans, shopping lists) and a monorepo layout with a React frontend, Express backend, and shared TypeScript types. The first working version — recipe CRUD with URL import — was running in Docker inside the first week, which set the pace for everything that came after.
A weekly meal plan that shows enough without overwhelming
The meal planner was the biggest design challenge. A weekly calendar needs to surface recipe name, servings, and cook time per meal without turning into a wall of text. The answer was a vertical day-by-day layout with color-coded meal type badges and inline stat cards that aggregate nutrition and prep time across the full plan.
Shopping lists and pantry that talk to each other
Shopping lists generate automatically from any meal plan, grouping ingredients by category — Protein, Dairy, Produce, Pantry — and consolidating duplicates so two recipes that both need garlic show up as a single line with the combined quantity. The pantry layer tracks what’s on hand and cross-checks against the list so nothing gets bought twice.
Optional multi-provider AI, plus a gamification loop for daily use
The AI integration mirrors the pattern I used in Cortex: pick a provider (OpenAI, Anthropic, Google AI, or local Ollama), configure it per account, and the rest of the app works identically without any API key at all. A gamification layer on top — levels, points, streaks, and 16 achievements — exists because cooking habits form faster when there’s a visible progress loop to return to.
The Payoff
A working kitchen platform, running at home, in two months.
Culinode ships as a single-command Docker deploy with recipes, meal planning, pantry, shopping lists, analytics, achievements, and optional multi-provider AI all working end-to-end. It’s the full scope I would have scoped down in a client engagement — built solo, on my own hardware, in a compressed timeline.
AI providers supported
Solo design + build
One-command deploy
Looking Back
Scope discipline is what made the full scope possible.
The temptation on a passion project is to chase features sideways. Writing the PRD first and sequencing the bets — storage, then planning, then lists and pantry, then AI and gamification — meant each layer landed on a stable one underneath. The lesson I keep pulling forward: a clear spec and a tight loop let a solo designer ship a product-sized surface area in the time a spec-less team spends arguing about tabs.