Full-stack case study

BoomYep Bakery

A curated, multi-vendor marketplace connecting Miami's artisan bakeries with local customers. Designed and built end-to-end — front-end and back-end.

Next.js 15TypeScript (strict)Supabase / PostgresStripe Connect ExpressTwilio VerifyResendMapboxSupabase StorageVercel

Overview

BoomYep Bakery is a curated marketplace where artisan bakeries apply, get reviewed, onboard their menu, and receive payouts directly — while the platform handles ordering, payments, and delivery coordination. I designed and built the full platform: database, business logic, authentication, payments, and UI.

What I built · Back-end

Normalized Postgres schema on Supabase

Businesses, addresses, documents, products, price variants and admins — with enums for type-safe categories and statuses.

Multi-tenant isolation with Row Level Security

RLS on every table, so each bakery owner can only ever access its own data.

A Postgres trigger as the single source of truth

A trigger derives each bakery's application status from the state of its uploaded documents. Status logic lives only in the database — never duplicated in application code — so the database and the UI cannot drift.

Stripe Connect Express for direct payouts

Each bakery receives payouts to its own connected account (85% of subtotal) — a legal requirement under Florida's Marketplace Facilitator Act, not just a design choice. The account.updated webhook keeps charge and payout readiness in sync.

Type-safe server actions with Zod validation

All mutations return discriminated result types, so no unhandled error ever reaches the client.

Phone verification via SMS OTP

Twilio Verify on bakery signup.

Transactional email with Resend

React Email templates for application submitted, approved, rejected, document re-submission and password reset.

Address autocomplete and geocoding

Powered by Mapbox.

Secured file storage

Supabase Storage for legal documents and product photos, with path-prefix policies that scope every file to its owning bakery.

Disciplined migrations

One migration per logical change, applied and verified before each commit.

What I built · Front-end

Next.js 15 with the App Router

React Server Components by default; client components only where interactivity is actually needed.

Multi-step bakery onboarding

Account creation, business info, document uploads and confirmation.

Admin review dashboard

Per-document approve / reject that drives the status trigger.

Full product management

Create, edit and delete products, dynamic price variants, photo upload, category grouping and visibility toggles.

Status-aware owner dashboard

Editable bakery settings and a dashboard that adapts to the application status.

Responsive public landing page

For the business-facing side of the marketplace.

Key engineering decisions

Single source of truth in the database

Status is computed by a trigger, never recomputed in JavaScript.

Money stored as integer cents

Following the Stripe convention, to avoid floating-point rounding errors.

Stripe Connect Express

Chosen for legal compliance and to keep the platform out of the money-custody path.

Strict TypeScript

noUncheckedIndexedAccess catches undefined access at compile time.

Server actions over REST endpoints

Keeping validation and authorization on the server for every mutation.

Status

In active development

The business side — onboarding, payments, admin review and menu management — is live. The customer browse and checkout experience is in progress.

See the business side, live

Onboarding, payments, admin review and menu management — all running in production.