Small businesses already sell through WhatsApp, but every order is a chat: prices typed by hand, totals added up on a calculator, transfer screenshots checked one by one. Booth gives each store one link with its catalog, turns the cart into a clean WhatsApp message, and keeps the order, the payment and its status in one place.
Dashboard: panaderia@demo.booth.app · Demo1234! (read-only)
The free API sleeps when idle: the first visit can take up to a minute.
- Catalog. Shoppers open the store link: no app to install, no account to create.
- WhatsApp. The order is saved as pending with its stock reserved, then WhatsApp opens with the full message and a private tracking link.
- Receipt. For bank transfers the shopper uploads the receipt. Gemini reads the amount and the recipient and tells the owner whether it looks right; the owner confirms the payment.
- Ready. The owner moves the order along from the dashboard and the shopper follows it live.
| Storefront | Checkout |
|---|---|
![]() |
![]() |
| Order tracking | Owner dashboard |
![]() |
- Stores: brand color, logo and cover, opening hours, delivery zones, subdomains and custom domains.
- Payments: presets per country (SINPE Móvil, SPEI, Pix, Nequi, Yape, Zelle, Bizum and more) or cash.
- Orders: server-computed totals, atomic stock reservation, automatic expiry that releases stock.
- Team: owner, staff and catalog manager roles; read-only demo accounts.
- Languages and money: Spanish and English, every currency in integer minor units.
| Workspace | Stack |
|---|---|
apps/web |
React 19, Vite, Tailwind 4, TanStack Query, Motion |
apps/api |
NestJS 12, Prisma 7, PostgreSQL |
packages/shared |
Zod contracts and money helpers used by both apps |
Every owner query is scoped to the store in the signed-in user's token, and each owner endpoint has a test proving one store cannot read or change another.
Requires Node 24, pnpm and Docker.
pnpm install
cp apps/api/.env.example apps/api/.env
pnpm db:up
pnpm --filter api prisma:migrate
pnpm --filter api db:seed
pnpm devWeb on http://localhost:5173, API on http://localhost:3000 (docs at /api/docs).
The seed creates two demo stores, /s/panaderia-demo and /s/cafe-demo. Their owners
(panaderia@demo.booth.app, cafe@demo.booth.app, password Demo1234!) are read-only.
pnpm lint && pnpm typecheck && pnpm test # all workspaces
pnpm test:e2e # Playwright, desktop and 360 px mobileArchitecture · Data model · API · Deployment · Roadmap · Devlog


