Beauty BoothDocs

Overview

What Beauty Booth is, what ships in the box, and how the three apps fit together.

Beauty Booth is a production-grade beauty e-commerce platform — a curated skincare, makeup and fragrance apothecary: a customer storefront, an operations dashboard with a seller portal, and a REST API, in one Turborepo + pnpm workspace. It is sold as source code — $99.99, one time, on [Buy Me a Coffee](https://buymeacoffee.com/reactbd/e/579772) — and you own and host what you build with it.

Beauty Booth storefront and admin dashboard
The storefront and the dashboard, both reading from the same API.
AppWhat it isStackPort
apps/webCustomer storefrontNext.js 16 · React 19 · Tailwind v4 · Zustand3000
apps/adminOperations dashboard + seller portalNext.js 16 · React 19 · Tailwind v43001
apps/apiREST API + background workerExpress 5 · Mongoose 9 · Stripe · ImageKit/Cloudinary · Swagger8000

How the pieces talk

Both frontends read from MongoDB through the API — no Next app touches the database directly. The storefront fetches through a single src/lib/api.ts; the dashboard through src/lib/api-client.ts. Authentication is live in all three apps: the API issues a JWT, each Next app stores it in an httpOnly cookie and forwards it server-side.

Images live on your own ImageKit or Cloudinary account under a bloom-booth/ folder tree; MongoDB stores the CDN URLs, never local paths. The package includes a demo beauty catalogue — 67 products across 8 aisles (skin care, makeup, hair care, bath & body, fragrance, men's care, personal care, combos & sets) and 31 sections, 41 brands, 6 journal posts, 3 hero slides, testimonials, sale promos and coupons. pnpm --filter api run assets:upload puts the photos on your CDN and pnpm --filter api run seed:bloom-booth (or pnpm run seed) loads the data into your database.

Design

Light theme only. A small set of semantic colour tokens in one globals.css per app drive every component; the palette (“Cherry Cream”) is a cream page under ivory cards, warm hairlines, cherry-black ink text and a single cherry accent, with a butter pill for the main call to action and a deep-cherry dark band. Type is Poppins 300–700 (primary) for everything people read, Urbanist for titles, and Playwrite GB S (secondary) for the accent words a title marks with _underscores_. Product photos are packshots on white, rendered on white plates with object-contain — never cropped. UI primitives follow the shadcn/ui pattern, restyled onto those tokens.

Engineering standards

  • Strict TypeScript, zero `any` in every app — enforced by ESLint.
  • Server Components by default; "use client" only where there is state or events.
  • Every write endpoint chains protect, a role gate, and preventReadOnlyActions.
  • Money is computed in integer cents on the server; client prices are ignored.
  • One .env at the repo root for all apps, every key commented.
Read this firstFollow Quick start to get a working store locally in about ten minutes, then Configuration to connect your own Stripe, sign-in and email accounts.
Buy Beauty BoothFull source code$99.99