Payload SaaS Starter Review 2026: CMS-First Boilerplate
TL;DR
Payload CMS 3.0 + the official SaaS Starter is the only boilerplate that gives you a full admin panel for free — because the CMS IS the admin panel. Payload 3.0 runs directly inside Next.js with no separate backend service. The SaaS Starter wraps it with Stripe, Auth.js, and a landing page. The result: a CMS-first boilerplate where content editors, admins, and developers share one interface. Ideal for content-heavy SaaS products (course platforms, CMS tools, content marketplaces). Overkill if you don't need flexible content modeling.
Key Takeaways
- Type: Free, open source (MIT) — Payload CMS is free, starter template is free
- Stack: Next.js 15, Payload CMS 3.0, MongoDB or Postgres, Auth.js, Stripe, Tailwind
- Core value: CMS = admin panel — no separate admin UI to build
- Best for: content-heavy SaaS, platforms needing flexible data modeling, apps where non-devs manage content
- Not ideal for: pure app-logic SaaS where you don't need content management
- Price: Free (MIT)
What Makes Payload Different
In Payload 3.0, the CMS runs as part of your Next.js app:
Traditional setup:
Next.js app → REST/GraphQL → separate admin panel
Payload setup:
Next.js app (includes Payload CMS + admin UI)
→ /admin = Payload admin panel
→ /api/payload = Payload REST API
→ All in one Next.js deployment
No separate services. No separate deploys. The admin panel comes with:
- User management with roles
- Media library
- Content collections (your custom data models)
- Access control rules
- Custom fields (rich text, blocks, relationships, arrays)
Tech Stack
Framework: Next.js 15 (App Router)
CMS: Payload CMS 3.0 (runs inside Next.js)
Database: MongoDB or PostgreSQL (with Drizzle adapter)
Auth: Payload's built-in auth OR Auth.js
Payment: Stripe (subscriptions in SaaS Starter)
UI: Tailwind CSS
Email: Resend or Nodemailer
Deployment: Vercel, Railway, Render
Payload Collections (Data Modeling)
Payload's killer feature is flexible data modeling via Collections:
// collections/Users.ts
import type { CollectionConfig } from 'payload/types';
export const Users: CollectionConfig = {
slug: 'users',
auth: true, // Payload handles auth for this collection
admin: {
useAsTitle: 'email',
},
fields: [
{
name: 'name',
type: 'text',
required: true,
},
{
name: 'role',
type: 'select',
options: ['admin', 'user', 'editor'],
defaultValue: 'user',
},
{
name: 'subscription',
type: 'group',
fields: [
{ name: 'plan', type: 'text' },
{ name: 'stripeCustomerId', type: 'text' },
{ name: 'status', type: 'text' },
],
},
],
};
// collections/Courses.ts — example content collection
export const Courses: CollectionConfig = {
slug: 'courses',
access: {
read: ({ req }) => {
// Free courses: public. Premium: require subscription
if (req.user?.subscription?.plan === 'pro') return true;
return { free: { equals: true } };
},
},
fields: [
{ name: 'title', type: 'text', required: true },
{ name: 'description', type: 'richText' },
{ name: 'free', type: 'checkbox', defaultValue: false },
{
name: 'lessons',
type: 'array',
fields: [
{ name: 'title', type: 'text' },
{ name: 'videoUrl', type: 'text' },
{ name: 'duration', type: 'number' },
],
},
],
};
This automatically creates:
- Admin UI for managing courses
- REST API at
/api/courses - Full access control enforcement
Admin Panel (It's Just Payload)
The /admin route provides a fully-featured admin panel out of the box:
- User management (list, create, edit, delete)
- Content management for all collections
- Media uploads (S3, local, Cloudinary)
- Role-based access control
- Audit log (built-in)
No separate admin dashboard to build or maintain.
SaaS Starter Additions
The official Payload SaaS Starter adds:
// Stripe integration:
// - Checkout session creation
// - Customer portal
// - Webhook handling (updates user.subscription in Payload DB)
// Landing page:
// - Hero section
// - Features section
// - Pricing page (reads plans from config)
// - CTA sections
// Auth flow:
// - Email/password via Payload auth
// - Email verification
// - Password reset flow
What's Included vs Missing
| Feature | Status |
|---|---|
| Admin panel | ✅ (Payload CMS) |
| Content management | ✅ Core |
| Role-based access | ✅ |
| Stripe subscriptions | ✅ |
| Landing page | ✅ |
| Authentication | ✅ |
| Media library | ✅ |
| REST + GraphQL API | ✅ Auto-generated |
| tRPC | ❌ (REST/GraphQL instead) |
| Multi-tenancy | Partial (custom) |
| Teams/Organizations | ❌ |
Payload vs Other Boilerplates
| Payload Starter | ShipFast | T3 Stack | |
|---|---|---|---|
| Admin panel | ✅ Free (Payload) | ❌ | ❌ |
| Content modeling | ✅ | ❌ | ❌ |
| CMS features | ✅ | ❌ | ❌ |
| Landing page | ✅ | ✅ | ❌ |
| Price | Free | $299 | Free |
| Complexity | High | Medium | High |
| tRPC | ❌ | ❌ | ✅ |
Who Should Use Payload Starter
Use Payload Starter if:
→ Building a content-heavy SaaS (courses, newsletters, CMS tools)
→ Need an admin panel without building one
→ Want flexible data modeling (nested fields, relationships, blocks)
→ Non-developers need to manage content
→ Self-hosting on a VPS/Railway/Render
Skip Payload Starter if:
→ Building a pure application (todo app, analytics tool, etc.)
→ Need tRPC or strictly typed API layer
→ Want the simplest possible setup
→ Need React Native companion app
Verdict: Payload Starter is excellent for content-heavy SaaS where you'd otherwise spend weeks building an admin panel. The free admin UI alone justifies choosing it for the right use case. Avoid it for pure-app SaaS where the CMS overhead isn't justified.
Compare Payload Starter with other SaaS boilerplates at StarterPick.