--- title: "Payload CMS — Admin Panel Overview" aliases: [payload-admin, payloadcms-admin-panel] tags: [payloadcms, admin, nextjs, react, cms, auth, i18n] sources: [raw/admin__overview.md] created: 2026-05-15 updated: 2026-05-15 --- ## What It Is Payload auto-generates a fully type-safe, React/Next.js Admin Panel for managing users and data. Built on the **Next.js App Router** with React Server Components. Supports 100+ fields with no performance degradation; translated into 30+ languages. ## Project Structure All Payload routes live inside the `(payload)` route group: ``` app/ ├─ (payload)/ │ ├─ admin/[[...segments]]/ ← Admin UI pages │ ├─ api/[...slug]/ ← REST API │ ├─ graphql/ ← GraphQL API │ ├─ graphql-playground/ │ ├─ custom.scss ← Global style overrides │ └─ layout.tsx ← Sets html lang/dir attrs ``` - Move `(payload)` anywhere by updating `routes` + `admin.importMap` in config. - Delete unwanted directories (admin, api, graphql) to opt out — overhead is fully scoped. ## Key Config Options (`admin` key in Payload Config) | Option | Purpose | |--------|---------| | `user` | Slug of auth-enabled Collection that can log in | | `components` | Swap in custom React components globally | | `routes` | Override built-in admin route paths | | `livePreview` | Real-time front-end preview | | `theme` | Lock to `light` or `dark`, default `all` | | `timezones` | IANA timezone list + default (display only; DB always UTC) | | `toast` | Duration, position, limit of toast notifications | | `dateFormat` | Any `date-fns` format string | | `meta` | SEO metadata for the panel | | `autoLogin` | Dev/demo convenience auto-login | ## Auth & User Collection - Only **one** auth-enabled Collection can access the Admin Panel. - Default: auto-generated `users` collection. Override by adding your own `slug: 'users'`. - Set `admin: { user: 'admins' }` to use a different collection (e.g. separate `admins` vs `customers`). ### Role-Based Access Control (RBAC) Add a `roles` field to the auth collection → use `access.admin` to gate panel entry. Multiple roles (e.g. `super-admin`, `editor`) can share the same collection with different permission levels. ## Customizing Routes ### Root-level Routes ```ts routes: { admin: '/custom-admin-route', // default: /admin api: '/api', graphQL: '/graphql', graphQLPlayground: '/graphql-playground', } ``` Changing `routes.admin` requires updating the file system structure to match. ### Admin-level Routes ```ts admin: { routes: { account: '/my-account', // default: /account login: '/login', logout: '/logout', forgot: '/forgot', reset: '/reset', unauthorized: '/unauthorized', inactivity: '/logout-inactivity', createFirstUser: '/create-first-user', } } ``` ## I18n - 30+ languages auto-detected from browser locale. - Users can override from their account page. - Falls back to English if locale unsupported. ## Timezones - Dates **always stored in UTC** in DB; timezone config is display-only. - `supportedTimezones`: array of `{label, value}` (IANA names) **or** a function `({ defaultTimezones }) => [...]` to extend defaults. - `defaultTimezone`: IANA string, e.g. `America/Los_Angeles`. - Must also enable `timezone: true` on individual Date fields. - Use `{ label: 'UTC', value: 'UTC' }` to show raw UTC to editors. ## Toast Notifications (Sonner library) | Option | Default | Notes | |--------|---------|-------| | `duration` | 4000ms | Display time per toast | | `position` | `bottom-right` | Screen position | | `limit` | 5 | Max visible at once | | `expand` | false | Show all without hover | ## Gotchas - `importMap.js` is **regenerated on every startup/HMR** — never edit directly; configure component paths in Payload config instead. - `layout.tsx` says "DO NOT MODIFY" but is only generated once — safe to edit. - Most other `(payload)` files are generated once and safe to modify. ## Key Takeaways - Admin Panel = Next.js App Router app nested in `(payload)` route group; REST + GraphQL APIs are just Next.js routes alongside it. - White-label ready: every field label, view, and style is swappable via Custom Components. - Single auth-enabled Collection gates admin access; RBAC via `access.admin`. - `routes` config (root-level) + `admin.routes` (panel-level) give full URL control — but root changes require FS changes too. - Timezone config is display-only; DB always UTC; must opt in per Date field. - `importMap.js` is the only auto-regenerated file — treat as read-only. ## Related - [[wiki/payloadcms/custom-components|Custom Components]] - [[wiki/tech-patterns/_index|Tech Patterns — Payload CMS]] - [[wiki/architecture/_index|Architecture Patterns]] - [[wiki/claude-code/_index|Claude Code — Next.js integration]] --- *Source: `raw/admin__overview.md` — https://payloadcms.com/docs/admin/overview*