Your own meal-kit service, for the food you cook at home.
Claude suggests dishes and you pick them on your phone. You get the recipes, a shopping list priced
at the supermarkets near you, and a prep-day timeline.
Quick start · How it works · Configuration · Privacy · FAQ
Meal-prep plans usually fail for three reasons. Nobody likes the food, cooking takes all Sunday, and the shopping costs more than planned. Meal kits get the experience right: you choose from a few nice-looking dishes and everything arrives sorted. They're also expensive.
Meal Prep Studio gives you that experience with your own supermarket and your own taste:
- You choose, Claude plans. 4 lunch and 4 dinner ideas per round, each with a photo, macros, price and active cooking time. Give a thumbs up or down, add a note like "no feta" or "cheaper", and Claude revises the round in about 30 seconds.
- The numbers are calculated. Claude writes the recipes. Macros, portion splits, pack sizes and prices are calculated in code from an ingredient database.
- It learns your household. Rate each week per person. Failures block a whole category, not just one recipe, and successes become rules for the next round.
flowchart LR
A([New suggestions]) --> B[4 lunch + 4 dinner ideas]
B --> C{Your reactions}
C -- thumbs, notes, wishes --> D[Claude revises]
D --> B
C -- one dish per meal --> E[Create the plan]
E --> F[Menu · Shopping list · Prep timeline]
F --> G[Cook & eat]
G --> H[Rate the week]
H -- feedback log --> A
Each button starts one background job. The page shows its progress (loading offers, Claude thinking, calculating, comparing stores, finding photos) and refreshes itself when the job ends. You can close the page in between.
The Daily tab lists everything outside the prep block, day by day with checkboxes: putting the meat away after shopping, preheating the dishes before you start, picking lettuce for the next two days on Tuesday evening, and the one-minute assembly every morning and evening. The current day is highlighted.
|
Per-person portions Supermarket comparison A prep timeline with timers |
Hard exclusions Feedback that sticks Plain files, no lock-in |
npx mealprep-studio init ~/my-kitchen --lang en # or --lang de
$EDITOR ~/my-kitchen/household.toml # people, calorie targets, budget, postcode
$EDITOR ~/my-kitchen/profile.md # likes, dislikes, intolerances, kitchen equipment
npx mealprep-studio check ~/my-kitchen # checks config, Claude CLI and offers
npx mealprep-studio serve ~/my-kitchenOpen the printed address on your phone (it must be on the same Wi-Fi) and tap Get new suggestions.
Prefer Bun? Use bunx mealprep-studio … instead of npx mealprep-studio …. To get a permanent
command, install it once with npm i -g mealprep-studio. Then mealprep-studio … (or the short
alias mealprep …) works everywhere.
Meal Prep Studio is also a Claude Code plugin. Claude then runs the commands for you: it sets up the household folder, starts a round, shows you the dishes and writes the plan.
/plugin marketplace add fHpro0/mealprep-studio
/plugin install mealprep-studio@mealprep-studio
Then ask for "a meal prep plan for next week" or "rate last week's food". Your data stays in your household folder, as always.
- Node.js 22+ (or Bun). The only dependency is
smol-toml, which readshousehold.toml. - Claude Code, installed and logged in. The app calls the
claudeCLI in the background and uses your Claude subscription or API key.
Every button is also a command:
npx mealprep-studio run ~/my-kitchen neue_runde # new round of suggestions
npx mealprep-studio run ~/my-kitchen ueberarbeiten 2026-10-12 # revise using your reactions
npx mealprep-studio run ~/my-kitchen plan_erstellen 2026-10-12 # write the week plan
npx mealprep-studio run ~/my-kitchen feedback_uebernehmen 2026-10-12
npx mealprep-studio calc ~/my-kitchen 2026-10-12 # recalculate after editing by handEverything personal lives in your household folder. The package stays generic.
| File | Purpose |
|---|---|
household.toml |
people and calorie targets, meals, schedule, budget, exclusions, offers, model, PIN |
profile.md |
free text that Claude reads: goals, medical constraints, likes, dislikes, equipment |
feedback.md |
ratings, blocked categories and rules (the app writes it, you can edit it) |
pantry.md |
what you already have at home |
ingredients.json |
your own ingredients and real prices, which override data/ingredients.json |
kitchen.json |
optional kitchen inventory (pots, trays, sizes, depth). Edit it in the web app (pot icon in the header); Claude plans only with it |
Example household.toml
name = "Our Kitchen"
language = "en" # "en" or "de": the UI and everything Claude writes
exclusions = ["mushroom", "peanut"] # hard filter ("without X" is fine)
[schedule]
days = 6 # eating days per prep round
freeze_days = 2 # optional: the last 2 days go into the freezer on prep day
shopping_day = "sat"
prep_day = "sun"
first_day = "mon"
[budget]
per_round = 60
currency = "€"
[[persons]] # as many as you like
id = "a"
label = "Alex"
kcal = 2200
protein = 150
[[persons]]
id = "b"
label = "Sam"
kcal = 1800
protein = 120
[[fixed_meals]] # not planned, but counted
name = "Breakfast"
kcal = 450
[[meals]] # planned by Claude: `share` of the rest, or exact `targets`
id = "lunch"
label = "Lunch · cold"
cold = true
share = 0.42
[[meals]]
id = "dinner"
label = "Dinner · warm"
share = 0.58
[offers]
enabled = true # Germany / Austria
zip = "10115"
retailers = ["aldi-sued", "lidl", "netto-marken-discount", "kaufland", "rewe", "edeka"]
[agent]
model = "sonnet" # "opus" is slower and more careful
[server]
port = 8090
pin = "1234" # recommended if guests use your Wi-FiAlready have notes and plans in your own folder structure? Point the app at them with [paths]
(see docs/FORMAT.md). Nothing has to be moved.
Each action is one structured Claude call with no tools, no MCP servers and no file browsing.
The server puts the profile, feedback log, offers, ingredient list and your reactions into one
prompt and asks for JSON that matches a schema (claude -p --json-schema). Everything else runs
in the app.
| Action | Typical time |
|---|---|
| New round (8 ideas, offers, prices, photos) | ~1 min |
| Revise a round (keeps liked dishes, replaces the rest) | ~30 s |
| Full week plan (recipes, shopping list, timeline) | ~1–1.5 min |
| Take in the week's feedback | ~10 s |
| Store comparison for a selection | instant, runs in your browser |
Offers are cached per shopping day. The round shows up before its photos have finished loading.
- Built for your home network. The server listens on your LAN. Set a
pinif other people use your Wi-Fi. - Kept out of search engines. If you do expose it, it serves a
robots.txtthat disallows everything, sendsX-Robots-Tag: noindex, nofollowon every response, includesnoindexmeta tags, sends no referrer, and answers known crawlers, AI scrapers and link-preview bots with403. It still has no user accounts, so don't put it on the open internet without a reverse proxy that handles authentication. - What leaves your machine: your profile and feedback go to Claude as part of the prompt. Offer searches go to marktguru and photo searches go to Wikimedia Commons.
- Supermarket offers come from marktguru.de's public web API, which isn't officially documented.
It may change or break, and you're responsible for using it in line with marktguru's terms.
Turn it off with
[offers] enabled = false; planning then uses estimated prices. - Not medical advice. Calories and macros are estimates from average nutrient data.
Do I need an Anthropic API key?
No. The app runs the Claude Code CLI, which uses whatever login you have: a Claude subscription or an API key. Each button press is a single request without tool use.
I'm not in Germany or Austria. Does it still work?
Yes. Set [offers] enabled = false. Prices then come from the ingredient database. Add your real
prices to ingredients.json in your household folder, and they override the defaults.
Can it plan for one person, or for four?
Yes. Add or remove [[persons]]. Portions, shares and the per-person rating screen follow the config.
Where do the photos come from?
Freely licensed photos from Wikimedia Commons, credited in the app. They show a similar dish, not necessarily your recipe. Tap Another photo if one doesn't fit.
Can I edit a plan by hand?
Yes. Everything is JSON and Markdown. After changing ingredient amounts in a round, run
npx mealprep-studio calc <dir> <round> to recalculate macros and prices. Before the app overwrites a plan,
it saves a backup in jobs/backups/.
src/ TypeScript: server · actions · Claude call · calculator · prices · offers · images · markdown
dist/ compiled JavaScript that npm installs (built by `npm run build`, not in git)
test/ tests, including parity fixtures recorded from the original Python version
skills/ the Claude Code skill (with .claude-plugin/ it makes the repo a plugin)
web/ the app: plain HTML/CSS/JS, English + German, no build step
prompts/rules.md general cooking rules every plan follows
data/ingredients.json default ingredients: nutrients, typical prices, offer search terms
examples/ starter household folders (en, de)
docs/ data formats, README graphics (make_images.py, needs Pillow)
MIT. Photo and font credits for the README images are in docs/img/CREDITS.md.

