diff --git a/.planning/HANDOFF.json b/.planning/HANDOFF.json
new file mode 100644
index 0000000..ab82bfa
--- /dev/null
+++ b/.planning/HANDOFF.json
@@ -0,0 +1,51 @@
+{
+ "version": "1.0",
+ "timestamp": "2026-06-19T12:50:32.516Z",
+ "phase": "03",
+ "phase_name": "module-system-domaincheck",
+ "phase_dir": ".planning/phases/03-module-system-domaincheck",
+ "plan": 4,
+ "task": 1,
+ "total_tasks": 1,
+ "status": "paused",
+ "completed_tasks": [
+ {"id": 1, "name": "Module SDK + Registry (03-01)", "status": "done", "commit": "fa15d35"},
+ {"id": 2, "name": "Domaincheck Module Backend+Frontend (03-02)", "status": "done", "commit": "1d9fd22"},
+ {"id": 3, "name": "Module UI Lazy Loading + Category Pages (03-03)", "status": "done", "commit": "de63b10"},
+ {"id": 4, "name": "Bugfix: Module Settings Page + Sidebar Categories", "status": "done", "commit": "dad9a77"},
+ {"id": 5, "name": "Bugfix: Tenant Context fuer Module Activation", "status": "done", "commit": "b8ef870"},
+ {"id": 6, "name": "Bugfix: Fehlermeldung in Domaincheck-Seite", "status": "done", "commit": "9b2b1ea"}
+ ],
+ "remaining_tasks": [
+ {"id": 7, "name": "Plan 03-04: Human Verification End-to-End", "status": "not_started"}
+ ],
+ "blockers": [
+ {
+ "description": "API /modules Endpoint gab 401 trotz erfolgreicher Authentifizierung — wurde durch fehlenden Tenant-Kontext im JWT verursacht und gefixt (b8ef870)",
+ "type": "technical",
+ "workaround": "Geloest"
+ }
+ ],
+ "human_actions_pending": [
+ {
+ "action": "Plan 03-04 ausfuehren: Manueller End-to-End-Test des Modulsystems (11 Schritte)",
+ "context": "Docker Stack starten, als Admin einloggen, Modul aktivieren/deaktivieren testen, Domaincheck pruefen",
+ "blocking": true
+ }
+ ],
+ "decisions": [
+ {"decision": "Framework-agnostisches ComponentType im SDK statt React-Abhaengigkeit", "rationale": "SDK soll Backend-kompatibel bleiben", "phase": "03-01"},
+ {"decision": "MODULE_REGISTRY Whitelist-Pattern: nur explizit gelistete Slugs koennen dynamic imports triggern", "rationale": "Sicherheit gegen Arbitrary Code Loading (T-03-09)", "phase": "03-03"},
+ {"decision": "Login redirect via window.location.href statt router.push", "rationale": "Vollstaendiger Page-Reload stellt sicher, dass Auth-State korrekt geladen wird", "phase": "03-bugfix"},
+ {"decision": "API_INTERNAL_URL fuer Server-Side API-Calls im Docker-Netzwerk", "rationale": "SSR-Requests laufen Container-intern, nicht ueber Host-Port", "phase": "03-bugfix"}
+ ],
+ "uncommitted_files": [
+ ".planning/STATE.md",
+ ".planning/config.json",
+ "apps/web/src/app/(auth)/login/page.tsx",
+ "apps/web/src/lib/auth-actions.ts",
+ "docker-compose.yml"
+ ],
+ "next_action": "Uncommitted Changes committen, dann Plan 03-04 starten: Docker Stack hochfahren und manuellen End-to-End-Test der 11 Verifikationsschritte durchfuehren",
+ "context_notes": "Phase 03 Plans 01-03 vollstaendig ausgefuehrt. Drei Bugfixes fuer Auth/Tenant-Kontext-Probleme committed. Noch 5 Dateien mit uncommitted Changes (Login-Fix, API_INTERNAL_URL, State-Updates). Plan 04 ist ein reiner Human-Verification-Plan — kein neuer Code, nur manuelles Testen."
+}
diff --git a/.planning/phases/03-module-system-domaincheck/.continue-here.md b/.planning/phases/03-module-system-domaincheck/.continue-here.md
new file mode 100644
index 0000000..5b72341
--- /dev/null
+++ b/.planning/phases/03-module-system-domaincheck/.continue-here.md
@@ -0,0 +1,93 @@
+---
+context: phase
+phase: 03-module-system-domaincheck
+task: 1
+total_tasks: 1
+status: paused_before_verification
+last_updated: 2026-06-19T12:50:32.516Z
+---
+
+
+Phase 03 Plans 01-03 wurden vollstaendig ausgefuehrt. Drei Bugfixes committed (Tenant-Kontext, Login-Redirect, Fehlermeldungen). Es gibt 5 Dateien mit uncommitted Changes (Login-Fix, API_INTERNAL_URL, State-Updates). Naechster Schritt ist Plan 03-04: manueller End-to-End-Test des gesamten Modulsystems.
+
+
+
+
+Abgeschlossene Aufgaben:
+- Plan 03-01: Module SDK + Registry — Done (fa15d35, 8c24c1e)
+ - @tessera/module-sdk Package mit framework-agnostischen Types
+ - Prisma ModuleDefinition + ModuleTenantActivation Schema
+ - NestJS ModuleRegistry mit CRUD + Aktivierung/Deaktivierung Endpoints
+ - ModuleGuard fuer Tenant-spezifische Modul-Zugriffskontrolle
+- Plan 03-02: Domaincheck Module — Done (2e0a4dd, 1d9fd22)
+ - DNS-basierter Domain-Verfuegbarkeitscheck (node:dns/promises)
+ - NestJS Backend mit DomaincheckModule, Service, Controller
+ - Next.js Frontend mit Eingabeformular, Ergebnis-Tabelle, farbigen Badges
+ - Auto-Seed: Domaincheck wird beim Start registriert
+ - i18n Strings (de/en)
+- Plan 03-03: Module UI Lazy Loading — Done (a191628, de63b10)
+ - MODULE_REGISTRY Whitelist mit next/dynamic SSR-false Lazy Loading
+ - Kategorie-Seite /modules/[category] mit ModuleCard Grid
+ - Erweiterte Modul-Ansicht /modules/[category]/[moduleSlug]
+ - API-Client Utility (apps/web/src/lib/api.ts)
+- Bugfixes:
+ - Module Settings Page + dynamische Sidebar-Kategorien (dad9a77)
+ - Tenant-Kontext fuer Module Activation gefixt (b8ef870)
+ - Echte Fehlermeldung in Domaincheck-Seite anzeigen (9b2b1ea)
+
+
+
+
+- Uncommitted Changes committen (5 Dateien — siehe unten)
+- Plan 03-04: Human Verification End-to-End (11 Schritte)
+ 1. Docker Compose Stack starten
+ 2. Als Admin einloggen
+ 3. GET /modules — Domaincheck in Liste
+ 4. GET /modules/active — aktivierte Module
+ 5. Modul aktivieren (POST /modules/{id}/activate)
+ 6. Kategorie-Seite /modules/domain-tools pruefen
+ 7. Domaincheck oeffnen, "google" pruefen — rote Badges
+ 8. Zufaellige Domain pruefen — gruene Badges
+ 9. Sprachwechsel (i18n) testen
+ 10. Dark Mode testen
+ 11. Modul deaktivieren und Zugriffssperre pruefen
+
+
+
+
+- Framework-agnostisches ComponentType im SDK (kein React-Import, Backend-kompatibel)
+- MODULE_REGISTRY Whitelist: nur explizit gelistete Slugs triggern dynamic imports (Sicherheit T-03-09)
+- Login-Redirect via window.location.href statt router.push (vollstaendiger Auth-State-Reload)
+- API_INTERNAL_URL fuer SSR-Requests im Docker-Netzwerk (Container-interne Kommunikation)
+- credentials:'include' aus Server-Side Fetch entfernt (nicht noetig bei SSR)
+
+
+
+- Keine aktiven Blocker. Alle bisherigen Probleme (401 bei /modules, fehlender Tenant-Kontext) wurden geloest.
+
+
+## Required Reading (in Reihenfolge)
+1. `.planning/phases/03-module-system-domaincheck/03-04-PLAN.md` — Verifikationsplan mit 11 Testschritten
+2. `.planning/phases/03-module-system-domaincheck/03-CONTEXT.md` — Phase-Kontext und Entscheidungen
+3. `.planning/phases/03-module-system-domaincheck/03-01-SUMMARY.md` — SDK + Registry Details
+4. `.planning/phases/03-module-system-domaincheck/03-02-SUMMARY.md` — Domaincheck Module Details
+5. `.planning/phases/03-module-system-domaincheck/03-03-SUMMARY.md` — UI Lazy Loading Details
+
+## Infrastructure State
+- Docker Compose Stack: nicht gestartet (muss fuer Verifikation hochgefahren werden)
+- PostgreSQL: Migrations bis inkl. ModuleRegistry angewendet
+- Domaincheck Seed: wird automatisch bei API-Start ausgefuehrt
+- 5 uncommitted Dateien:
+ - `.planning/STATE.md` — Progress-Update
+ - `.planning/config.json` — _auto_chain_active Flag
+ - `apps/web/src/app/(auth)/login/page.tsx` — window.location.href Login-Redirect
+ - `apps/web/src/lib/auth-actions.ts` — API_INTERNAL_URL + Cleanup
+ - `docker-compose.yml` — API_INTERNAL_URL + JWT_SECRET env vars
+
+
+Alle drei Implementierungs-Plans (01-03) sind fertig. Die Bugfixes haben Auth- und Tenant-Probleme behoben, die beim manuellen Testen aufgefallen sind. Die uncommitted Changes sind alles Fixes aus der letzten Debug-Session — muessen noch committed werden bevor die Verifikation startet. Plan 04 ist kein Code-Plan sondern ein reiner Human-Verification-Checkpoint.
+
+
+
+Start mit: Uncommitted Changes committen (Login-Fix + Docker-Config), dann Plan 03-04 ausfuehren — Docker Stack starten und die 11 manuellen End-to-End-Verifikationsschritte durchgehen.
+