Production-ready, open-source headless CMS built on Payload CMS 3 and Next.js 15 — bundling the FocusReactive Payload plugins and a modular block-based page builder so you can ship marketing sites, blogs, and product platforms in a day.
Features:
- Presets — multiple pre-configured block configurations to build pages faster.
- A/B Testing — native experiments with dynamic % of traffic per variant, controlled inline.
- Comments — inline collaboration for content teams and developers, directly on the field.
- Multi-Language + AI Translation — one-click AI translations on top of Payload's localization plugin.
- Scheduled Publishing on Serverless — works on Vercel and other serverless platforms where Payload's native scheduling can't run.
- Locale-Scoped Semantic Search — pgvector search that respects the visitor's active locale.
- SSO — OIDC support for Auth0, Keycloak, Okta, and any OIDC-compliant identity provider.
- Modular Page Builder — composable, localizable blocks with preset and A/B-experiment hooks.
- AI Development Ready —
CLAUDE.md,AGENTS.md,.claude/, and.cursor/rulesship in-repo so Claude Code, Cursor, and other agents are productive on day one.
- Create a new repository from this template and clone it locally.
- Provision a database — we recommend Neon for free, branchable Postgres.
- Run Claude Code and paste this setup prompt — the agent will configure environment variables, run migrations, and seed sample content.
Prefer manual setup? Jump to Getting Started.
At FocusReactive we build projects on different CMSs — Sanity, Storyblok, Strapi, and Payload. Each platform has its own unique features and limitations, and sometimes a project needs a feature one CMS has but another doesn't.
So we decided to build all of that into one open-source project — we call it Ideal CMS. The best features from every CMS we've worked with, available as Payload plugins. You can use the project with everything integrated, or install individual plugins to get the features you need. This often helps our clients free up budget for things we believe should be included from day one.
Every plugin works independently in any Payload project. For new projects, we recommend starting from this repository — it combines all of the plugins with the basic setup you'll need to ship.
| Layer | Technology |
|---|---|
| CMS | Payload CMS 3 |
| Framework | Next.js 15+ (App Router) + React 19 |
| Database | PostgreSQL · MongoDB · Supabase |
| Styling | Tailwind CSS |
| Rich Text | Lexical Editor |
| Internationalization | next-intl + AI translations |
| Authentication | JWT + OIDC/SSO (Auth0, Keycloak, Okta) |
| Storage | Vercel Blob · S3 · Supabase Storage |
| Deployment | Optimized for Vercel, Docker-ready |
| AI Development | Claude Code · Cursor · agent-ready (CLAUDE.md, AGENTS.md, .claude/, .cursor/rules) |
Ideal CMS ships a curated set of Claude Code skills under .claude/skills/. These auto-activate when you describe a task that matches their domain, so an AI agent (Claude Code, or any other tool that reads the same skill format) gets project-grounded guidance the moment you say "design a new collection" or "audit this page for performance."
Highlights:
payload— design Payload schemas the right way: collections, fields, hooks, access control, validation, drafts/versioning, virtual fields, and Local API patterns. Triggers on anything touchingpayload.config.ts, collections, fields, or hooks.payload-block-extractor— when you add a new page block, this skill wires it into the semantic search pipeline (text extraction + indexing) so search stays accurate without manual plumbing.vercel-react-best-practices— Vercel Engineering's 45-rule playbook for React and Next.js performance. Use it to audit pages, refactor components, and tune data fetching.cache-components— proactive guidance for Next.js Cache Components and Partial Prerendering —'use cache',cacheLife,cacheTag,updateTag.upload-local-image— fallback flow for staging local images into Payload's media library through Vercel Blob when the agent can't reach the local filesystem directly.nextjs-best-practices,tailwindcss-development,typescript— the everyday craft skills: App Router patterns, Tailwind v4 utilities, and TypeScript style.
Drop a new skill into .claude/skills/<name>/SKILL.md and it picks up on the next conversation — no rebuild, no config.
Ideal CMS bundles the FocusReactive Payload plugins — every plugin works standalone in any Payload project, and together they cover the features we believe should be in the box from day one.
Multiple pre-configured block configurations you can use to build up your pages. It's like having multiple versions of default values — because content teams prefer editing over creating from scratch.
Native experiments with a dynamic percentage of traffic going to each content variant. Control everything from the same page you're working on — page variants, middleware, and analytics adapters included.
- Package:
@focus-reactive/payload-plugin-ab
A way to collaborate inside the CMS. Inline field comments, mentions, and annotations — helpful for both the content team and developers, letting everyone leave feedback directly inside the admin.
Payload already has a localization plugin, so we built a plugin to do AI translations on top of it — fill in every localized field with one click.
Payload CMS natively supports scheduled publishing, but not for serverless platforms like Vercel. Since that's where we deploy most of our projects, we built a plugin that makes it work.
Two more plugins we're actively working on — game changers, in our opinion:
- Releases — schedule the publication of multiple resources together in Payload CMS, so complex launches go out as a single coordinated release with no surprises.
- Visual Editing — a UI overlay over your content in preview mode, letting editors jump to the right field with one click instead of hunting through the admin.
Want to influence the roadmap? Open an issue on focusreactive/payload-plugins — we read everything.
- Node.js
^18.20.2or>=20.9.0 - pnpm
^9or^10 - A PostgreSQL instance (Neon recommended for serverless deployments)
pnpm installCopy the example file and fill in your values:
cp .env.example .env| Variable | Required | Description |
|---|---|---|
DATABASE_URL |
Yes | PostgreSQL connection string |
PAYLOAD_SECRET |
Yes | Secret key for encrypting Payload data |
NEXT_PUBLIC_SERVER_URL |
Yes | Public-facing URL of the application |
PREVIEW_SECRET |
No | Secret for validating live preview requests |
BLOB_READ_WRITE_TOKEN |
Production | Vercel Blob storage token for media uploads |
OPENAI_API_KEY |
No | Enables AI translations and semantic search embeddings |
OIDC_ISSUER |
No | OIDC provider URL for SSO |
OIDC_CLIENT_ID |
No | OIDC client ID |
OIDC_CLIENT_SECRET |
No | OIDC client secret |
OIDC_REDIRECT_URI |
No | Callback URL (defaults to SERVER_URL/api/auth/oidc/callback) |
OIDC_USE_PKCE |
No | Enable PKCE flow (recommended for Auth0) |
OIDC_PROVIDER_NAME |
No | Label shown on the SSO login button |
NEXT_PUBLIC_OIDC_PROVIDER_NAME |
No | Client-side SSO provider label |
pnpm payload migratepnpm devVisit http://localhost:3333/admin and create your first admin user. The frontend uses locale-prefixed routes — /en/..., /es/....
MIT — free for personal and commercial use.