Scope · approved · companion to scope.md

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

AT THE CAFE · PHONE IN THE KITCHEN · LAPTOP ANYWHERE · PHONE Count last count in grey + date Deliver the menu · live totals Invoice matches the Canva form Ledger unpaid · due in 30 days glance only never pre-fills Print Email PDF kitchen printer · real send, "Last sent" shown next delivery day: the count tells her what to bake and bring

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):

Open the Count screen and pick Corazon Cocina. The last count shows in grey with its date under each product. Enter two numbers and save.

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, rotate APP_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 in checklist.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