Off My Plate

Online grocery shopping is solved. Deciding what to cook is not.

The problem

Households spend real time and mental energy every week answering "what are we eating?" under constraints that fight each other: allergies, picky eaters, differing tastes, the time actually available to cook, a budget, and whatever is already in the fridge.

Recipes, preferences, pantry contents and the shopping list all live in different places, and none of them talk to each other. Grocery apps begin after that work is done — they help you buy things, not decide.

What we built

Off My Plate — a meal-planning feature that lives inside an existing online grocery app, taking the decision off the customer's plate and turning it straight into a filled basket.

Knows your household → knows what you have → plans what you should eat → lets you adjust it → buys only what's missing.

It runs end to end: a real backend, a real conversational planner, and a real basket hand-off.

The experience

SurfaceWhat it does
HouseholdA profile per person — allergies, favourites, dislikes, age. Allergies are hard constraints; preferences are strong signals.
AskPlain language in, plan out: "dinner tonight, about 30 minutes." Voice input included.
Week planAll 28 meals of a week as a grid — cook times, who eats each meal, and labels for kid-friendly, vegetarian, and leftovers.
RecipesSaved from anywhere: the retailer's own, your own, or imported by pasting a link or photographing a page.
PantryFridge, freezer and cupboard with low-stock flags — kept current from past orders, receipts, or just by telling it.

Two ideas do most of the work

One meal, small variations. Rather than cooking separately for everyone, the planner finds a single meal that works for the whole table. Asked to feed a household where one adult likes salmon, another likes steak, and two young children are suspicious of vegetables, it produced:

Lemon-Garlic Salmon (& Steak) with Rice and Plain Broccoli
One method, three plates.

Preferences are learnable, not just editable. Saying "the six-year-old doesn't like mushrooms" in the chat updates that profile immediately. Saying "we've got rice and four eggs" stocks the pantry. It gets more useful without anyone filling in forms.

How it works

State of the build

5
Surfaces
28
Meals / week
~5s
To a plan
3
Test suites

Running as a full stack from a single command. The whole chain is covered by automated browser tests that drive the real interface against the real backend: household saved, plan generated, recipe rendered, basket built with correct pantry subtraction and pricing, quantity changed, basket confirmed, pantry updated.

Built on the host app's own design system — colours, typeface, spacing, component patterns — so it reads as part of the product rather than a bolt-on. Responsive from phone to desktop, light and dark themes, and packaged as a mobile shell as well as a web app.

Why it matters

The feature converts a question customers answer alone — and often badly, at 6pm — into a completed grocery order.

What we'd do next

Wildcard track Time won back Claude API Node + Express Vite Capacitor Playwright