Why this boilerplate
The smallest credible starting point for a Next.js app with the modern stack everyone is converging on. Tailwind v4 with @theme tokens, shadcn/ui in new-york style, dark mode wired through next-themes, Geist for fonts. No CMS, no auth, no DB — pick those up via plugins or roll your own.
What's inside
- Next.js 15 App Router, React 19, TypeScript strict
- Tailwind CSS v4 with CSS variables in OKLCH, light + dark themes, no
tailwind.config.js - shadcn/ui primitives ready:
button,input,label,dialog,sonner, plus aThemeToggle - next-themes with
systemdefault and proper hydration handling - Geist sans + mono via
next/font/google - ESLint flat config extending
next/core-web-vitals+next/typescript
What it deliberately skips
- No auth — add it with the
better-authplugin (--with better-auth). - No CMS, no MDX pipeline. If you want a content layer, you'll pick what fits.
- No database. Plugins bring their own (e.g.
better-authships with SQLite).
Adding components
pnpm dlx shadcn@latest add card form sheet
The starter already has components.json configured for the new-york style with neutral base color and the alias @/components/ui.
Included
- dark-mode
- sonner
- fonts-geist
Add-on plugins
Toggle any of these at scaffold time. The CLI will pick them up via --with better-auth or interactively.
- Better Auth (email + password)Drop-in email + password authentication with Better Auth, Drizzle, and SQLite.Auth