diff --git a/docker/nginx/default.conf b/docker/nginx/default.conf index c87b225..618b2ea 100644 --- a/docker/nginx/default.conf +++ b/docker/nginx/default.conf @@ -48,8 +48,10 @@ server { proxy_set_header X-Forwarded-Proto https; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; - proxy_read_timeout 86400; - proxy_send_timeout 86400; + proxy_read_timeout 86400s; + proxy_send_timeout 86400s; + proxy_connect_timeout 86400s; + proxy_buffering off; } # Vite HMR WebSocket diff --git a/docs/superpowers/specs/2026-05-16-nimuli-handoff.md b/docs/superpowers/specs/2026-05-16-nimuli-handoff.md new file mode 100644 index 0000000..d1fc505 --- /dev/null +++ b/docs/superpowers/specs/2026-05-16-nimuli-handoff.md @@ -0,0 +1,418 @@ +# Nimuli — Handoff für neue Claude-Session + +**Datum:** 2026-05-16 +**Repo:** https://git.nexlab.at/boban/nimuli.git +**VM:** Debian 13, IP 10.10.90.142, User: nexxo (sudo) +**Spec:** docs/superpowers/specs/2026-05-15-nimuli-design.md + +--- + +## Aktueller Stand + +### Was läuft +- Docker-Compose hoch (nginx, app, queue, scheduler, reverb, mysql, redis, mailpit) +- Laravel 12 + Livewire v3 + Octane + Tailwind v4 installiert +- NPM-Reverse-Proxy mit SSL aktiv für: + - app.nimuli.com → VM:80 + - nimu.li → VM:80 + - ws.nimuli.com → VM:8080 (Websockets ON) + - mail.intern.nimuli.com → VM:8025 +- Vite über app.nimuli.com (kein vite.nimuli.com mehr) +- Login funktioniert für Dev-User + +### Was kaputt ist (PRIO 1) + +1. **Theme-Flash bei Hard-Reload** — Page rendert kurz im White-Mode, springt dann auf Dark-Mode. Inakzeptabel. + +2. **Modals funktionieren GAR NICHT** — `@livewire('wire-elements-modal')` möglicherweise nicht im Layout. Klick auf Modal-Trigger-Buttons macht nichts. + +3. **Laravel Echo nicht definiert** — Console-Warning: "Laravel Echo cannot be found". Reverb-Broadcasts greifen nicht. + +4. **Manifest-Icon-Fehler** — `Error while trying to use the following icon from the Manifest`. Favicon/Manifest-Pfade kaputt. + +5. **Sidebar-Layout falsch** — Header + Footer sollen fix sein, nur Mittelteil scrollable. Aktuell vermutlich anders. + +6. **Alpine doppelt** — `Detected multiple instances of Alpine running` Console-Warning. Livewire v3 bringt Alpine mit, separater Import killt. + +7. **Frontend fehlt** — Nur Stock-Breeze-Blades sichtbar. Kein echtes Nimuli-UI mit Sidebar/Topbar/Dashboard/Modals. + +### Was schon getan wurde + +- Spec geschrieben (Master-Design 2026-05-15) +- Phase 1 "Setup" laut Claude angeblich abgeschlossen, faktisch aber: + - Default-Breeze-Auth-Views statt Custom-Nimuli-UI + - Keine Modals gebaut + - Layout nur rudimentär + - Theme-Switch instabil + - 25+ Tasks gemeldet als "complete" obwohl Browser-UI kaputt +- Tailwind v4 + @tailwindcss/vite installiert +- nginx-Config angepasst für Vite-Proxy via host.docker.internal:5173 +- DevUserSeeder existiert (sollte): nexxo@nimuli.com / NimuliDev2026! +- Workspace-Routes /w/{ulid}/* definiert mit ResolveWorkspace-Middleware + +### Wichtige bisherige Entscheidungen (aus Brainstorm-Spec) + +| Bereich | Entscheidung | +|---------|--------------| +| Stack | Laravel 12 + Livewire v3 + Octane (FrankenPHP) + Tailwind v4 + Alpine via Livewire + Wire Elements Modal + Chart.js 4.x | +| Frontend-Regel | Alle Views via Livewire-Components, Controller + View getrennt. KEINE klassischen Controller außer RedirectController | +| Auth | Breeze Livewire-Stack + 2FA via pragmarx/google2fa | +| Multi-Tenancy | Single-DB, Workspace-ULID in URL `/w/{ulid}/...`, Plan-Limits enforced | +| DB | MySQL Source-of-Truth, Redis für Cache+Queue+Sessions, 4×/Tag Backup 14d Retention | +| Storage | Lokal NAS-Mount (dev), Hetzner Storage Box (prod) | +| Billing | Stripe + Stripe Tax + PayPal-Method + SEPA, Cashier, Customer pro Workspace, billing_profiles separate Table | +| i18n | DB-Table `translations` + Redis-Hash `lang:{locale}`, Admin-UI | +| Theme | Dual-Mode Dark (A-Style, default) + Light (B-Style), Purple-Pink-Akzent (#7c3aed → #ec4899) in beiden Modi | +| Tailwind | v4 `@theme {}` Syntax, KEIN tailwind.config.js, KEINE Inline-Styles außer Progressbar-Width | +| Mobile | Mobile-First, Sidebar als Drawer <768px | +| Modals | Wire Elements Modal — eigener Controller + View, alle via `wire:click="$dispatch('openModal', {component: 'modals.xyz'})"` | +| Tests | Pest, TDD-Pflicht pro Modal-Action | +| Pricing | Free 0€ / Pro 19€ / Business 79€ / Agency 199€ | +| Roadmap | Phase 1 Big-Bang Launch (12-16 Wochen): Core + AI + API + Webhooks. Phase 2 Integrationen. Phase 2.5 React-Native-App. Phase 3 Meta+Google Ads | +| Production | Hetzner Cluster: 3 web + 1 worker + DB + Redis + LB + CDN | +| Dev | Single-Host Docker Compose, alles auf VM 10.10.90.142 | + +--- + +## Sofort-Aufträge für neue Session + +### Phase 0 — Setup-State auditieren (vor jedem Fix) + +```bash +cd ~/nimuli + +# 1. Repo-State +git status +git log --oneline -10 + +# 2. Container +dc ps + +# 3. Layout-Datei prüfen +cat resources/views/components/layouts/app.blade.php + +# 4. Sidebar-Component +ls -la app/Livewire/Components/ resources/views/livewire/components/ + +# 5. Modals +ls -la app/Livewire/Modals/ resources/views/livewire/modals/ + +# 6. wire-elements-modal eingebunden? +grep -r "wire-elements-modal" resources/views/ + +# 7. Echo-Setup +cat resources/js/bootstrap.js +cat resources/js/app.js + +# 8. Tailwind/CSS +cat resources/css/app.css + +# 9. Vite-Config +cat vite.config.js + +# 10. Dev-User +art tinker --execute="echo App\Models\User::firstWhere('email','nexxo@nimuli.com')?->email ?? 'MISSING';" + +# 11. Routes +art route:list | grep -E 'ws\.|logout' + +# 12. Tests +art test 2>&1 | tail -20 + +# 13. Browser-Console-Errors (User berichtet) +``` + +### Phase 1 — Theme-Flash fixen (PRIO HOCH) + +Layout-Header muss exakt so anfangen: + +```blade +@php + $theme = auth()->user()?->theme + ?? request()->cookie('theme', 'dark'); + if ($theme === 'system') $theme = 'dark'; +@endphp + + +
+ + + +