Statt Credentials im Workflow hardcoden:
- Compose-File und Env-Vars werden zur Laufzeit aus Portainer gelesen
- Einziges Secret im Workflow: PORTAINER_TOKEN
- Keine sensiblen Daten mehr in git-versionierten Dateien
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Helmet CSP: upgrade-insecure-requests und HSTS für HTTP-Deployments deaktiviert
(war die Ursache der leeren Seite - Browser versuchte JS über HTTPS zu laden)
- Backend: statische Dateien werden jetzt in allen NODE_ENV-Modi serviert
- Frontend: IS_DEV erkennt auch VITE_TEST_MODE=true (Build-Zeit Variable)
- Dockerfile: VITE_TEST_MODE=true beim Vite-Build, NODE_ENV=development
- docker-compose.yml: NODE_ENV=development, CORS_ORIGIN=*
- Gitea Workflow: Auth-Token für git clone, Build via Portainer API statt lokaler Docker CLI
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
CSS modules and Vite types not available during tsc check.
Vite build works without prior tsc step.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
actions/checkout@v4 needs Node.js which isn't available in host mode.
Use git clone directly instead.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Multi-stage build: frontend (Vite) + backend (TypeScript) in one container.
Production image based on node:20-alpine with health check.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove node_modules/, .DS_Store, .vscode/ and build output from
git tracking. Adds .gitignore to prevent future accidental commits
of dependencies and generated files.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>