Cuenta
An invoicing and shelf-count app for La Condesa Baking Company: Eileen's paper invoice, come to life.
The kernel
She builds a delivery from her menu (one product list and one set of prices for every cafe), with that cafe's latest shelf count beside each line as a greyed reference. The invoice it prints in the kitchen is indistinguishable from the Canva form she hands out today. It isn't generic invoicing software: it digitizes one baker's existing route and paperwork exactly as she already does them.
The core loop
Who it's for
Eileen, owner of La Condesa Baking Company, a wholesale bakery in Santa Barbara, delivering to four cafes:
Corazon Cocina · Public Market Little Heart Cafecito Corazon Cocina SUR · Carpinteria Alma
Today she counts shelves by hand, fills in quantities and totals on a blank Canva form she pre-prints per cafe, does the math by hand, and tracks who owes her (Net 30, ACH) in her head. Those last three are what she most wants to stop doing.
What "working" looks like
HACKATHON DONE · Sun Oct 26, 2pm Pacific
A judge can follow the four-step path on the deployed URL with mock data, under three minutes, and every step works.PROJECT DONE · after submission
Eileen completes one real delivery without the learner: count on her phone, invoice printed in the kitchen, one emailed to the cafe, ledger updated.Two separate jobs. Count is for Eileen's planning only. Deliver and Invoice record what she actually dropped off, with quantities she types in herself. The invoice never reads from a count, and a count never changes because of an invoice. The shelf count beside each Deliver line is greyed reference and never pre-fills the quantity.
Step through the judge path (also the demo video script):
The "oh, that's cool" moment: the printed invoice looks exactly like the paper one, and the email really arrives.
The boundary
Now · in the proof of concept 7
- A single six-digit PIN gate with attempt limiting: 5 wrong tries per IP, or 20 overall, in 15 minutes lock it for 15 minutes
- Products (one menu with one set of prices, shared by every cafe) and Customers, each cafe with a location code and an optional seeded logo; mock seed data only in the repo; the Customers tab is read-only for the hackathon
- Count per cafe, with the last count and its date shown in grey beside blank steppers, plus a read-only Past counts list
- Delivery: totals in integer cents, invoice numbers as text (location code + MMDDYYYY, suggested, overwritable, unique), edit and void (never delete), quantities typed in by Eileen. The shelf count beside each line is greyed reference only and never pre-fills; the invoice never reads from a count, and a count never changes because of an invoice.
- Invoice template matched to the Canva form, including the cafe's logo when it has one; print CSS fitting one letter page; PDF
- Real Resend email with the PDF attached, from invoices@lacondesabakingcompany.com, Reply-To her Gmail. The domain isn't a gate on the email build: until it verifies, sends go from Resend's onboarding sender. Switching to the real From and Reply-To is an env change in the build's final polish slice (checklist slice 8, before submission; not Block 8 Handoff). DNS records go in at her registrar, an existing SPF record is merged, not replaced, and mock cafes bill to Resend's test inbox, delivered@resend.dev, so no personal address is ever on screen.
- Ledger: paid or unpaid with the paid date and an optional ACH reference, Net 30 due dates, overdue, month totals, filter by cafe. Plus a mobile pass, error and empty states, a mock-data audit, and a Vercel deploy.
Later 10
- Block 8, Handoff (after the video and the tagged submission), in the same production deployment and database: back up the mock data with a Neon branch snapshot, seed her real data from the gitignored
private/file, rotateAPP_PIN, then hand her the URL (on her phone's home screen). Eileen runs the path herself as the acceptance test. The full order is inchecklist.md > Block 8: Handoff. Also later: in-app editing of Products and Customers, the email-template editor, and the full printed/emailed history line - Stripe or other payments
- Multi-user login
- Low-stock alerts
- Bake list
- Ledger export to Excel, respecting the cafe filter and a date range
- Accounts receivable aging report (current, 1–30, 31–60, 61–90, over 90 days; per cafe and total; PDF or Excel)
- Overdue reminders: a daily job finds unpaid, past-due invoices and emails Eileen one list with a single signed link to send the reminders (ask-first; fully automatic per cafe is a later toggle)
- Per-cafe logo upload (seeded logos are in now)
- A separate demo deployment with mock data, only when a second customer wants a look. Until then, Handoff turns the one production deployment into Eileen's.
Explicitly cut 5
- Ingredient tracking and recipe costing : a different product. Cuenta is about the route and the paperwork.
- Accounting and tax : out of scope. The Ledger only tracks who owes what.
- Model-generated prices, totals, dates, invoice numbers or email text : deterministic app. The AI is in how it's built.
- Inventory decrement on delivery : counts are observed at the cafe, not calculated.
- Real customer data in the repo : mock data only. Real data goes in at Handoff from a gitignored file.
Look & feel
Her paper invoice come to life: white paper, black ink, one warm blush tint, dotted hairline rules, serif text. Four bottom tabs: Count, Deliver, Ledger, Customers. Every page has a small "?" that opens a plain-words How it works page. No icon appears without words she can read, and the send button says Send email or Send again, never "Resend". She is never on a page with no way back: the Invoice screen keeps the tabs and a "Back to Ledger" link, sheets close with Cancel or the phone's back button, and Download PDF never navigates the tab away. Count and Ledger are phone screens, used standing in a cafe; Deliver and Invoice are laptop screens, used in the kitchen. The printed invoice matches her existing Canva form exactly. The Stitch mockups of all five screens come in at the PRD step; Eileen's Canva invoice form is the fidelity reference.
Changes since approval
- During 5-build (plan error caught in the learner's hands-on testing): products are one menu shared by every cafe, not a separate list per cafe. Eileen has one menu and the same prices for all four accounts. Every per-cafe list in the plan became "the menu".
- During 5-build (learner-directed): a How it works page behind a "?" on every page, the "no icon without words" rule, and Send email / Send again replacing "Resend". Excel export and an aging report were added to Later.
- During 5-build (learner-directed): the PIN gate hardened to six digits with attempt limiting, because four digits with no lockout was 10,000 guesses with no brake on a public URL. Navigation rules pinned for the phone. Overdue reminders added to Later.
- During 5-build (learner-directed): a read-only Past counts list on Count, since Eileen looks back through a paper book of counts today and will ask for it on day one. Built in the final polish slice, not Handoff.
- During 5-build (learner-directed): Resend domain verification is no longer a gate on email. The sender lives in env, and the switch happens in the final polish slice.
- During 3-prd (learner-directed): Alma replaces Corazon Cocina Ventura as the fourth account. Invoice numbers changed to Eileen's location-code + date scheme. Seeded per-cafe logos moved into the POC. The Customers tab is read-only until Handoff.