pnpm + Turbo monorepo starter for a single Next.js web app.
Ships with Google OAuth sign-in, a protected /app member page, PostgreSQL, Redis, and shared UI packages. Default package scope is @acme/* — rename it before you build your product.
On GitHub, click Use this template → Create a new repository.
Pick a name for your app repo (for example my-startup-web). You will get your own copy without tying it to the template history.
Template source: github.com/enum314/acme
git clone git@github.com:<your-org>/<your-repo>.git
cd <your-repo>pnpm install
docker compose up -d
pnpm setup:envEdit apps/web/.env with your secrets (see apps/web/.env.example). At minimum:
BETTER_AUTH_SECRETGOOGLE_CLIENT_ID/GOOGLE_CLIENT_SECRET
Then prepare the database and start the app:
pnpm db:migrate
pnpm devReplace the acme placeholder across the monorepo (package scope, site name, CI workflows, vercel.json, and more):
pnpm rename:template -- myapp --display-name "My App"Preview changes first:
pnpm rename:template -- myapp --display-name "My App" --dry-runAfter renaming, update branding in apps/web/src/config/site.ts (company, email, support URL).
| Package | Port (dev) | Path | Description |
|---|---|---|---|
@acme/web |
3000 | apps/web/ |
Auth (Google OAuth) + /app hub |
Shared workspace packages live under packages/ (@acme/components, @acme/marketing, @acme/utils, etc.).
| Command | Description |
|---|---|
pnpm dev |
Start the app |
pnpm build |
Production build |
pnpm lint |
Lint |
pnpm typecheck |
Typecheck |
pnpm db:migrate |
Run database migrations |
pnpm rename:template |
Rename @acme/* to your scope |
pnpm setup:env |
Copy apps/web/.env.example → .env |
Filter the app: pnpm --filter @acme/web dev
- Import the repo and set Root Directory to
apps/web. apps/web/vercel.jsonconfigures monorepo install/build and skips unchanged deploys.- Add env vars from
apps/web/.env.examplein the Vercel dashboard. - Run
pnpm --filter @acme/web db:migrate:deployagainst your production database.