Initial commit
This commit is contained in:
97
apps/cms/AGENTS.md
Normal file
97
apps/cms/AGENTS.md
Normal file
@@ -0,0 +1,97 @@
|
||||
# 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
|
||||
|
||||
```bash
|
||||
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`:
|
||||
|
||||
```json
|
||||
{
|
||||
"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:
|
||||
|
||||
```bash
|
||||
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`
|
||||
Reference in New Issue
Block a user