Modernes Band-Management mit Fokus auf Songs, Setlists, Kalender, Diskussionen und Rehearsal-Workflows.
- Song-Workspace mit Metadaten, Audio-Versionen, Attachments, ChordPro und Diskussionen
- Setlist-Workspace mit Drag-and-Drop, Vorschlaegen, Rehearsal-Helfern und PDF-Export
- Kalender mit Verfuegbarkeiten, Konfliktanzeige und Serien-Terminen
- Rollen/Berechtigungen, Einladungen, Audit-Log und Notifications
- Docker-first Setup mit PostgreSQL + Next.js + Prisma
- Next.js 16 (App Router), React 19, TypeScript
- Prisma ORM + PostgreSQL
- Tailwind/PostCSS + Custom CSS
- Zod fuer Validation
- Playwright fuer E2E Tests
docker-compose.yml- App + Datenbank Orchestrierungweb/- Next.js Anwendungweb/prisma/- Prisma Schema und Migrationenweb/src/app/api/- API Routesweb/src/components/- UI/Workspaces/Panelsweb/src/hooks/- Daten- und UI-Logik
Voraussetzungen:
- Docker + Docker Compose
- Root
.envgepflegt
Start:
sudo docker compose pull
sudo docker compose up -dLogs:
sudo docker logs -f bandival-web
sudo docker logs -f bandival-dbStop:
sudo docker compose downVoraussetzungen:
- Node.js 22+
- PostgreSQL 16+
Im Web-Projekt:
cd web
npm ci
npx prisma generate
npx prisma db push
npm run devBuild/Checks:
npm run lint
npm run buildLokaler Docker-Build aus dem Repo (ohne Registry-Image):
sudo docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --buildZiel: Kein manueller Git-Checkout auf dem Server. Der Server zieht nur signierte Release-Images aus der Registry.
- CI baut und published automatisch nach GHCR:
- Workflow:
.github/workflows/release-image.yml - Image:
ghcr.io/<owner>/bandival-web
- Workflow:
- Server hat nur:
docker-compose.yml.env
- Deployment auf neue Version:
sudo docker compose pull web
sudo docker compose up -d --remove-orphansOptional fuer feste Releases in .env:
BANDIVAL_IMAGE=ghcr.io/<owner>/bandival-web
BANDIVAL_TAG=v1.2.0Dann wieder:
sudo docker compose pull web
sudo docker compose up -d --remove-orphansHinweis: Beim Container-Start werden Prisma-Migrationen mit prisma migrate deploy ausgefuehrt (produktionssicherer als db push).
Repo-loses Server-Paket:
- Siehe
deploy/README.md - Enthalten:
deploy/docker-compose.yml,deploy/.env.example,deploy/deploy.sh
Die Root-Datei .env enthaelt die Compose-Variablen.
Wichtige Keys:
POSTGRES_USERPOSTGRES_PASSWORDAUTH_SECRETAPP_PORTBANDIVAL_IMAGEBANDIVAL_TAGCOOKIE_SECUREAPP_BASE_URLSMTP_HOST,SMTP_PORT,SMTP_SECURE,SMTP_USER,SMTP_PASS,SMTP_FROM
Hinweis:
- In Produktionsumgebungen immer HTTPS verwenden und
COOKIE_SECURE=truesetzen.
Compose nutzt benannte Volumes:
bandival_db_databandival_uploads_databandival_exports_data
Damit bleiben Daten bei Neustarts erhalten. Songs/Dateien verschwinden typischerweise nur dann, wenn auf ein anderes/neu initialisiertes DB-Volume gestartet wurde.
Dateien werden in public/uploads und public/exports gespeichert.
Zusatzrouten fuer robustes Serving:
/uploads/[...filePath]/exports/[...filePath]
Das sorgt dafuer, dass Audio, Cover, Avatar und Exportdateien auch in restriktiven Container-Setups konsistent ausgeliefert werden.
- Sicherstellen, dass
docker compose pull && docker compose up -dnach dem letzten Update ausgefuehrt wurde - Web-Logs pruefen:
sudo docker logs -f bandival-web - API Route testen, z. B.
GET /uploads/...direkt im Browser
- Nach Export wird Datei unter
/exports/...bereitgestellt - Pfad in DevTools/Network pruefen
- Web-Logs auf Schreibfehler von
public/exportspruefen
- UI aktualisiert Selektionen inzwischen defensiv
- Falls noch Altzustand sichtbar ist: Hard Refresh oder erneut laden
- Bei
http://ist die Warnung korrekt - Fuer echte Nutzung auf HTTPS wechseln
AUTH_SECRETlang und zufaellig waehlen- Keine Produktivdaten mit
COOKIE_SECURE=false - SMTP-Credentials nicht committen
Siehe LICENSE.