Skip to content

v2.0.0 — plans, not weeks

Choose a tag to compare

@gavdevs gavdevs released this 12 Jul 22:40
· 9 commits to main since this release
Immutable release. Only release title and notes can be modified.

Caution

Do not upgrade an existing install to this version — its migration deletes your meals and grocery items. Use v2.0.1 instead, which fixes the migration. Fresh installs are unaffected.

Meal plans are no longer chained to the calendar. A plan used to be "a week", and every meal a weekday slot — now a plan is whatever you're actually planning: a full week of dinners, a weekend of brunches, breakfast-lunch-dinner-snacks, or one big Sunday cook.

Highlights

  • Plans of any size. A meal plan holds 1+ meals, each typed breakfast, lunch, dinner, or snack. The plan view groups meals under those headings instead of weekdays.
  • A plan lifecycle. Plans move through upcoming → active → completed, with exactly one active plan at a time (enforced right down to the database). Push a plan while another is active and it queues as upcoming; promote it when you're ready; complete it when you've cooked through it.
  • New Plans section in the app. The old "This Week" tab is now Plans with four sub-tabs — Active, Upcoming, Completed, and Favorites. Upcoming and completed plans show as cards listing their recipes; tapping one opens a full plan view with activate/complete actions.
  • Named + favorite plans. Rename plans inline ("Meal Plan 3" until you do), and star the keepers — a plan needs a name before it can be favorited. Your assistant can recall favorite plans and rebuild them on request.
  • Meal-typed recipes. Recipes carry meal types too — set explicitly or learned automatically from how they get planned. The recipe list gained meal-type filter chips, and search by type works over MCP.
  • Grocery list follows the active plan. Same derived, section-grouped, check-off-preserving list — now tied to whatever plan you're cooking from rather than "this week".

MCP changes

The tool surface grew from 7 to 10 tools: push_meal_plan (now takes name, optional planId to revise, and typed meals — no more weekStart/dayOfWeek), list_meal_plans (filter by status or favorites), get_meal_plan, get_active_meal_plan, activate_meal_plan, complete_meal_plan, plus the existing recipe tools. The wire layer still tolerates small-model quirks (string numbers, "1/2", double-wrapped arrays) and now canonicalizes meal types ("Dinner", "SNACKS" → dinner, snack).

The agent skill was rewritten for the new model and moved: skills/weekly-meal-planning/skills/meal-planning/.

Breaking changes

  • push_meal_plan arguments changed: {planId?, name?, meals: [{mealType, recipeId | recipe}]}weekStart and dayOfWeek are gone. Revising a plan now means passing its planId instead of re-pushing the same week.
  • get_recent_meal_plans and get_meal_plan_for_week were replaced by list_meal_plans and get_meal_plan.
  • tRPC: plans.byWeek / plans.current were replaced by plans.byId / plans.active (+ activate, complete, rename, toggleFavorite mutations); get_recipe returns usedInPlans instead of usedInWeeks.

Upgrading

  1. Back up ./data/ (it's one SQLite file — copy the folder).
  2. docker compose pull && docker compose up -d — the database migrates automatically on boot. Existing weeks become plans named "Week of {date}": past weeks land in Completed, the current week becomes Active, future weeks become Upcoming. Weekday order is preserved as meal order and recipe meal types are backfilled from history.
  3. Re-copy the agent skill from skills/meal-planning/ (the old path is gone), and refresh/reconnect the MCP server in your chat client so it picks up the new tool list.
  4. Optionally verify with scripts/verify-mcp.sh http://<host>:8090 — it now pushes a test plan and marks it completed, so it never touches your active plan.