The fastest way to start a production-ready Next.js app.
Authentication · Payments · Emails · Admin Dashboard · shadcn/ui
ShipSpeed is an interactive CLI that scaffolds a modern, production-ready Next.js application with everything you need to ship fast. It layers production-ready features — auth, payments, emails, admin — on top of a solid Next.js foundation.
Stop configuring auth, payments, emails, and UI libraries separately. ShipSpeed wires them all together for you.
| Feature | Library | What You Get |
|---|---|---|
| Authentication | Better Auth | Email/password, OAuth (GitHub, Google, etc.), organizations, 2FA, passkeys, admin roles |
| UI Components | shadcn/ui | Pre-configured with Tailwind CSS variables, dark mode, and essential components |
| Payments | Polar | Checkout sessions, customer portal, webhooks — ready for subscriptions |
| Emails | Resend | Transactional email helper with type-safe sending |
| Admin Dashboard | Custom | User management, organization overview, stats — powered by Better Auth admin plugin |
| Database | Prisma or Drizzle | Your choice, with SQLite, PostgreSQL, MySQL, or PlanetScale |
| API | tRPC | End-to-end typesafe APIs (optional) |
| Styling | Tailwind CSS v4 | Utility-first styling with CSS variables |
# npm
npm create shipspeed@latest
# yarn
yarn create shipspeed
# pnpm
pnpm create shipspeed@latest
# bun
bun create shipspeed@latestThen answer the prompts. ShipSpeed will scaffold your project and install dependencies.
When you run ShipSpeed with the defaults, you get:
my-app/
├── src/
│ ├── app/
│ │ ├── api/
│ │ │ ├── auth/[...all]/route.ts # Better Auth API routes
│ │ │ └── webhook/polar/route.ts # Polar webhook handler
│ │ ├── admin/ # Admin dashboard (optional)
│ │ │ ├── page.tsx # Dashboard overview
│ │ │ ├── users/page.tsx # User management
│ │ │ └── organizations/page.tsx # Org management
│ │ ├── checkout/route.ts # Polar checkout redirect
│ │ ├── portal/route.ts # Polar customer portal
│ │ ├── layout.tsx # Root layout with ThemeProvider
│ │ └── page.tsx # Landing page
│ ├── components/
│ │ ├── ui/ # shadcn/ui components
│ │ └── admin/sidebar.tsx # Admin navigation
│ ├── lib/
│ │ ├── email.ts # Resend email helper
│ │ ├── polar.ts # Polar SDK client
│ │ └── utils.ts # cn() helper
│ ├── server/
│ │ ├── better-auth/
│ │ │ ├── config.ts # Auth config with plugins
│ │ │ ├── client.ts # Auth client (React)
│ │ │ └── server.ts # Server-side session helper
│ │ └── db/ # Database setup
│ └── env.js # Type-safe environment variables
├── components.json # shadcn/ui config
├── .env # Environment variables
└── package.json
ShipSpeed asks you what you need — nothing more, nothing less:
- Project name — What should we call your app?
- Tailwind CSS — Modern styling? (default: Yes)
- tRPC — Typesafe APIs? (default: Yes)
- shadcn/ui — Accessible UI components? (default: Yes)
- Authentication — Better Auth, NextAuth, or none? (default: Better Auth)
- Database ORM — Prisma or Drizzle? (default: Prisma)
- Database Provider — SQLite, PostgreSQL, MySQL, or PlanetScale? (default: SQLite)
- App Router — Next.js App Router? (default: Yes)
- Resend — Transactional emails? (default: Yes)
- Polar — Payments and subscriptions? (default: Yes)
- Admin Dashboard — Built-in admin panel? (default: Yes, with Better Auth)
- Linter — ESLint/Prettier or Biome? (default: ESLint)
- Git — Initialize a repo? (default: Yes)
- Install — Run
pnpm install? (default: Yes)
Every feature is optional. Ship only what you need.
cd my-app
# 1. Set up your environment variables
# Edit .env with your real API keys
# 2. Generate the database schema (if using Better Auth + DB)
npx @better-auth/cli@latest migrate
# 3. Push the database schema (if using Prisma/Drizzle)
pnpm db:push
# 4. Start the dev server
pnpm dev# Required for Better Auth
BETTER_AUTH_SECRET= # openssl rand -base64 32
BETTER_AUTH_GITHUB_CLIENT_ID=
BETTER_AUTH_GITHUB_CLIENT_SECRET=
# Required for database
DATABASE_URL= # e.g., file:./db.sqlite
# Required for Resend
RESEND_API_KEY=
RESEND_FROM_EMAIL=
# Required for Polar
POLAR_ACCESS_TOKEN=
POLAR_WEBHOOK_SECRET=
POLAR_ENV=sandbox # or production
# General
NEXT_PUBLIC_APP_URL=http://localhost:3000ShipSpeed enables all major Better Auth plugins by default:
- Organization — Multi-tenancy, teams, member invites
- Two-Factor Authentication — TOTP-based 2FA with backup codes
- Passkey — WebAuthn passwordless login
- Admin — User management, role assignment, banning, impersonation
Run npx @better-auth/cli@latest migrate after scaffolding to generate the database schema for all plugins.
If you opt in, ShipSpeed creates an /admin route with:
- Dashboard — Overview stats (users, orgs, sessions)
- Users — List, view roles, ban status (via Better Auth admin API)
- Organizations — Placeholder for org management
The admin dashboard is protected by Better Auth's admin plugin. Only users with the admin role can access it.
Most boilerplates give you a blank canvas. ShipSpeed gives you a running start:
- ✅ Auth is configured, not just installed
- ✅ Payments have working routes, not just a SDK
- ✅ Emails have a helper, not just a package
- ✅ Admin dashboard is functional, not just a idea
- ✅ Dark mode works out of the box
- ✅ Every choice is optional — remove what you don't need
- Next.js 15 (App Router)
- TypeScript
- Tailwind CSS v4
- Better Auth
- shadcn/ui
- tRPC (optional)
- Prisma or Drizzle (optional)
- Resend (optional)
- Polar (optional)
We welcome contributions! Please read our Contributing Guide before opening an issue or PR.
- GitHub Issues — Bug reports and feature requests
- GitHub Discussions — Questions and ideas
ShipSpeed is based on create-t3-app by the T3 Stack team. We're grateful for their work in establishing the foundation that ShipSpeed builds upon.
MIT © ShipSpeed
Built with ❤️ by the ShipSpeed team