Crumbs
A shared recipe scrapbook for the people you cook with.
Cook, snap, saved in under 10 seconds. Tidy it later, or never.
[open crumbs ↗]
Recipe apps fail because adding a recipe feels like data entry. So recipes end up scattered across tabs,
Instagram saves, screenshots and memory, and changes like "less salt, add lime" are forgotten.
Crumbs makes saving a recipe almost no effort, and gives a household one shared place to decide, plan and shop.
The LLM client is written by hand with no framework. Every model response is validated, clamped and checked against the real recipe lines before it touches data.
AI is optional. Every kitchen opts in, and there's a daily limit.
Snap a cookbook page, drop in a stack of scrolled screenshots, or paste text. A vision model turns it into a structured recipe in the original language, flags up to 3 doubts for the cook to check, and never invents quantities.
"Can I make this without eggs?" You get an answer plus line-level edits, shown as a +/− diff you apply in one tap and can undo. An LCS re-match keeps step photos attached to the right lines.
A shared AI workbench where every turn is a new versioned draft. Changes are highlighted against the last version, house rules are respected, you can see who else has it open, and stale turns are rejected with 409.
Rule-based parsers for ingredients, timers and step-to-ingredient links, in English and Romanian, checked against 234 sample lines. Timers run on the server and ping you via Web Push. Cook mode keeps the screen awake.
A live SSE stream per household drives a "Tonight?" swipe deck (it only matches when everyone says yes), a live shopping list that merges units, and a drag-to-plan week.
Invite-only passkey sign-in, location data stripped from photos, AI off until a kitchen opts in, a second household checked against every endpoint, and a full export to schema.org JSON.
| web: | React 19 · TypeScript · Vite PWA · TanStack Query |
| api: | Spring Boot 4 · Java 21 · JdbcClient · Flyway |
| data: | PostgreSQL 18 (pg_trgm + unaccent search) |
| realtime: | Server-Sent Events · VAPID Web Push |
| auth: | WebAuthn passkeys |
| deploy: | Docker Compose · Caddy · rootless Podman |
- → API integration tests on real Postgres via Testcontainers, including a tenant-isolation suite
- → Playwright E2E tests on Pixel 7 + iPhone 15, with a virtual passkey authenticator and a fake model server
- → CI runs the full Compose stack on every push