Case Study · Website · Online Ordering
Stephy Sourdough Bakehouse
A bilingual storefront, an ordering system that never oversells a bake, and a phone-first admin app for a home bakery that had grown entirely by word of mouth — built by hand, with no servers to maintain.
- Client
- Artisan sourdough home bakery — FishHawk, Tampa, FL
- Engagement
- Web design, online ordering, and admin platform
- Platform
- Bilingual EN / ES web storefront + installable admin PWA
- Stack
- Cloudflare Workers · D1 · R2 · KV · Web Push · Resend · vanilla JS
The problem
Stephy bakes sourdough from her home kitchen in the FishHawk area of Tampa: three ingredients, no sugar, and loaves people recognise by the patterns scored into the crust. The business had grown entirely through neighbours, friends, and WhatsApp referrals. Every order was a chat thread, every "is Saturday full?" was a question she answered by hand, and there was nothing online that looked the way the bread tasted.
The brief was clear about what it should not be: a Squarespace template, a generic "artisan bakery" theme, or anything with visible relatives. Her customers are largely Spanish-speaking and bilingual households, so English and Spanish had to be equal citizens, not a translation bolted on afterwards.
The approach
We started from a single sentence in the brief: a website should make you feel something before you read anything. The storefront opens on a full-bleed loaf, the menu uses circular photo crops that echo her wax-seal badge, and every string on the site exists in both languages from day one, down to the error messages. It is pure HTML, handwritten CSS, and vanilla JavaScript, with no framework and no build step, so the site has no template fingerprint and loads fast on a phone in a driveway.
For ordering, we kept it honest to how a home bakery actually works. No card processor and no accounts: customers choose a pickup date, pay by Venmo, Zelle, or cash on pickup, and get a private order page they can return to without a password. Capacity is a real constraint when one person bakes everything, so the system enforces a maximum number of orders per weekday, closed dates, and a minimum lead time, and it tells the customer the moment a date fills up.
The build
The whole platform runs as one Cloudflare Worker at the edge, with D1 for products and orders, R2 for photos she can swap herself, and KV for presentation settings. Two installable apps share it: the public storefront, and a Spanish-only admin panel built for her phone.
- Bilingual storefront — EN / ES toggle that reaches every string, product, notification, and error message
- Live capacity limits — the capacity check runs inside the database insert itself, so two customers can't both take the last slot
- Pickup scheduling — per-weekday limits, closed dates, lead times, and per-date notes such as "only 3 spots left"
- Auto order expiry — unpaid orders release their slot after a set window, on a 15-minute cron sweep
- Push notifications — hand-rolled Web Push with VAPID and payload encryption, no third-party service; customers opt in per order, the baker gets a morning digest
- Passwordless everywhere — customers are remembered by a signed cookie; the admin signs in with Face ID via passkeys
- Menu & content admin — bilingual products, options and add-ons, drag-to-frame photos, per-date calendar overrides, and sales charts
- Server-side price integrity — every line item is recomputed from the database; the browser's totals are never trusted
The order engine and admin panel went from first commit to live on the custom domain in about nine days, with a plain-Spanish changelog inside the panel so she could follow what changed each morning.
Delivery and handoff
Everything ships in her name: the domain, the Cloudflare account, the email routing at her own address. There is no server to patch, no monthly hosting bill, and no dependency on us to change a price or a photo. A security pass added a strict content security policy, HSTS, rate limiting, and constant-time credential checks before launch, and the client received a Spanish walkthrough deck rather than a manual.
Because the ordering engine sits behind a single feature flag, the bakehouse can run as a catalog-plus-WhatsApp site on quiet weeks and switch full online ordering on when the calendar demands it, without a redeploy.
The outcome
A bakery that used to live in chat threads now has a home online that looks like the bread: warm, deliberate, and unmistakably hers. Customers can browse the full menu in either language, and when ordering is open they can pick a date, pay the way they already pay, and get told when the loaf is ready, all from a phone. The hero image alone dropped from 947 KB to 366 KB in the performance pass, and the site runs on free tiers with nothing to maintain.