chahinebrini
|
6c1abc1ec9
|
feat(admin): responsive layout — bottom-tabs auf mobile, sidebar auf desktop
User-Wunsch: kleine screens (iPhone) keine sidebar, sondern bottom-tab-bar
wie native rebreak-app.
Layout-Architektur:
- Desktop (lg+, ≥1024px):
- Topbar: email + logout-button
- Sidebar links (w-56) mit full-label-nav (versteckt <lg)
- Content rechts (p-6)
- Mobile (<lg):
- Topbar: hamburger UDropdownMenu rechts (email + logout)
- Sidebar versteckt
- Content full-width (p-4 pb-24, damit content nicht hinter tab-bar)
- Bottom-tab-bar: fixed bottom-0, border-t, bg-gray-950/95 backdrop-blur
- 5 tabs in grid-cols-5: Home / Domains / Users / Stats / Mod
- Icon (h-5 w-5) + label (text-[10px])
- Active-state: text-white bg-gray-800 (route-match isActive helper)
- Safe-area-bottom respektiert via env(safe-area-inset-bottom)
Pages-content unangetastet, nur layout. Build clean.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-09 15:48:35 +02:00 |
|
chahinebrini
|
f7c9c79365
|
feat(admin): Admin App initial commit + Deploy-Infrastructure
apps/admin/:
- Nuxt 4.1.3 + @nuxt/ui 4 + @nuxtjs/supabase, port 3017 staging
- 7 pages: index (59 LOC dashboard), login (72 LOC), auth/confirm, plus stubs
für domains/users/stats/moderation (14-17 LOC each, content für separate
Phase 2 Session)
- composables/useAdminAuth.ts: Supabase login + verifyAdminRole hook
- middleware/admin-auth.ts: route guard (Phase 3 backend-check ready)
- layouts/default.vue, app.vue, README.md
- nuxt.config.ts: SSR=true, port 3017, dark-mode preference, Supabase
pkce-flow, runtimeConfig.adminSecret für Phase 3 backend-binding
Deploy-Infrastructure:
- .github/workflows/deploy-admin-staging.yml: build admin auf push to main mit
path-filter apps/admin/**, scp tar zu Server, atomic-mv + pm2 restart
- scripts/deploy-admin-from-artifact.sh: Server-side deploy (extract, atomic mv,
pm2 reload). Kein prisma-migrate (admin hat kein eigenes DB-Schema).
- apps/admin/start-admin-staging.sh: pm2 start-script mit Infisical-wrapper,
port 3017, mappt Infisical SUPABASE_URL/KEY auf NUXT_PUBLIC_*
- ecosystem.config.js: rebreak-admin-staging Eintrag (port 3017,
max_memory_restart 400M)
- ops/nginx/admin-staging.rebreak.org.conf: HTTP→HTTPS redirect, SSL paths,
proxy auf 127.0.0.1:3017, noindex header
Pending User-Actions für go-live:
1. DNS-A-Record admin.staging.rebreak.org → 49.13.55.22
2. SSL-cert via certbot (oder bestehender wildcard *.staging.rebreak.org)
3. nginx-config auf Server aktivieren (sudo cp + ln + reload)
4. pm2 initial start: pm2 start ecosystem.config.js --only rebreak-admin-staging
5. Infisical-secret ADMIN_SECRET (server-only, Phase 3 binding)
GH-Actions: keine neuen Secrets (nutzt bestehende HETZNER_SSH_KEY/HOST/USER)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-08 22:30:17 +02:00 |
|