A household kitchen app
Your kitchen's home base.
Mealeo is the app I built so my household could stop juggling recipes, meal plans and grocery lists across five different places. It covers everything from “what should we eat?” to the last item checked off at the store.
Mealeo is private.
It runs for my household on Google sign-in, and only invited accounts can get in. There's no public sign-up. Everything on this page is the real UI running on sample data, so try it out.
Good evening
What's cooking?
Six sections, one kitchen
These are the app's own navigation doodles. Pick one to jump to a live demo.
Cookbook
One recipe box for the whole household
Every recipe we cook, shared between both of us, with ratings, tags and photos so the good ones float to the top.
- Import a recipe from a URL, or snap a photo of a cookbook page and let Gemini transcribe it for review
- Recipes can use other recipes as ingredients (pizza dough inside pizza), with cycle detection
- Group ingredients and steps into sections like “For the crust”, with per-step timings
- Each person rates separately; filter by genre, flavor, meal and tag
- A clean print/export view for sharing a recipe outside the app
Live demo · Real Cookbook cards, tag badges and rating widget. Try clicking a star or a card.
Weeknight Lasagna
Crispy Black Bean Tacos
Red Lentil Coconut Curry
Tofu Pad Thai
Peanut Butter Overnight Oats
Charred Corn Salad
Red Lentil Coconut Curry
Serves 4 · rate it below
Cook mode
A big-tap checklist for when your hands are messy
Start cooking at any serving size and get a full-screen checklist scaled to match, with ingredients grouped by type and steps grouped by section.
- Quantities scale and show as kitchen fractions (tap one to see the decimal)
- Progress lives on the device, so you can leave mid-recipe and pick it back up
- Convert units per session (“1½ tbsp fresh ginger ≈ ¾ tsp ground”)
- Sessions are snapshots, so editing the recipe can't break a cook in progress
Live demo · The real cook-mode screen, scaled from 4 to 6 servings. Check things off.
Ingredients
Legumes
- cups red lentils — rinsed
Pantry
- cans coconut milk
- cup red curry paste
Produce
- yellow onion — diced
- tbsp fresh ginger — grated
- cups spinach
Steps
Prep
- Rinse the lentils until the water runs clear (2 min)
- Dice the onion and grate the ginger (5 min)
Cook
- Soften the onion in oil, then fry the curry paste and ginger (6 min)
- Add lentils, coconut milk and 2 cups water; simmer until tender (20 min)
- Stir in the spinach until just wilted (1 min)
Spin
Can't decide? Spin for it
Narrow by meal, genre, flavor or tag, then let the wheel pick something from the cookbook.
- Filters combine across axes, so “spicy vegan dinner” works
- Live count of how many recipes match before you spin
Live demo · The real Spin picker, on 8 sample recipes.
Meals
Genre
Flavor profile
Tags
8 recipes match
Shopping list
From meal plan to shopping list in one tap
Build a list from a meal plan or any set of recipes. Every ingredient is scaled, merged and sorted by aisle, and the household checks it off together in the store.
- Gemini merges the same ingredient across different units (“4 carrots” + “2 cups chopped”) and explains each merge
- Linked sub-recipes expand recursively, so their own ingredients land on the list
- Photograph a handwritten list and it's matched against the pantry
- Merge two lists, add one-off items, and leave notes for whoever's shopping
Live demo · Built from the same checklist parts (checkbox, progress bar, fraction quantities). Check things off.
This week's shop
from “This week” · 4 recipesProduce
- carrots
Combined 4 whole carrots (Lasagna) + 2 cups chopped carrots (Curry) — about 2 carrots per cup.
- inch knob fresh ginger
- bag (10 oz) spinach
- limes
Bulk
- cups red lentils
International
- cans coconut milk
Bakery
- corn tortillas
Dairy & Alt
- gallon oat milk
Pantry
An ingredient dictionary everything else builds on
Every ingredient is saved once, with its aisle, food type and tags. Recipes, lists and nutrition all draw on it.
- Type-ahead everywhere, ranked by how often you actually use each ingredient
- Find and merge duplicates (“scallion” / “green onion”), and clean up units in bulk
- Per-ingredient macros, estimated by Gemini from real data and reviewed before saving
Live demo · Real Pantry cards. One is shared from a housemate's library.
Red lentils(cup)
Coconut milk(can)
Fresh ginger(tbsp)
Corn tortillas
Plants
30 plants a week
A small personal tracker for eating a variety of plants. Fruit, veg, legumes, grains, nuts and seeds count for a point each; herbs and spices count for a quarter.
- Private to each person, even within a shared household
- Your usual plants are one tap away, ranked by how often you log them
- Resets every Sunday in your own timezone
Live demo · The real Plants tracker. Add a plant, tick herb/spice, or remove one.
Gemini assistant
A chat panel that knows what you're looking at
Every section has its own assistant. It can see the recipe, plan or list on screen, look up details on its own, and propose edits through the same actions the UI uses.
- Edit recipes, build meal plans, or sort a shopping list by store aisle, all from chat
- Read-only lookups run on their own; anything that changes data waits for you to approve it
- A manual mode copies the prompt out for your own Gemini session when you'd rather not use the API
Illustration · the live panel needs a signed-in Gemini session
Assistant
Context: Red Lentil Coconut CurryWe're out of spinach — swap in kale and bump it to 4 cups?
Looking up ingredient details…
Kale holds up better in a long simmer, so I'd add it with the lentils instead of at the end. Here's the change:
updateRecipeIngredient
3 cups spinach → 4 cups kale, stemmed & chopped
Under the hood
How it's built
Sharing enforced by the database
Two SQL helpers, shares_library_access() and is_group_member(), back nearly every row-level-security policy. Housemates share recipes and lists, while things like the plant log stay private to one person.
AI that suggests, never silently writes
Every Gemini call goes through one structured-JSON client. Estimates come back for review before anything is saved, and chat tool calls that change data wait for an explicit Apply.
Recursive recipes
Recipes can be ingredients of other recipes. Cycles are rejected before every write, and shopping lists expand the whole graph, multiplying servings at each level.
Built on the free tier
It runs on Vercel and Supabase free plans. Recipe photos are links instead of uploads to stay under storage quotas, and the queries assume a household's worth of data.
Try the theme switch in the header: classic light, classic dark, and the Djaunt brand palette all come from the same CSS tokens the app uses.