Monorepo structure with Turborepo + pnpm workspaces, separating the app from shared packages (db, auth, calendar, email, jobs, ui, validators)
next-web-boilerplate — Next.js Starter Template
By jrittelmeyer
A Next.js-based monorepo starter with built-in authentication, payments, i18n, background jobs, and observability modules; it boots with just two environment variables.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Preview provided in the project README.
One original preview is available. Open the full image to inspect the design.
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
Built-in authentication: email/password, OAuth, 2FA, passkeys, and organization management
Integrated Stripe hosted checkout and webhooks, Resend email, Uploadthing uploads, and Meilisearch search
Includes a calendar and recurrence rule engine supporting events, invitations, and reminders
Includes Vitest unit tests and Playwright end-to-end tests, plus Biome and ESLint code checks
Provides Docker multi-stage builds and a local docker-compose development environment
Template Details
next-web-boilerplate is a Next.js monorepo starter for complex web applications, organized with Turborepo and pnpm workspaces. The repository separates the application from shared packages: apps/web is the Next.js application, while packages contains the database (Drizzle + PostgreSQL), authentication (Better Auth), a calendar and recurrence rule engine, email templates, background jobs, observability configuration, UI components (shadcn/ui), and Zod validation schemas shared between client and server.
Functionally, it covers authentication (email/password, OAuth, 2FA, passkeys, organizations), Stripe payments (hosted checkout and webhooks), email (Resend + React Email), file uploads (Uploadthing), search (Meilisearch), background jobs (pg-boss), internationalization, calendar (events, invitations, reminders, recurrence rules), and observability integrations with Sentry, BetterStack, and PostHog. The API uses tRPC for reads and Server Actions for writes, with Zustand and TanStack Query for state and data fetching, and React Hook Form with Zod for forms.
Usage limitations: the README states that all integrations degrade gracefully when unconfigured, and only two environment variables are needed to boot, but full functionality requires setting up PostgreSQL, authentication secrets, and accounts and keys for each third-party service. Local development depends on Node.js 24+, pnpm 11+, and Docker (to run Postgres and Meilisearch). The repository provides a cross-platform pnpm init-app helper script to generate .env and rename the root package; this step is optional and does not overwrite an existing .env. The code is MIT licensed, but third-party assets such as demo images, fonts, and icons require separate license verification, and external services such as domains, hosting, databases, payments, or AI may incur additional charges.
Is it right for your project?
Use Cases
- Quickly scaffolding a complex Next.js application skeleton with authentication, payments, and background jobs
- Managing a web application together with shared packages, validation schemas, and UI components in a monorepo
- Starting a project that needs built-in internationalization, calendar, and recurring event capabilities
- Referencing an engineering organization approach with tRPC reads + Server Actions writes, Drizzle ORM, and shared Zod validation
Suitable For
- Developers or teams familiar with Next.js, TypeScript, and pnpm
- Projects ready to start from a template and connect third-party service keys themselves
- Medium-to-large web applications needing prebuilt common modules such as authentication, payments, email, uploads, and search
- Teams willing to trim unneeded modules according to the documentation and accept a monorepo structure
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
Requires Node.js 24+, pnpm 11+, and Docker (for local PostgreSQL and Meilisearch)
- 2
Copy .env.example to .env and fill in database and authentication-related secrets
- 3
Start local Postgres and Meilisearch via docker compose, then run pnpm install and database migrations
- 4
Optionally run pnpm init-app --name <app-name> to generate .env and rename the root package; this script does not overwrite an existing .env
- 5
Full functionality requires preparing accounts and keys for each third-party service; when unconfigured, the corresponding integrations degrade
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis entry covers the free version in the public repository under the MIT license; the free scope is the code of this version and does not imply that external services or third-party assets are free.
Must comply with when using
- Free use, modification, commercial use, and distribution of this version's code are permitted.
- When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
- The code is provided as is; warranties and liability limitations are governed by the original license and applicable law.
Additional costs & items to verify
- Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses and cannot be judged solely by the code's MIT license.
- External services such as domains, hosting, databases, payments, or AI may incur additional charges.
- Only two environment variables are needed to boot; unconfigured third-party integrations degrade gracefully, but full functionality still requires configuring each service's keys.
- Local development requires Node.js 24+, pnpm 11+, and Docker (for local Postgres).
- Local development requires starting PostgreSQL and Meilisearch services via docker compose.
- The init-app script is optional and incremental; it only generates .env and does not overwrite existing files.
- Using Claude Code for assisted development requires installing and invoking the ai-dev-kit /project-init skill.
- The project accepts voluntary donations via PayPal; this is optional support and does not affect code usage.
View Original Text Basis
Permission is hereby granted, free of charge
Original License Text
It boots with **two env vars** (every > integration degrades gracefully when unconfigured)
Original README
**Prerequisites:** Node.js **24+** (see [`.nvmrc`](.nvmrc)), pnpm **11+** (`corepack enable`), and Docker (for local Postgres).
Original README
docker compose -f docker/docker-compose.yml up -d # start Postgres + Meilisearch
Original README
`pnpm init-app` is **optional and additive** — it only seeds `.env` (never overwriting an existing one)
Original README
Developing with **Claude Code**? After `pnpm install`, hand **`/project-init`** your idea or your plan documents
Original README
https://github.com/jrittelmeyer/next-web-boilerplate/blob/main/LICENSEhttps://github.com/jrittelmeyer/next-web-boilerplate/blob/main/README.mdyou can [say thanks via PayPal](https://paypal.me/JohnRittelmeyerDev) (also behind the repo's Sponsor button)
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-05. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.
Project checks & description sources
Template Information
- Source platforms
- GitHub
- Documentation and maintenance reference score
- Partly documented · 71 / 100
- Technologies
- Next.js · React
- Website type
- Starter
How this score is calculated
Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.
What to verify for this project
- Repository update recorded
- 2026-10-05
- Screenshot last checked
- 2026-10-05
No demo link is recorded. Use the repository instructions to evaluate the project locally; the screenshot alone cannot establish interactive behavior.
The catalog identifies Next.js as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.
Use a selection guide →How this description was prepared
AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.
Review declaration: [email protected] · 2026-10-06
Inspect the recorded source material
SHA-256: ebb144d2041a4e1e0fd8d562906758048119ef6bf3f100711c314b80401d91b6
2026-10-05T13:44:45.642Z
Source file / repository# next-web-boilerplate
[](https://github.com/jrittelmeyer/next-web-boilerplate/actions/workflows/ci.yml)
[](LICENSE)
A production-ready **Next.js 16** monorepo starter for complex web applications.
Every architectural decision is deliberate and documented — clone it, and skip the
first month of wiring up a serious app.
> **Status:** feature-complete and maintained. It boots with **two env vars** (every
> integration degrades gracefully when unconfigured), and every feature — auth with
> 2FA/passkeys/orgs, Stripe, email, uploads, search, jobs, i18n, observability, a full
> calendar with recurrence and invitations — has
> been **verified end-to-end against real services**, deploy included. What's inside
> and why: [`docs/FEATURES.md`](docs/FEATURES.md). The dated proof:
> [`docs/VERIFICATION.md`](docs/VERIFICATION.md).
## Screenshots
What you get on `git clone` — a themed public landing (light **and** dark) and the
gated app shell — captured from a real keyless run (just the two required env vars,
**no third-party keys**). Dark mode is class-based (`next-themes`, no flash).
<table>
<tr>
<td width="50%"><img src="docs/assets/landing-light.png" alt="Landing page in light mode"><br><sub>Landing · light</sub></td>
<td width="50%"><img src="docs/assets/landing-dark.png" alt="Landing page in dark mode"><br><sub>Landing · dark</sub></td>
</tr>
<tr>
<td width="50%"><img src="docs/assets/dashboard.png" alt="Signed-in dashboard shell"><br><sub>Signed-in dashboard shell</sub></td>
<td width="50%"><img src="docs/assets/account.png" alt="Account profile and security settings"><br><sub>Account · profile & security</sub></td>
</tr>
</table>
> Browse the shared UI primitives live in the
> [hosted Storybook gallery](https://jrittelmeyer.github.io/next-web-boilerplate/).
## Stack
| Layer | Choice |
| --- | --- |
| Framework / Runtime | Next.js 16 (App Router, React 19) · Node.js 24 LTS |
| Language | TypeScript 6 (`strict`) |
| Monorepo | Turborepo + pnpm workspaces |
| Styling / UI | Tailwind CSS v4 · shadcn/ui (`@repo/ui`) |
| Database | PostgreSQL · Drizzle ORM |
| Auth | Better Auth (email/password + OAuth) |
| API | tRPC (reads) + Server Actions (writes) |
| State / Data | Zustand · TanStack Query v5 |
| Forms / Validation | React Hook Form · Zod (shared via `@repo/validators`) |
| Email | Resend · React Email (`@repo/email`) |
| Payments | Stripe (hosted Checkout + webhooks) |
| Observability | Sentry · BetterStack · PostHog |
| Uploads / Search | Uploadthing · Meilisearch |
| Scheduling | `@repo/calendar` — zero-dependency civil-time + RRULE recurrence engine; calendars, events, invitations, reminders |
| Tooling | Biome + ESLint (Next plugin) · Vitest · Playwright |
| Deployment | Docker (multi-stage, platform-agnostic) |
Full rationale for every choice in [`docs/context/STACK.md`](docs/context/STACK.md).
## Quickstart
**Prerequisites:** Node.js **24+** (see [`.nvmrc`](.nvmrc)), pnpm **11+** (`corepack enable`),
and Docker (for local Postgres).
```bash
cp .env.example .env # fill in secrets (DB + auth)
docker compose -f docker/docker-compose.yml up -d # start Postgres + Meilisearch
pnpm install
pnpm --filter @repo/db db:migrate # apply migrations
pnpm dev # http://localhost:3000
```
> On Windows, `cp` isn't a builtin — use `pnpm init-app` (below) or
> `Copy-Item .env.example .env`.
## Use this template
Start a new app from this boilerplate, then run the cross-platform init helper:
```bash
# GitHub: click "Use this template" → clone your new repo, OR grab a history-less copy:
npx degit jrittelmeyer/next-web-boilerplate my-app
cd my-app
pnpm install
pnpm init-app --name my-app # seeds .env from .env.example, renames the root package
```
`pnpm init-app` is **optional and additive** — it only seeds `.env` (never overwriting
an existing one) and, with `--name`, renames the root `package.json` + README title.
Everything it does you can do by hand; nothing needs to be ripped out. After it runs,
follow the [Quickstart](#quickstart) from `docker compose … up` onward.
Developing with **Claude Code**? After `pnpm install`, hand **`/project-init`** your
idea or your plan documents — the preinstalled
[ai-dev-kit](https://github.com/jrittelmeyer/ai-dev-kit) inception skill runs
discovery (clarifying questions, gap analysis, a competitive
scan, a map of which shipped integrations your product actually needs), writes your
product brief, regenerates the status/backlog docs around *your* app (running
`init-app` for you along the way), and starts the build pipeline.
## Scripts
```bash
pnpm dev # run all apps in dev
pnpm build # build everything (Turbo-cached)
pnpm lint # Biome + ESLint
pnpm type-check # TypeScript across all packages
pnpm test # Vitest
pnpm test:e2e # Playwright
pnpm format # Biome formatter
pnpm storybook # @repo/ui component gallery → http://localhost:6006
pnpm clean # per-package build artifacts (dist/.next) — NOT the Turbo cache
pnpm cache:prune # evict oldest Turbo-cache entries to the size cap (default 20 GB)
```
> Browse the shared UI primitives online — the
> **[hosted Storybook gallery](https://jrittelmeyer.github.io/next-web-boilerplate/)**,
> republished from `@repo/ui` on every change (no clone or server needed).
## Layout
```text
apps/web/ — the Next.js application (src/ layout)
packages/db/ — Drizzle schema, migrations, client (@repo/db)
packages/auth/ — Better Auth config + session helpers (@repo/auth)
packages/calendar/ — calendar civil-time + recurrence engine (@repo/calendar)
packages/email/ — React Email templates + Resend client (@repo/email)
packages/jobs/ — pg-boss background-jobs worker + enqueue helper (@repo/jobs)
packages/observability/ — BetterStack dashboards-as-code, dev/CI-only (@repo/observability)
packages/ui/ — shadcn/ui shared components (@repo/ui)
packages/validators/ — Zod schemas shared client + server (@repo/validators)
tooling/ — shared eslint / typescript / tailwind configs
docs/ — PROJECT_STATUS + on-demand context docs
docker/ — Dockerfile + docker-compose for local dev
```
## Documentation
| Read this | For |
| --- | --- |
| [`docs/FEATURES.md`](docs/FEATURES.md) | **What's included — and why.** The full inventory with per-choice rationale. |
| [`docs/GETTING_STARTED.md`](docs/GETTING_STARTED.md) | **Using this template.** Clone → run → rename → remove what you don't need → production. |
| [`docs/plain-english-guide/`](docs/plain-english-guide/) | **The zero-jargon tour.** A 13-chapter plain-English explainer (no technical background needed) + a pitch deck — what this is, why each piece was chosen, and how it was built with AI agents. |
| [`AGENTS.md`](AGENTS.md) | **Agent-assisted development.** Onboarding for coding agents (and a great human overview): working agreements + the per-task context-doc index. |
| [`docs/MAINTENANCE.md`](docs/MAINTENANCE.md) | **Keeping it current.** Dependency policy, Renovate, upgrade runbook, watch items. |
| [`docs/context/`](docs/context/) | **Deep dives**, loaded on demand: `STACK`, `ARCHITECTURE`, `CONVENTIONS`, `DATABASE`, `AUTH`, `API`, `STATE`, `UI`, `I18N`, `TESTING`, `SERVICES`, `SECURITY`, `DEPLOYMENT`, `DECISIONS`, plus the `auth/`, `services/` and `calendar/` topic directories. |
| [`docs/PROJECT_STATUS.md`](docs/PROJECT_STATUS.md) · [`CHANGELOG.md`](CHANGELOG.md) | What's built + verified, and the release record. |
## Support this project
If this boilerplate saved you time, a ⭐ on the repo helps others find it, and you
can [say thanks via PayPal](https://paypal.me/JohnRittelmeyerDev) (also behind the
repo's Sponsor button). Issues and PRs are just as valuable — see below.
## Contributing
Issues and pull requests are welcome — see [`CONTRIBUTING.md`](CONTRIBUTING.md) for
setup, the quality gate, and conventions, and the [`Code of Conduct`](CODE_OF_CONDUCT.md).
Report security issues privately via the [security policy](.github/SECURITY.md).
## License
[MIT](LICENSE) — use it freely as a starting point for your own projects.
Explore similar templates
Compare previews and descriptions within the same stack and category.

Next.js SaaS Starter
The official Next.js SaaS starter template, integrating email/password authentication, Stripe Checkout subscriptions, a dashboard with user/team CRUD, basic Owner/Member RBAC, and activity logging.
Next.js · SaaS

Next.js Commerce
Vercel's officially maintained Next.js App Router ecommerce starter with deep Shopify integration, offering a complete product catalog, cart, and checkout flow. Core logic is modular for swapping backends, and community provider versions exist for BigCommerce, Medusa, and Saleor.
Next.js · E-commerce

Next-js-Boilerplate
A developer-first Next.js 16 starter with Tailwind CSS 4 and TypeScript, supporting both App Router and Page Router.
Next.js · Starter

tailwind-nextjs-starter-blog
A Next.js and Tailwind CSS blog starter template using Contentlayer for Markdown/MDX, with built-in SEO, code highlighting, and tags. It targets personal technical blogs and migration from Jekyll/Hugo to React, and supports one-click Vercel deployment.
Next.js · Blog

next-forge
next-forge is a Turborepo-based Next.js template maintained by Vercel, positioned as a starting point for SaaS products.
Next.js · Starter

SaaS-Boilerplate
SaaS-Boilerplate is an open-source SaaS starter template built with Next.js App Router, React 19, TypeScript, Tailwind CSS, and Shadcn UI.
Next.js · SaaS
