docs: consolidate and update documentation for Payload 3.76.1 / Next.js 16

Update all version references from Payload 3.69.0 → 3.76.1 and Next.js
15.5.9 → 16.2.0-canary.41. Replace .env.example (MongoDB → PostgreSQL)
and README.md (generic template → project-specific). Remove obsolete
BUG_REPORT_CUSTOM_VIEWS.md. Add YouTube Analytics Dashboard to URLs and
February 2026 changelog entry.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Martin Porwoll 2026-02-13 21:29:50 +00:00
parent 197d45f9e4
commit a849359c20
8 changed files with 127 additions and 214 deletions

View file

@ -1,5 +1,39 @@
DATABASE_URI=mongodb://127.0.0.1/your-database-name # Datenbank (PostgreSQL via PgBouncer)
DATABASE_URI=postgresql://payload:YOUR_PASSWORD@127.0.0.1:6432/payload_db
PAYLOAD_SECRET=YOUR_SECRET_HERE PAYLOAD_SECRET=YOUR_SECRET_HERE
PAYLOAD_PUBLIC_SERVER_URL=http://localhost:3000
NEXT_PUBLIC_SERVER_URL=http://localhost:3000
NODE_ENV=development
PORT=3000
# Prevent actual SMTP calls during tests or CI # E-Mail (Global Fallback)
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_SECURE=false
SMTP_USER=user@example.com
SMTP_PASS=your-password
SMTP_FROM_ADDRESS=noreply@example.com
SMTP_FROM_NAME=Payload CMS
# Redis Cache (optional, In-Memory-Fallback)
REDIS_URL=redis://localhost:6379
# Security
CSRF_SECRET=your-csrf-secret
TRUST_PROXY=true
# YouTube OAuth (optional)
GOOGLE_CLIENT_ID=your-client-id
GOOGLE_CLIENT_SECRET=your-client-secret
YOUTUBE_REDIRECT_URI=http://localhost:3000/api/youtube/callback
# Meta OAuth (optional)
META_APP_ID=your-app-id
META_APP_SECRET=your-app-secret
META_REDIRECT_URI=http://localhost:3000/api/auth/meta/callback
# Cron Jobs (optional)
CRON_SECRET=your-64-char-hex
# Tests
EMAIL_DELIVERY_DISABLED=false EMAIL_DELIVERY_DISABLED=false

View file

@ -1,134 +0,0 @@
# Bug Report: Custom Admin Components cause TypeError with path-to-regexp
## Summary
**ALL** custom admin components registered via `admin.components` cause a `TypeError: Missing parameter name at 5` error from path-to-regexp when used together with `@payloadcms/plugin-multi-tenant`. This includes `views`, `afterNavLinks`, and `beforeNavLinks`.
## Environment
- **Payload Version:** 3.69.0 (originally reported on 3.68.4)
- **Next.js Version:** 15.5.9
- **React Version:** 19.2.3
- **Node.js Version:** 22.x
- **Database:** PostgreSQL 17.6
- **Plugin:** @payloadcms/plugin-multi-tenant 3.69.0
> **Note:** Bug persists after update to 3.69.0. Custom components remain disabled.
## Steps to Reproduce
1. Create a Payload 3.x project with the multi-tenant plugin
2. Add a custom view to the admin config:
```typescript
// payload.config.ts
export default buildConfig({
admin: {
user: Users.slug,
components: {
views: {
MyCustomView: {
Component: '@/components/admin/MyCustomView#MyCustomView',
path: '/my-custom-view',
},
},
},
},
plugins: [
multiTenantPlugin({
tenantsSlug: 'tenants',
collections: { /* ... */ },
}),
// other plugins...
],
})
```
3. Create a simple client component:
```tsx
// src/components/admin/MyCustomView.tsx
'use client'
import React from 'react'
export const MyCustomView: React.FC = () => {
return (
<div style={{ padding: '2rem' }}>
<h1>Custom View</h1>
</div>
)
}
export default MyCustomView
```
4. Build and run the project
5. Navigate to `/admin/my-custom-view`
## Expected Behavior
The custom view should render correctly.
## Actual Behavior
A server-side error occurs with the following message in production:
```
Uncaught Error: An error occurred in the Server Components render.
The specific message is omitted in production builds to avoid leaking sensitive details.
```
When running in development or checking server logs, the actual error is:
```
TypeError: Missing parameter name at 5
at <unknown> (.next/server/chunks/XXXX.js:5:9989)
at <unknown> (.next/server/chunks/XXXX.js:5:10666)
at g (.next/server/chunks/XXXX.js:5:11896)
at e (.next/server/chunks/824.js:96:517138)
at <unknown> (.next/server/app/(payload)/admin/[[...segments]]/page.js:1:31665)
at Array.find (<anonymous>)
at <unknown> (.next/server/app/(payload)/admin/[[...segments]]/page.js:1:31644)
at ax (.next/server/app/(payload)/admin/[[...segments]]/page.js:1:34637) {
digest: '3964718924'
}
```
## Additional Context
### What works:
- Admin panel WITHOUT any custom components (completely empty `admin.components` or omitted entirely)
### What fails:
- ANY custom component registered via `admin.components`, including:
- `views` - custom admin views
- `afterNavLinks` - components after nav links (e.g., TenantBreadcrumb)
- `beforeNavLinks` - components before nav links
- Even the simplest component without any dependencies triggers the error
### Investigation findings:
- The error originates from `path-to-regexp` (version 6.3.0)
- The error occurs during route matching in `handleEndpoints.js`
- The error message "Missing parameter name at 5" suggests an invalid route pattern like `/:` is being generated somewhere
- This happens regardless of the view path used (tested with `/dashboard`, `/tenant-dashboard`, `/test-dashboard`)
- The issue appears to be triggered by the combination of ANY custom component and the multi-tenant plugin
- Initially appeared to work in development but fails consistently in production builds
### Workaround
Completely disable ALL custom components:
```typescript
admin: {
user: Users.slug,
// ALL custom components disabled - triggers path-to-regexp error with multi-tenant plugin
// components: {
// afterNavLinks: ['...'],
// beforeNavLinks: ['...'],
// views: { ... },
// },
},
```
## Related Plugins
- `@payloadcms/plugin-multi-tenant` (may be related to the conflict)
- `@payloadcms/plugin-redirects`
- `@payloadcms/plugin-seo`
- `@payloadcms/plugin-form-builder`
- `@payloadcms/plugin-nested-docs`

View file

@ -10,8 +10,8 @@ Multi-Tenant CMS für 3 aktive Websites unter einer Payload CMS 3.x Instanz:
## Tech Stack ## Tech Stack
- **CMS:** Payload CMS 3.69.0 (⚠️ 3.72.0 hat Login-Bug, siehe GitHub #15243) - **CMS:** Payload CMS 3.76.1
- **Framework:** Next.js 15.5.9 - **Framework:** Next.js 16.2.0-canary.41
- **React:** 19.2.3 - **React:** 19.2.3
- **Sprache:** TypeScript - **Sprache:** TypeScript
- **Runtime:** Node.js 22.x - **Runtime:** Node.js 22.x
@ -397,6 +397,7 @@ CREATE TABLE IF NOT EXISTS "{collection}_{array_field}" (
- **Plugin ImportMap:** Nach Plugin-Änderungen `pnpm payload generate:importmap` ausführen - **Plugin ImportMap:** Nach Plugin-Änderungen `pnpm payload generate:importmap` ausführen
- **User-Tenant-Zuweisung:** Neue User müssen manuell Tenants zugewiesen bekommen - **User-Tenant-Zuweisung:** Neue User müssen manuell Tenants zugewiesen bekommen
- **Admin Login:** Custom Route mit Audit-Logging, unterstützt JSON und `_payload` FormData - **Admin Login:** Custom Route mit Audit-Logging, unterstützt JSON und `_payload` FormData
- **Queue Worker:** Benötigt `tsx` als explizite devDependency (für TypeScript-Ausführung via PM2)
## Build-Konfiguration ## Build-Konfiguration
@ -441,6 +442,7 @@ Das System unterstützt Deutsch (default) und Englisch:
- **Timeline API:** https://pl.porwoll.tech/api/timelines (GET, öffentlich, tenant required) - **Timeline API:** https://pl.porwoll.tech/api/timelines (GET, öffentlich, tenant required)
- **Workflows API:** https://pl.porwoll.tech/api/workflows (GET, öffentlich, tenant required) - **Workflows API:** https://pl.porwoll.tech/api/workflows (GET, öffentlich, tenant required)
- **Data Retention API:** https://pl.porwoll.tech/api/retention (GET/POST, Super-Admin erforderlich) - **Data Retention API:** https://pl.porwoll.tech/api/retention (GET/POST, Super-Admin erforderlich)
- **YouTube Analytics:** https://pl.porwoll.tech/admin/youtube-analytics (Admin View, Auth erforderlich)
## Security-Features ## Security-Features
@ -1330,4 +1332,4 @@ ssh payload@162.55.85.18
### Scripts & Backup ### Scripts & Backup
- `scripts/backup/README.md` - Backup-System Dokumentation - `scripts/backup/README.md` - Backup-System Dokumentation
*Letzte Aktualisierung: 26.01.2026 (Redundanzen bereinigt, Collections aktualisiert)* *Letzte Aktualisierung: 13.02.2026 (Versionen aktualisiert: Payload 3.76.1, Next.js 16.2.0-canary.41)*

View file

@ -1,71 +1,66 @@
# Payload Blank Template # Payload CMS Multi-Tenant
This template comes configured with the bare minimum to get started on anything you need. Multi-Tenant Headless CMS for 3 active websites under a single Payload CMS instance.
## Quick start ## Tech Stack
This template can be deployed directly from our Cloud hosting and it will setup MongoDB and cloud S3 object storage for media. - **CMS:** Payload CMS 3.76.1
- **Framework:** Next.js 16.2.0-canary.41
- **Runtime:** Node.js 22.x
- **Database:** PostgreSQL 17.6 (via PgBouncer)
- **Cache:** Redis 7.x (optional, with in-memory fallback)
- **Package Manager:** pnpm
## Quick Start - local setup ## Tenants
To spin up this template locally, follow these steps: | Tenant | Slug | Domain |
|--------|------|--------|
| porwoll.de | porwoll | porwoll.de |
| Complex Care Solutions GmbH | c2s | complexcaresolutions.de |
| Gunshin | gunshin | gunshin.de |
### Clone ## Quick Start
After you click the `Deploy` button above, you'll want to have standalone copy of this repo on your machine. If you've already cloned this repo, skip to [Development](#development). ### Prerequisites
### Development - Node.js 22.x
- pnpm
- PostgreSQL 17 (or PgBouncer connection)
- Redis (optional)
1. First [clone the repo](#clone) if you have not done so already ### Setup
2. `cd my-project && cp .env.example .env` to copy the example environment variables. You'll need to add the `MONGODB_URI` from your Cloud project to your `.env` if you want to use S3 storage and the MongoDB database that was created for you.
3. `pnpm install && pnpm dev` to install dependencies and start the dev server ```bash
4. open `http://localhost:3000` to open the app in your browser # Install dependencies
pnpm install
That's it! Changes made in `./src` will be reflected in your app. Follow the on-screen instructions to login and create your first admin user. Then check out [Production](#production) once you're ready to build and serve your app, and [Deployment](#deployment) when you're ready to go live. # Copy environment variables
cp .env.example .env
# Edit .env with your database credentials
#### Docker (Optional) # Run development server
pnpm dev
```
If you prefer to use Docker for local development instead of a local MongoDB instance, the provided docker-compose.yml file can be used. Open [http://localhost:3000/admin](http://localhost:3000/admin) to access the admin panel.
To do so, follow these steps: ## Commands
- Modify the `MONGODB_URI` in your `.env` file to `mongodb://127.0.0.1/<dbname>` ```bash
- Modify the `docker-compose.yml` file's `MONGODB_URI` to match the above `<dbname>` pnpm dev # Development server
- Run `docker-compose up` to start the database, optionally pass `-d` to run in the background. pnpm build # Production build
pnpm payload migrate # Run migrations
pnpm payload migrate:create # Create migration
pnpm test # Run tests
pnpm lint # ESLint
pnpm typecheck # TypeScript check
```
## How it works ## Documentation
The Payload config is tailored specifically to the needs of most websites. It is pre-configured in the following ways: - **[CLAUDE.md](./CLAUDE.md)** - Full project documentation (collections, blocks, APIs, architecture)
- **[docs/](./docs/)** - Additional documentation (infrastructure, deployment, security)
### Collections ## Email Testing
See the [Collections](https://payloadcms.com/docs/configuration/collections) docs for details on how to extend this functionality. Set `EMAIL_DELIVERY_DISABLED=true` to bypass SMTP calls during testing. This flag is automatically honored in `NODE_ENV=test`.
- #### Users (Authentication)
Users are auth-enabled collections that have access to the admin panel.
For additional help, see the official [Auth Example](https://github.com/payloadcms/payload/tree/main/examples/auth) or the [Authentication](https://payloadcms.com/docs/authentication/overview#authentication-overview) docs.
- #### Media
This is the uploads enabled collection. It features pre-configured sizes, focal point and manual resizing to help you manage your pictures.
### Docker
Alternatively, you can use [Docker](https://www.docker.com) to spin up this template locally. To do so, follow these steps:
1. Follow [steps 1 and 2 from above](#development), the docker-compose file will automatically use the `.env` file in your project root
1. Next run `docker-compose up`
1. Follow [steps 4 and 5 from above](#development) to login and create your first admin user
That's it! The Docker instance will help you get up and running quickly while also standardizing the development environment across your teams.
## Email testing
Security integration tests exercise the SMTP endpoints and will hang if no mail server is reachable. Set `EMAIL_DELIVERY_DISABLED=true` (default is `false`) to bypass the actual SMTP call while still logging the request. This flag is automatically honored in `NODE_ENV=test`, so CI pipelines can safely run the security test suite without external dependencies.
## Questions
If you have any issues or questions, reach out to us on [Discord](https://discord.com/invite/payload) or start a [GitHub discussion](https://github.com/payloadcms/payload/discussions).

View file

@ -1,6 +1,6 @@
# Infrastruktur Dokumentation # Infrastruktur Dokumentation
*Letzte Aktualisierung: 29. Dezember 2025* *Letzte Aktualisierung: 13. Februar 2026*
## Gesamtübersicht ## Gesamtübersicht
@ -84,7 +84,7 @@
### Software Stack ### Software Stack
- Node.js 22.x - Node.js 22.x
- pnpm - pnpm
- Next.js 15.5.9 - Next.js 16.2.0-canary.41
- Claude Code (aktuell) - Claude Code (aktuell)
- Codex CLI (aktuell) - Codex CLI (aktuell)
- Gemini CLI (aktuell) - Gemini CLI (aktuell)
@ -161,8 +161,8 @@ systemctl status frontend-*
- **SSH:** `ssh payload@162.55.85.18` - **SSH:** `ssh payload@162.55.85.18`
### Software ### Software
- Payload CMS 3.69.0 - Payload CMS 3.76.1
- Next.js 15.5.9 - Next.js 16.2.0-canary.41
- React 19.2.3 - React 19.2.3
- PostgreSQL 17 - PostgreSQL 17
- Redis - Redis
@ -239,4 +239,4 @@ systemctl start frontend-porwoll
--- ---
*Dokumentation: Martin Porwoll | Complex Care Solutions GmbH | 29.12.2025* *Dokumentation: Martin Porwoll | Complex Care Solutions GmbH | 13.02.2026*

View file

@ -8,7 +8,7 @@ Diese Anleitung erklärt, wie du als Konzept-KI einen strukturierten Prompt für
Das Payload CMS ist ein Multi-Tenant-fähiges Headless CMS mit folgenden Eigenschaften: Das Payload CMS ist ein Multi-Tenant-fähiges Headless CMS mit folgenden Eigenschaften:
- **Framework:** Payload 3.69.0 + Next.js 15.5.9 - **Framework:** Payload 3.76.1 + Next.js 16.2.0-canary.41
- **Datenbank:** PostgreSQL 17 - **Datenbank:** PostgreSQL 17
- **Sprachen:** Deutsch (de, Standard) und Englisch (en) - **Sprachen:** Deutsch (de, Standard) und Englisch (en)
- **Tenant-Isolation:** Jede Collection ist automatisch tenant-spezifisch - **Tenant-Isolation:** Jede Collection ist automatisch tenant-spezifisch

View file

@ -1,11 +1,11 @@
# Projekt Status - Januar 2026 # Projekt Status - Februar 2026
**Stand:** 17. Januar 2026 **Stand:** 13. Februar 2026
## Zusammenfassung ## Zusammenfassung
Die komplette Entwicklungsinfrastruktur ist eingerichtet und funktionsfähig: Die komplette Entwicklungsinfrastruktur ist eingerichtet und funktionsfähig:
- Payload CMS Multi-Tenant (Dev + Prod) - **v3.69.0 stabil** - Payload CMS Multi-Tenant (Dev + Prod) - **v3.76.1 stabil**
- Multi-Frontend Development Environment - Multi-Frontend Development Environment
- AI-gestützte Entwicklungstools - AI-gestützte Entwicklungstools
- Reverse Proxy Stack (Caddy + Nginx) - Reverse Proxy Stack (Caddy + Nginx)
@ -54,10 +54,12 @@ Die komplette Entwicklungsinfrastruktur ist eingerichtet und funktionsfähig:
- [x] Multi-Tenant Plugin - [x] Multi-Tenant Plugin
- [x] Redis Caching - [x] Redis Caching
- [x] Package-Versionen synchronisiert: - [x] Package-Versionen synchronisiert:
- Next.js 15.5.9 - Next.js 16.2.0-canary.41
- React 19.2.3 - React 19.2.3
- Payload 3.69.0 (⚠️ 3.72.0 hat Login-Bug bei hasMany Relationships) - Payload 3.76.1
- [x] GitHub Repository (complexcaresolutions/cms.c2sgmbh) - [x] GitHub Repository (complexcaresolutions/cms.c2sgmbh)
- [x] YouTube Analytics Dashboard (4-Tab-Dashboard mit Kanal-Auswahl)
- [x] Admin-Nav Sidebar Refactoring (nativer Payload-Stil)
### Community Management System ### Community Management System
@ -110,7 +112,6 @@ Organisation: **complexcaresolutions** (Internal)
| Priorität | Aufgabe | Status | | Priorität | Aufgabe | Status |
|-----------|---------|--------| |-----------|---------|--------|
| 🔴 | Payload 3.72.0+ Login-Bug - hasMany Relationships | Bug-Report: #15243 |
| 🟡 | Meta (Facebook/Instagram) Kommentar-Sync | In Entwicklung | | 🟡 | Meta (Facebook/Instagram) Kommentar-Sync | In Entwicklung |
| 🟡 | YouTube Thumbnail-Download für Offline-Anzeige | Geplant | | 🟡 | YouTube Thumbnail-Download für Offline-Anzeige | Geplant |
@ -121,10 +122,8 @@ Organisation: **complexcaresolutions** (Internal)
### Kurzfristig (diese Woche) ### Kurzfristig (diese Woche)
1. [ ] Meta (Facebook/Instagram) Kommentar-Synchronisation fertigstellen 1. [ ] Meta (Facebook/Instagram) Kommentar-Synchronisation fertigstellen
2. [ ] YouTube Analytics-Dashboard implementieren
3. [ ] Payload 3.72+ Update testen (nach Bug-Fix)
### Mittelfristig (Januar/Februar 2026) ### Mittelfristig (Februar/März 2026)
4. [ ] porwoll.de Frontend-Entwicklung 4. [ ] porwoll.de Frontend-Entwicklung
5. [ ] blogwoman.de Frontend mit YouTube-Integration 5. [ ] blogwoman.de Frontend mit YouTube-Integration
@ -197,6 +196,25 @@ pm2 logs payload
## 📝 Änderungsprotokoll ## 📝 Änderungsprotokoll
### 13.02.2026
- **Payload CMS 3.69.0 → 3.76.1 Upgrade:**
- Login-Bug (#15243) mit hasMany Relationships ist in 3.76.1 behoben
- Custom Admin Views funktionieren wieder (path-to-regexp Bug gefixt)
- **Next.js 15.5.9 → 16.2.0-canary.41 Upgrade**
- **YouTube Analytics Dashboard implementiert:**
- 4-Tab-Dashboard (Übersicht, Videos, Audience, Engagement)
- Kanal-Auswahl für Multi-Channel-Support
- Tab-Switch-Crash und Channel-Selector Bugs gefixt
- **Admin-Nav Sidebar Refactoring:**
- Sidebar-Navigation auf nativen Payload-Stil umgestellt
- Einheitliche Nav-Groups für alle Custom Views
- **tsx als explizite devDependency hinzugefügt** (Queue-Worker Abhängigkeit)
- **Dokumentation konsolidiert:**
- Alle Versionsnummern aktualisiert
- BUG_REPORT_CUSTOM_VIEWS.md entfernt (obsolet)
- .env.example auf PostgreSQL korrigiert
- README.md projektspezifisch ersetzt
### 17.01.2026 ### 17.01.2026
- **Dokumentation bereinigt:** - **Dokumentation bereinigt:**
- `docs/anleitungen/TODO.md` gelöscht (redundant mit PROJECT_STATUS.md) - `docs/anleitungen/TODO.md` gelöscht (redundant mit PROJECT_STATUS.md)

View file

@ -2,13 +2,11 @@
Dieser Leitfaden beschreibt, wie wir Payload-Updates evaluieren und wann wir Upgrades durchführen können. Dieser Leitfaden beschreibt, wie wir Payload-Updates evaluieren und wann wir Upgrades durchführen können.
**Aktueller Stand (Januar 2026):** **Aktueller Stand (Februar 2026):**
- Payload: **3.69.0** (stabil) - Payload: **3.76.1** (stabil)
- Next.js: **15.5.9** - Next.js: **16.2.0-canary.41**
- React: **19.2.3** - React: **19.2.3**
> ⚠️ **Payload 3.72.0 Bug:** Login schlägt fehl bei Usern mit hasMany Relationships (tenants, youtubeChannels). GitHub Issue: #15243. Bei 3.69.0 bleiben bis Fix verfügbar.
--- ---
## 1. Versions-Check ## 1. Versions-Check
@ -43,7 +41,7 @@ Der Befehl führt `pnpm outdated` für Payload-Core, Plugins und Next.js aus.
```bash ```bash
pnpm lint && pnpm typecheck && pnpm test && pnpm build pnpm lint && pnpm typecheck && pnpm test && pnpm build
``` ```
5. **Login-Test mit User mit Relationships** (kritisch nach 3.72.0 Bug) 5. **Login-Test mit User mit Relationships**
6. Bei Erfolg: PR in `develop` 6. Bei Erfolg: PR in `develop`
--- ---
@ -52,6 +50,6 @@ Der Befehl führt `pnpm outdated` für Payload-Core, Plugins und Next.js aus.
| Version | Problem | Status | | Version | Problem | Status |
|---------|---------|--------| |---------|---------|--------|
| 3.72.0 | Login-Bug bei hasMany Relationships | Offen (GitHub #15243) | | 3.72.0 | Login-Bug bei hasMany Relationships | Behoben in 3.76.1 |
*Letzte Aktualisierung: 17.01.2026* *Letzte Aktualisierung: 13.02.2026*