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>
30 lines
692 B
JSON
30 lines
692 B
JSON
{
|
|
"name": "rebreak-admin",
|
|
"type": "module",
|
|
"private": true,
|
|
"version": "0.1.0",
|
|
"scripts": {
|
|
"dev": "nuxt dev --port 3017",
|
|
"build": "nuxt build",
|
|
"generate": "nuxt generate",
|
|
"preview": "node .output/server/index.mjs",
|
|
"postinstall": "nuxt prepare"
|
|
},
|
|
"dependencies": {
|
|
"@nuxt/ui": "^4.5.1",
|
|
"@nuxt/icon": "^1.10.0",
|
|
"@nuxtjs/supabase": "^2.0.4",
|
|
"@vueuse/core": "^14.2.1",
|
|
"@vueuse/nuxt": "^14.2.1",
|
|
"nuxt": "4.1.3",
|
|
"tailwindcss": "^4.1.18",
|
|
"vue": "^3.5.22",
|
|
"vue-router": "^4.5.1"
|
|
},
|
|
"devDependencies": {
|
|
"@iconify-json/heroicons": "^1.2.3",
|
|
"@nuxt/devtools": "latest",
|
|
"typescript": "^5.9.3"
|
|
}
|
|
}
|