From a849359c204171efeb21ea1fe9fb2a777eca585b Mon Sep 17 00:00:00 2001 From: Martin Porwoll Date: Fri, 13 Feb 2026 21:29:50 +0000 Subject: [PATCH] docs: consolidate and update documentation for Payload 3.76.1 / Next.js 16 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- .env.example | 38 ++++++- BUG_REPORT_CUSTOM_VIEWS.md | 134 ----------------------- CLAUDE.md | 8 +- README.md | 99 ++++++++--------- docs/INFRASTRUCTURE.md | 10 +- docs/KONZEPT-KI-ANLEITUNG.md | 2 +- docs/PROJECT_STATUS.md | 36 ++++-- docs/anleitungen/framework-monitoring.md | 14 +-- 8 files changed, 127 insertions(+), 214 deletions(-) delete mode 100644 BUG_REPORT_CUSTOM_VIEWS.md diff --git a/.env.example b/.env.example index 8b3d774..00ff312 100644 --- a/.env.example +++ b/.env.example @@ -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_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 diff --git a/BUG_REPORT_CUSTOM_VIEWS.md b/BUG_REPORT_CUSTOM_VIEWS.md deleted file mode 100644 index 92ed8cc..0000000 --- a/BUG_REPORT_CUSTOM_VIEWS.md +++ /dev/null @@ -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 ( -
-

Custom View

-
- ) -} - -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 (.next/server/chunks/XXXX.js:5:9989) - at (.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 (.next/server/app/(payload)/admin/[[...segments]]/page.js:1:31665) - at Array.find () - at (.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` diff --git a/CLAUDE.md b/CLAUDE.md index 24d0b54..1ea9a64 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -10,8 +10,8 @@ Multi-Tenant CMS für 3 aktive Websites unter einer Payload CMS 3.x Instanz: ## Tech Stack -- **CMS:** Payload CMS 3.69.0 (⚠️ 3.72.0 hat Login-Bug, siehe GitHub #15243) -- **Framework:** Next.js 15.5.9 +- **CMS:** Payload CMS 3.76.1 +- **Framework:** Next.js 16.2.0-canary.41 - **React:** 19.2.3 - **Sprache:** TypeScript - **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 - **User-Tenant-Zuweisung:** Neue User müssen manuell Tenants zugewiesen bekommen - **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 @@ -441,6 +442,7 @@ Das System unterstützt Deutsch (default) und Englisch: - **Timeline API:** https://pl.porwoll.tech/api/timelines (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) +- **YouTube Analytics:** https://pl.porwoll.tech/admin/youtube-analytics (Admin View, Auth erforderlich) ## Security-Features @@ -1330,4 +1332,4 @@ ssh payload@162.55.85.18 ### Scripts & Backup - `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)* diff --git a/README.md b/README.md index 32054dd..28b4538 100644 --- a/README.md +++ b/README.md @@ -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 -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. +### Setup -3. `pnpm install && pnpm dev` to install dependencies and start the dev server -4. open `http://localhost:3000` to open the app in your browser +```bash +# 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/` -- Modify the `docker-compose.yml` file's `MONGODB_URI` to match the above `` -- Run `docker-compose up` to start the database, optionally pass `-d` to run in the background. +```bash +pnpm dev # Development server +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. - -- #### 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). +Set `EMAIL_DELIVERY_DISABLED=true` to bypass SMTP calls during testing. This flag is automatically honored in `NODE_ENV=test`. diff --git a/docs/INFRASTRUCTURE.md b/docs/INFRASTRUCTURE.md index 324e2ce..8d26c98 100644 --- a/docs/INFRASTRUCTURE.md +++ b/docs/INFRASTRUCTURE.md @@ -1,6 +1,6 @@ # Infrastruktur Dokumentation -*Letzte Aktualisierung: 29. Dezember 2025* +*Letzte Aktualisierung: 13. Februar 2026* ## Gesamtübersicht @@ -84,7 +84,7 @@ ### Software Stack - Node.js 22.x - pnpm -- Next.js 15.5.9 +- Next.js 16.2.0-canary.41 - Claude Code (aktuell) - Codex CLI (aktuell) - Gemini CLI (aktuell) @@ -161,8 +161,8 @@ systemctl status frontend-* - **SSH:** `ssh payload@162.55.85.18` ### Software -- Payload CMS 3.69.0 -- Next.js 15.5.9 +- Payload CMS 3.76.1 +- Next.js 16.2.0-canary.41 - React 19.2.3 - PostgreSQL 17 - 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* diff --git a/docs/KONZEPT-KI-ANLEITUNG.md b/docs/KONZEPT-KI-ANLEITUNG.md index b7abd98..f42e57f 100644 --- a/docs/KONZEPT-KI-ANLEITUNG.md +++ b/docs/KONZEPT-KI-ANLEITUNG.md @@ -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: -- **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 - **Sprachen:** Deutsch (de, Standard) und Englisch (en) - **Tenant-Isolation:** Jede Collection ist automatisch tenant-spezifisch diff --git a/docs/PROJECT_STATUS.md b/docs/PROJECT_STATUS.md index a48ab0d..1e5a180 100644 --- a/docs/PROJECT_STATUS.md +++ b/docs/PROJECT_STATUS.md @@ -1,11 +1,11 @@ -# Projekt Status - Januar 2026 +# Projekt Status - Februar 2026 -**Stand:** 17. Januar 2026 +**Stand:** 13. Februar 2026 ## Zusammenfassung 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 - AI-gestützte Entwicklungstools - Reverse Proxy Stack (Caddy + Nginx) @@ -54,10 +54,12 @@ Die komplette Entwicklungsinfrastruktur ist eingerichtet und funktionsfähig: - [x] Multi-Tenant Plugin - [x] Redis Caching - [x] Package-Versionen synchronisiert: - - Next.js 15.5.9 + - Next.js 16.2.0-canary.41 - 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] YouTube Analytics Dashboard (4-Tab-Dashboard mit Kanal-Auswahl) +- [x] Admin-Nav Sidebar Refactoring (nativer Payload-Stil) ### Community Management System @@ -110,7 +112,6 @@ Organisation: **complexcaresolutions** (Internal) | Priorität | Aufgabe | Status | |-----------|---------|--------| -| 🔴 | Payload 3.72.0+ Login-Bug - hasMany Relationships | Bug-Report: #15243 | | 🟡 | Meta (Facebook/Instagram) Kommentar-Sync | In Entwicklung | | 🟡 | YouTube Thumbnail-Download für Offline-Anzeige | Geplant | @@ -121,10 +122,8 @@ Organisation: **complexcaresolutions** (Internal) ### Kurzfristig (diese Woche) 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 5. [ ] blogwoman.de Frontend mit YouTube-Integration @@ -197,6 +196,25 @@ pm2 logs payload ## 📝 Ä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 - **Dokumentation bereinigt:** - `docs/anleitungen/TODO.md` gelöscht (redundant mit PROJECT_STATUS.md) diff --git a/docs/anleitungen/framework-monitoring.md b/docs/anleitungen/framework-monitoring.md index 5f0e8e0..9415c1f 100644 --- a/docs/anleitungen/framework-monitoring.md +++ b/docs/anleitungen/framework-monitoring.md @@ -2,13 +2,11 @@ Dieser Leitfaden beschreibt, wie wir Payload-Updates evaluieren und wann wir Upgrades durchführen können. -**Aktueller Stand (Januar 2026):** -- Payload: **3.69.0** (stabil) -- Next.js: **15.5.9** +**Aktueller Stand (Februar 2026):** +- Payload: **3.76.1** (stabil) +- Next.js: **16.2.0-canary.41** - 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 @@ -43,7 +41,7 @@ Der Befehl führt `pnpm outdated` für Payload-Core, Plugins und Next.js aus. ```bash 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` --- @@ -52,6 +50,6 @@ Der Befehl führt `pnpm outdated` für Payload-Core, Plugins und Next.js aus. | 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*