SouredDough — Artisan Bakery Ordering & Farmers-Market Platform

Built the ordering site for a Central Valley sourdough bakery — a React/Vite storefront on a serverless API, supporting both online Stripe checkout and pay-at-pickup, plus a local-delivery flow gated by an address-eligibility check.

SouredDough sells bread at Central Valley farmers markets and by pre-order for pickup — which meant the ordering flow had to support how a small bakery actually gets paid: some customers pay online in advance, others hand over cash or Venmo at the market stall. Forcing everyone through the same card-payment flow would have lost the second group entirely.

SouredDough homepage
The storefront home — pre-orders, upcoming market events, and bread varieties.

The site is a React and Vite frontend (no SSR) that builds and syncs straight to S3 and CloudFront from its own pipeline, deliberately kept separate from the infrastructure repo's CDK stack — a hosting-only deploy there could otherwise prune the live bucket back to an empty build. It talks to a separate Lambda and DynamoDB API for orders, pricing, and payments. One order form validates identically either way, then branches: pay online redirects to Stripe Checkout and is confirmed asynchronously via webhook, with the return page polling order status by session ID; pay-at-pickup posts directly and confirms on the same page, no Stripe involved.

Local delivery reuses that same form with an added address section, but gates on a delivery-eligibility check before payment — an ineligible address stops the order with a banner pointing back to pickup instead of silently accepting an address the bakery can't actually deliver to. Admin access uses a direct Cognito SRP login (amazon-cognito-identity-js) rather than pulling in Amplify for what's a single authenticated page — matching the tool to the one thing it needed to do.