Forkcast
Weekly meal planner, recipe box, and virtual pantry. The shopping list writes itself.
Why
I cook for one, and I plan every Sunday: what I’m eating for lunch and dinner all week, then one grocery run. For a long time that plan lived in scattered chats and PDFs. Recipes were TikTok links I’d never find again, the shopping list was rebuilt from scratch every week, and I kept buying things I already had at home.
Meal-planning apps exist, but they’re built around their own recipe catalogs and assume a family of four. I wanted my own dishes, my own pantry, and a list that only contains what I’m actually missing.
So I built it for myself, and I use it every day. Built so other people can use it too, without me having to rewrite it.
What it does
- Stores dishes as cards: ingredients per serving, steps, TikTok/Reels links, and photos of how it actually turned out. Ingredients can be imported from a TikTok link: Gemini reads the video description and maps it to the catalog for review
- Plans the week day by day, with where you eat each meal (home, tupper, out). Suggests dishes from what you usually eat on that day and slot and what’s already in the pantry; cooking x2 drops the leftovers into the next free meal
- Builds the shopping list on its own: planned dishes × servings − pantry, grouped by supermarket aisle, rounded up to the packs you buy. One tap sends it to iOS Reminders via a Shortcut
- Keeps a virtual pantry: ticking an item as bought adds it, marking a meal as cooked subtracts it, and whatever expires soon goes to the top
- Learns from use: proposes your last quantity and unit, and never suggests anything you avoid or that contains one of your intolerances (14 EU allergens)

How it works
Nuxt 4 (Vue 3, strict TypeScript) on Vercel, Neon Postgres via Drizzle, Better Auth with a 6-digit email code sent by Resend. Not a magic link, because on an iOS PWA the link opens Safari instead of the app. Photos go to private Vercel Blob storage, never public URLs.
Every pantry change is logged as a movement (bought, cooked, adjusted, expired) in the same transaction that updates the stock, so the stock always equals the sum of its history. Cooking a meal is idempotent and reversible, and that history is what lets the app learn real consumption.
All business rules (shopping list, leftovers, weekly limits, slot
suggestions) are pure functions with unit tests. Repositories are tested
against an in-memory Postgres (PGlite) running the real migrations, and
Playwright runs at 375 px. Multi-user from day one: every query is
scoped by user_id, and nothing personal is hardcoded.
Status
In daily personal use since late September 2026. Live on its own domain in private beta: sign-ups are closed and new emails join a waitlist. Spanish UI for now, with all copy centralized for i18n. I’m keeping the public launch on hold while I use it daily and iron things out.
See it
- Live: forkcast.pro (private beta, waitlist)
- Code: private — ask me
- Contact: hello@damianvidalc.com