Dinner, together.
Every evening someone asks what's for dinner?
and the answer depends on whoever is less tired. Mangiare is the meal-planning app I designed and built for my own household: save recipes from anywhere, plan the week together, shop from one list.
- Role
- All of it, solo
- Since
- August 2026
- Runs on
- Any phone, as an app

Where dinner goes wrong.
- 01
Recipes are scattered
Instagram saves, TikTok bookmarks, screenshots, browser tabs, cookbooks and a parent's handwritten cards.
- 02
Planning falls on one person
One partner ends up deciding dinner most nights.
- 03
Shopping is uncoordinated
Two people, two lists, one forgotten ingredient, and food already in the fridge gets bought again.
1Save
Save recipes from anywhere.
Paste a link or take a photo, and Mangiare turns it into a recipe with a photo, servings, steps and ingredients. Drag one of these into the phone, or tap it.
5 recipes waiting to be saved
2Plan
Pick a recipe, pick a day.
Either of you can put a recipe on any night, with no approvals and no pending states. Drag recipes onto the week (or tap one, then a day), or let Auto-plan fill the gaps with recipes that share ingredients.
3Shop
One list for the shop.
The week above becomes this list, live: sorted by aisle, merged across recipes, minus what's already in the fridge. Tick things off, empty the fridge, or send your partner to the shop and watch the list update on its own.
Plan a few meals above and the list writes itself.
Got a job at work that runs on three apps and a group chat? I can build the one app for it →
The real thing, from our kitchen.
Screens from the household that uses it every night: mine.
⚙Under the hood
What happens when you paste a link.
Links break, sites block scrapers, and some videos only say the recipe out loud. So every import has a fallback, and every paid call reserves its cost in a ledger first. Pick a link and follow it through.
Built with
- Next.js 16
- React 19
- TypeScript
- Tailwind CSS v4
- Self-hosted Supabase
- Postgres + Row Level Security
- Realtime
- Node & Python workers
- yt-dlp + ffmpeg
- Gemini · Claude · OpenAI
- Playwright · Vitest · pgTAP
- Merged pull requests
- 370+
- Commits
- 1,100+
- Database migrations
- 100+
- Test files
- 220
What it taught me.
Shared state is a product decision
Dropping the "pending" step between a recipe and the plan made planning together feel natural.
The real web is messy
Reliable imports needed layers: a direct fetch, a browser render, a scraping service, then audio transcription.
One vocabulary beats clever matching
Every ingredient maps to one canonical name, so the list, the fridge, overlap and swaps all read the same data.
Paid APIs need hard budgets
An atomic, fail-closed spend ledger lets me open AI features to real users without risking the bill.
Owning the servers is a trade-off
Self-hosting cut costs and kept control, and made backups, upgrades and network security my job.
I work on client systems the same way: watch how people do the job, then cut the steps nobody needs. Tell me about yours →
