A 5-minute tour of the UseDeploy boilerplate

From `bun install` to a logged-in dashboard with a paid subscription, in five minutes flat.

MC
Martin Coll

Most boilerplates either give you a create-next-app skeleton with three folders, or a 200-package monolith you cannot navigate. UseDeploy sits in the middle: enough scaffolding to feel real, little enough to keep in your head.

The shape

Two apps, three packages:

  • apps/server — Express + Prisma + BetterAuth, organized by bounded context (iam, billing, storage, jobs, notifications).
  • apps/client — Next.js 16 App Router + Tailwind v4 + shadcn primitives + Fumadocs.
  • packages/contracts — Zod schemas + inferred types shared between both apps.
  • packages/shared — domain primitives (Result, branded IDs, error types).
  • packages/eslint-config — flat config that enforces DDD layering.

The path

  1. bun install from the repo root.
  2. docker compose up -d for Postgres + Redis.
  3. bun --filter @app/server prisma:migrate to apply migrations.
  4. bun dev — server on :3000, client on :3004, docs on /docs.
  5. Sign up. Hit the dashboard. Subscribe with the Stripe test card. You're done.

What you skip

You skip rolling your own auth, building a Stripe webhook handler that does not double-process events, gluing OpenAPI to your Zod schemas, wiring rate limiting tiers, and writing the same User aggregate for the seventh time.

You start where you actually wanted to start: writing your domain.