Progressive Web App · Live (invite-only)

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 ↗]
// the problem

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.

// ai, kept honest

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.

// test kitchen

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.

// ask the recipe

"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.

// invent together

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.

// cooking smarts, no llm

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.

// the shared household

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.

// private by design

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.

// stack
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
// testing
[react][typescript][pwa][java][spring-boot][postgresql][webauthn][sse][web-push][llm][testcontainers][playwright]
← back to projects