3.1 KiB
AGENTS.md — apps/cms
Thin shell hosting the Payload CMS admin panel via Next.js. All CMS configuration (collections, globals, hooks, access control, payload.config.ts) lives in @repo/core-cms, which aggregates collections from feature packages.
Purpose
This app exists solely to serve the Payload Admin UI. It contains no custom CMS code beyond Next.js routing boilerplate. All business knowledge lives in feature packages (@repo/auth, @repo/blog, etc.), which export their collections/globals via subpath exports (.../cms). @repo/core-cms composes them into a single Payload config.
Port: 3001
docker compose up -d postgres # Start PostgreSQL on port 5432
pnpm dev --filter @repo/cms # http://localhost:3001/admin
Key Files
| File | Purpose |
|---|---|
next.config.mjs |
Minimal config wrapped with withPayload() from @payloadcms/next |
tsconfig.json |
TypeScript config with @payload-config path alias |
src/app/(payload)/layout.tsx |
Auto-generated Payload root layout (DO NOT MODIFY) |
src/app/(payload)/admin/[[...segments]]/page.tsx |
Auto-generated catch-all admin page (DO NOT MODIFY) |
src/app/(payload)/importMap.js |
Auto-generated Payload import map (DO NOT MODIFY) |
Hard Rules
- NEVER add collections, globals, or hooks in this app — put them in feature packages
- NEVER create custom CMS logic here — use
@repo/core-cms - NEVER modify auto-generated files under
src/app/(payload)/ - All Payload config changes go in
packages/core-cms/src/payload.config.ts
@payload-config Alias
The tsconfig.json points to @repo/core-cms:
{
"compilerOptions": {
"paths": {
"@payload-config": ["../../packages/core-cms/src/payload.config.ts"]
}
}
}
When Payload imports @payload-config, it resolves to the composed config from @repo/core-cms, which in turn imports feature collections.
Composition flow
Feature 1 (@repo/blog)
└─ src/integrations/cms/collections/articles.ts
└─ exported as ./cms
Feature 2 (@repo/auth)
└─ src/integrations/cms/collections/users.ts
└─ exported as ./cms
Feature 3 (@repo/navigation)
└─ src/integrations/cms/globals/header.ts
└─ exported as ./cms
Core CMS (@repo/core-cms)
└─ src/payload.config.ts
imports all feature /cms exports
calls buildConfig({ collections, globals })
This app (@repo/cms)
└─ src/app/(payload)/layout.tsx
loads config from @payload-config
Payload CLI auto-generates admin routes
Type Generation
After adding/modifying collections in any feature's /cms folder:
cd apps/cms && pnpm generate:types
# Regenerates packages/core-cms/src/generated-types.ts
Dependencies
| Dependency | Purpose |
|---|---|
@repo/core-cms |
Payload config + buildConfig |
@payloadcms/next |
Next.js integration for Payload |
payload |
Payload CMS core |
next |
Next.js 15 framework |
sharp |
Image processing |
Cross-References
- Feature collections: each feature's
src/integrations/cms/folder - CMS composition:
packages/core-cms/AGENTS.md