Preheat — order management for home bakers.
Translation pending
CommerceTypeScript · PLpgSQLGitHub @honeychawlaOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Order management for home bakers.
One place for home bakers to track orders, see real cost and profit, know exactly what to bake and buy, and keep customers in the loop — instead of juggling spreadsheets, notes apps, and DM threads.
Built for home bakers (cottage-food operators) and piloted with Tart Theory, a real Seattle egg-tart bakery taking weekly pre-orders with Friday/Saturday pickups. The owner shared her real order and cost sheets, demoed her weekly routine, and co-designed the app with us.
Live demo: home-bakery-lovat.vercel.app/welcome (sample data, anonymized customers)
Tart Theory's patchwork is the norm, not the exception:
That's why Preheat keeps every number in plain code, uses Claude only for messy human input, and connects to the tools bakers already use instead of asking them to switch.
AI features are optional. Without an Anthropic API key everything works except the three Claude helpers (paste-an-order, message drafting, recipe import). Claude handles messy human input (a WeChat DM, a free-text recipe) and drafts messages; all money and quantity math is plain code, and every AI result is a draft you confirm.
| Preorder storefronts (e.g. Hotplate) | Costing tools (e.g. Craftybase, CakeBoss) | Preheat | |
|---|---|---|---|
| Keep your existing website and sheet | ❌ Move sales to their storefront | ⚠️ Re-enter orders | ✅ Accepts your site's orders; syncs your sheet |
| Orders → what to bake and buy | ⚠️ Order lists | ⚠️ Separate from orders | ✅ Batches, grams and a shopping list |
| Real profit per order | ❌ | ⚠️ Cost per item | ✅ After discounts and Venmo fees |
| Cost | Per-order fee | Monthly subscription | Free on free tiers |
Next.js (App Router, TypeScript) · Supabase (Postgres + auth) · Anthropic Claude API · Vercel · Tailwind CSS
Home bakers who want to stop losing money to untracked costs and stop losing orders to scrolled-away DMs. You don't need to be a developer: if you can follow steps and copy-paste values, you can deploy your own private copy in about 15 minutes.
Open home-bakery-lovat.vercel.app/welcome (deployed from this repo with Tart Theory's sample data). The demo resets periodically — don't enter real customer information.
Your own copy keeps your data private, and you control the costs.
About 30 minutes the first time. You'll need free accounts on: GitHub · Vercel · Supabase · Anthropic Console (only for the AI features)
supabase/schema.sql, and click Run. This creates the tables.supabase/seed.sql the same way — it loads a sample bakery (Tart Theory's menu and a week of test orders) so the app isn't empty. You can clear it later; to start blank instead, skip this step.anon and service_role, look under the Legacy API keys tab.Needed only for the AI features — everything else works without it.
Click the button. It copies this project to your GitHub account and sets up hosting:
When Vercel asks for environment variables, paste the three Supabase values from this table. To turn on the AI features later, add ANTHROPIC_API_KEY in Vercel → Settings → Environment Variables, then Redeploy.
| Variable | Where to find it | Required | Secret? |
|---|---|---|---|
NEXT_PUBLIC_SUPABASE_URL | Supabase → Project Settings → API → Project URL | Yes | No |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Supabase → Project Settings → API → anon public | Yes | No |
SUPABASE_SERVICE_ROLE_KEY | Supabase → Project Settings → API → service_role | Yes | Yes |
ANTHROPIC_API_KEY | Anthropic Console → API Keys | AI features only | Yes |
INTAKE_TOKEN | You invent it (any random string) | Optional | Yes |
Never share your secret keys or commit them to GitHub. Anyone with the
service_roleor Anthropic key can access your data or run up charges.
If your website already takes orders (e.g. a form that posts to a Google Apps Script/Sheet), point it at your app instead — Settings → Connect your website shows your intake URL:
POST https://<your-app>.vercel.app/api/intake
Content-Type: text/plain
{"orderNum":"TT-1234","items":"2x Corn Egg Tart ($6);\n1x Classic Portuguese Egg Tart ($4)",
"total":"$16","pickupDay":"Fri 10/30","pickupTime":"3:30–4:00 PM",
"pickupPlace":"U District","lang":"zh","weekLabel":"Oct 30-31"}
orderNum.GET /api/intake?action=remaining&week=Oct%2030-31 → {"ok":true,"orderedQty":42}.INTAKE_TOKEN (add it in Vercel and redeploy), append ?token=<your token> to the URL.product_aliases table).If you still use a Google Sheet (or want it as a backup), the app can mirror its changes back into the sheet: new orders you add in the app are appended to the right weekly tab, and marking an order paid updates the Paid / Amount Received cells. Setup is five minutes:
scripts/sheet-writeback.gs, replacing any starter code.SECRET line to a random string you invent./exec) and paste it plus your secret into the app's Settings → Sheet write-back.Notes: the script runs with your Google permissions — the app never sees your Google account; it only calls the URL with the secret. Orders arriving via the webhook or CSV import are not mirrored back (they came from the sheet's side already — mirroring them would create duplicates). To see the sheet inside the app, also fill Settings → Google Sheet embed URL (File → Share → Publish to web → Embed).
Your bakery app is ready to use.
Requires Node.js 20+.
git clone https://github.com/honeychawla/home-bakery.git
cd home-bakery
npm install
cp .env.example .env.local # then fill in the values from the table above
npm run dev
Open http://localhost:3000.
├── app/
│ ├── (app)/ # Baker-facing pages: home, products (Menu), insights, plan,
│ │ # shopping, orders, bake, schedule (Deliver), settings
│ ├── api/intake/ # Order webhook (website → app)
│ ├── api/import/ # CSV import
│ ├── api/ai/ # Claude helpers: parse-order, draft-message, parse-recipe
│ ├── welcome/ # Marketing page
│ ├── signup/ # Onboarding (account + order sources)
│ └── login/
├── components/ # Client components (forms, check-offs, composer, insights)
├── lib/ # Domain logic: costing, bake sheet, shopping list, restock, insights
├── scripts/
│ └── sheet-writeback.gs # Apps Script: mirrors app changes into your Google Sheet
├── supabase/
│ ├── schema.sql # Database schema — run once in the SQL Editor
│ └── seed.sql # Sample bakery data (optional, anonymized)
└── .env.example # Environment variable template
I signed up but can't log in / the confirmation link is broken. Turn off "Confirm email" in Supabase (Step 1.5) and sign up again. If the account already exists, delete it in Authentication → Users first.
The site loads but shows no data. Check NEXT_PUBLIC_SUPABASE_URL and NEXT_PUBLIC_SUPABASE_ANON_KEY in Vercel, then redeploy.
AI buttons show "not configured". Add ANTHROPIC_API_KEY and redeploy — the rest of the app works without it.
My Supabase project is paused. Free projects pause after inactivity. Open the Supabase dashboard and click Restore.
Webhook orders aren't appearing. Test it yourself: curl -X POST <your-app>/api/intake -d '{"orderNum":"TEST-1","items":"1x <exact menu item name> ($6)"}'. If unmatchedItems is non-zero, the item name doesn't match your menu — add an alias.
Imported orders show 0 on Bake and Shop. The CSV's item text must look like 2x Matcha Tart ($6); 1x Original Egg Tart ($5) and match your menu's names. Fix names in Menu or add aliases.
Changes to environment variables don't take effect. In Vercel, redeploy the latest deployment.
Contributions welcome — please open an issue first.
MIT
Built with Claude at the Seattle AI Week Claude Impact Lab Hackathon, piloted with Tart Theory.