Off Your Plate
Dinner, decided. A week of family dinners planned around who you cook for.
What it is
Off Your Plate is a dinner planner for the person who always ends up deciding what the family eats. Tell it who you cook for, what they like, what they will not eat and which nights you cook. Claude plans up to four weeks of dinners and turns them into a shopping list sorted by aisle. Swap any night with one tap, and the family's ratings shape every future plan. I built this one with my 11-year-old son, to teach him how a real product gets made.
- 1-4weeks of dinners planned in one go
- 16cuisines to mix into a plan
- 2AI models: Claude for recipes, Imagen for photos
- 56automated tests, with the AI faked out
Key features
A week of dinners in one go
Claude writes every dinner for the nights you cook in a single structured call, and the plan fills in live as each one lands.
Safe around allergies
Allergies are sent as absolute rules, dislikes as strong avoids, and favourite foods only as loose inspiration, so every dish is not built around the same thing.
Swap a night, say why
Strike any dinner or the whole week and give a reason. That reason is remembered and steers every plan after it.
A smarter shopping list
Plan several weeks and get one big shop for the cupboard and freezer, plus a fresh list for each week, scaled to your family and sorted by aisle.
Ratings that matter
Rate each meal, and each child can rate it too. Favourites come back; the ones nobody liked do not.
Photos for every dish
Each new recipe gets a food photo from Google's Imagen, swapped into the plan as soon as it is ready.
In action
The parts that aren't obvious
Variety decided in code, not by the model
Ruby works out how many dinners each chosen cuisine gets and assigns them slot by slot, then tells Claude exactly which cuisine each recipe should be. The mix is reliable instead of left to chance.
A memory for variety
Dinners from the last three weeks are passed as "do not repeat", and re-planning one night avoids the other dinners already in that week.
Shopping by storage type
Every ingredient is tagged pantry, freezer or fresh. If the model leaves it out, the code falls back to the aisle and then to fresh, because it never assumes something keeps.
A recipe hub that grows
Every generated recipe joins a shared catalogue, de-duplicated by title, so later families can reuse the best-rated dishes.
Testable AI
The Claude and Imagen clients can be swapped for fakes, so the AI paths are tested without calling the real services.
Built with
- App
- Ruby on Rails 8
- Hotwire
- Tailwind CSS v4
- AI
- Claude (structured outputs)
- Google Imagen 4
- Data
- SQLite
- Solid Queue
- Solid Cable
- Cloudflare storage
- Hosting and quality
- Docker
- Coolify
- GitHub Actions
- Brakeman