Modern, production-ready CMS starter built with Payload CMS 3.84.1 and Next.js 16.
- Modern UI/UX β Tailwind CSS, Radix UI, shadcn/ui primitives
- Responsive Design β Mobile-first layout with header/footer components
- Dark/Light Mode β CSS variable-based theme system
- Rich Text Editor β Lexical-powered rich text with React renderer
- Media Management β Image & video field components with S3 / Vercel Blob storage adapters
- SEO Module β
buildMetadata,mergeOpenGraph, JSON-LD generators,robots.ts,sitemap.ts - Official Payload Plugins β SEO, Redirects, Live Preview, Payload Cloud
- Forms β react-hook-form + Zod validation
- Vercel Analytics β Built-in with zero config
- GraphQL API β Endpoint + Playground included
- TypeScript β Strict typing throughout
| Technology | Version | Description |
|---|---|---|
| Next.js | 16.2.4 | React framework |
| Payload CMS | 3.84.1 | Headless CMS |
| Tailwind CSS | 3.4.17 | CSS framework |
| PostgreSQL | β | Database (via pg adapter) |
| TypeScript | 6.0.3 | Type safety |
| React | 19.2.5 | UI library |
| Zod | 4.x | Schema validation |
| react-hook-form | 7.x | Form handling |
git clone https://github.com/Xjectro/payload-cms-boilerplate.git
cd payload-cms-boilerplatenpm install
# or
yarn install
# or
pnpm installCopy .env.example to .env and fill in the required variables:
cp .env.example .env# Database Configuration
DATABASE_URL=postgres://postgres:<password>@127.0.0.1:5432/payload_cms_boilerplate
# Application Secrets
PAYLOAD_SECRET=YOUR_SECRET_HERE
# Site
APP_URL=http://localhost:3000
APP_TITLE=Your Site Name
# Environment Variables for Next.js
NEXT_PUBLIC_URL=${APP_URL}
NEXT_PUBLIC_TITLE=${APP_TITLE}# Run database migrations
npm run payload migratenpm run seednpm run devOpen http://localhost:3000 in your browser.
payload-cms-boilerplate/
βββ src/
β βββ app/
β β βββ (payload)/
β β β βββ admin/
β β β β βββ [[...segments]]/
β β β β β βββ not-found.tsx
β β β β β βββ page.tsx
β β β β βββ importMap.js
β β β βββ api/
β β β β βββ [...slug]/
β β β β β βββ route.ts
β β β β βββ graphql/
β β β β β βββ route.ts
β β β β βββ graphql-playground/
β β β β βββ route.ts
β β β βββ custom.scss
β β β βββ layout.tsx
β β βββ (public)/
β β β βββ layout.tsx
β β β βββ page.tsx
β β β βββ template.tsx
β β βββ robots.ts
β β βββ sitemap.ts
β βββ collections/
β β βββ Media/
β β β βββ index.ts
β β βββ Users/
β β βββ index.ts
β βββ features/
β β βββ example/
β β βββ components/
β β βββ hooks/
β β βββ utils/
β βββ payload/
β β βββ components/
β β β βββ fields/
β β β β βββ media/
β β β β βββ image-media/
β β β β β βββ index.tsx
β β β β βββ video-media/
β β β β β βββ index.tsx
β β β β βββ index.tsx
β β β β βββ types.ts
β β β βββ rich-text.tsx
β β βββ utils/
β β β βββ payload-hooks/
β β β βββ access.ts
β β βββ payload.config.ts
β β βββ payload-types.ts
β β βββ seed.ts
β βββ shared/
β β βββ lib/
β β β βββ utils.ts
β β βββ providers/
β β β βββ client-provider.tsx
β β β βββ server-provider.tsx
β β βββ seo/
β β β βββ components/
β β β β βββ home-structured-data.tsx
β β β βββ utils/
β β β β βββ json-ld/
β β β β β βββ article.ts
β β β β β βββ breadcrumb.ts
β β β β β βββ event.ts
β β β β β βββ faq.ts
β β β β β βββ helpers.ts
β β β β β βββ how-to.ts
β β β β β βββ index.ts
β β β β β βββ item-list.ts
β β β β β βββ local-business.ts
β β β β β βββ organization.ts
β β β β β βββ person.ts
β β β β β βββ product.ts
β β β β β βββ types.ts
β β β β β βββ video.ts
β β β β β βββ webpage.ts
β β β β β βββ website.ts
β β β β βββ metadata.ts
β β β β βββ open-graph.ts
β β β βββ index.ts
β β βββ ui/
β β βββ layout/
β β β βββ header.tsx
β β β βββ footer.tsx
β β βββ primitives/
β β β βββ alert.tsx
β β β βββ badge.tsx
β β β βββ button.tsx
β β β βββ checkbox.tsx
β β β βββ form.tsx
β β β βββ input.tsx
β β β βββ label.tsx
β β βββ react/
β β βββ design-system.tsx
β βββ styles/
β β βββ globals.css
β β βββ themes.css
β βββ css.d.ts
βββ public/
β βββ favicon.ico
β βββ opengraph-image.webp
βββ .env.example
βββ .prettierrc.json
βββ components.json
βββ eslint.config.mjs
βββ next-env.d.ts
βββ next.config.ts
βββ package.json
βββ postcss.config.mjs
βββ tailwind.config.ts
βββ tsconfig.json
| Command | Description |
|---|---|
npm run dev |
Start development server |
npm run build |
Build for production |
npm run start |
Start production server |
npm run lint |
Check code quality |
npm run format |
Format code with Prettier |
npm run seed |
Seed the database |
npm run payload |
Payload CLI (migrate, generateβ¦) |
The SEO module lives in src/shared/seo/ and is ready to use out of the box:
buildMetadataβ generatesMetadataobjects for Next.js pagesmergeOpenGraphβ merges Open Graph tags with site defaults- JSON-LD generators β Article, BreadcrumbList, Event, FAQ, HowTo, ItemList, LocalBusiness, Organization, Person, Product, VideoObject, WebPage, WebSite
HomeStructuredDataβ drop-in component for the home pagerobots.ts/sitemap.tsβ auto-generated at build time
Two storage adapters are pre-installed and can be activated in payload.config.ts:
- AWS S3 β
@payloadcms/storage-s3 - Vercel Blob β
@payloadcms/storage-vercel-blob
| Endpoint | Description |
|---|---|
/api/graphql |
GraphQL API |
/api/graphql-playground |
GraphQL Playground |
/admin |
Payload Admin Panel |
vercel deployOr connect the GitHub repository in the Vercel dashboard for automatic deploys on push.
Set all environment variables from .env.example in your Vercel project settings before deploying.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Website: https://xjectro.com
- GitHub Issues: Issues page
- Payload CMS Docs: payloadcms.com/docs
MIT β see the LICENSE file for details.
Made with love by Xjectro