# TalkTime Selbst hostbare, DSGVO-freundliche Kommunikations- und Verwaltungsplattform für Sportvereine — Ersatz für WhatsApp-Gruppen. Matrix/Synapse läuft im Hintergrund als Messaging-Backend; der Verein verwaltet stattdessen Abteilungen, Mannschaften, Mitglieder und Rollen. Kommunikationsgruppen entstehen automatisch aus dieser Struktur. ## Was das Portal kann **Für Vereine (CLUB_ADMIN, Trainer, Mitglieder):** - **Login & Sessions** — eigenes E-Mail/Passwort-Login mit JWT, kein Drittanbieter nötig - **Verein anlegen** — eigene Organisation (Tenant) samt Vereinsadministrator; ein Nutzer kann Mitglied in mehreren Vereinen sein und zwischen ihnen wechseln - **Mitgliederverwaltung** — Liste, Status setzen (aktiv/gesperrt/ausgetreten), hartes Löschen; Statusänderung sperrt sofort den API-Zugriff, nicht nur das Matrix-Konto - **Abteilungen & Mannschaften** — Abteilungen (z.B. Fußball, Handball) mit Mannschaften pro Saison darunter - **Rollen & Berechtigungen** — CLUB_ADMIN, Trainer, Co-Trainer, Betreuer, Mitglied, mit Rechten pro Verein/Mannschaft - **Einladungssystem** — Mitglieder per Link einladen, ganz ohne Telefonnummer (DSGVO-Ziel statt WhatsApp-Kontaktabgleich) - **Audit-Log** — Rollenänderungen, Mitgliederstatus, Einladungen werden pro Verein protokolliert - **Chat** — eigene Oberfläche pro Team-Raum über die Matrix Client-Server API; Nutzer sehen nie ein eigenes Matrix-Passwort (Text-only im MVP, kein Medien-Upload/Push) **Automatisch im Hintergrund (Synapse-Integration):** - Health-Check der Synapse-Instanz - Matrix-User wird bei Einladungsannahme automatisch angelegt - Team-Räume werden automatisch erstellt und mit den passenden Mitgliedern befüllt - Mitgliederstatus-Sync über eine Outbox-Queue mit Retry/Backoff, plus periodische Reconciliation gegen Synapse **Für Plattform-Betreiber (SYSTEM_ADMIN, vereinsübergreifend):** - Plattformweite Admin-Rolle, unabhängig von jeder Vereinsmitgliedschaft (DB-only vergeben, kein UI) - Synapse-Raum-Übersicht über alle Vereine - Media-Cleanup (verwaiste Dateien/Media-Cache manuell aufräumen) - Federation-Status-Ansicht (zeigt, dass/ob mit externen Matrix-Servern föderiert wird — Federation ist standardmäßig deaktiviert) **Geplant, noch nicht gebaut:** automatische Löschfrist für ausgetretene Mitglieder (DSGVO), Nachricht melden im Chat, Reports/Moderation für SYSTEM_ADMIN. Siehe [features/INDEX.md](features/INDEX.md) für den aktuellen Stand aller Features. **Bewusst nicht geplant:** Vereinsbuchhaltung/Beitragsverwaltung, Turnierverwaltung, Trainingsplanung, KI-Assistent, Videokonferenzen, eigene Mobile-App. Details siehe [docs/PRD.md](docs/PRD.md). ## Dokumentation - [docs/PRD.md](docs/PRD.md) — Produktvision, Zielgruppen, Roadmap - [docs/vereinschat/PRD.md](docs/vereinschat/PRD.md) und [docs/vereinschat/architecture.md](docs/vereinschat/architecture.md) — ausführliche PRD + Architektur - [features/INDEX.md](features/INDEX.md) — Feature-Tracking mit Status - [CLAUDE.md](CLAUDE.md) — Tech-Stack, Konventionen, Entwicklungs-Workflow (Skills `/requirements`, `/architecture`, `/frontend`, `/backend`, `/qa`, `/deploy`) ## Lokal starten ```bash cd frontend && npm install && cd .. cd backend && npm install && cd .. ``` 1. PostgreSQL-Datenbank + Rolle anlegen 2. `backend/.env.example` nach `backend/.env` kopieren, Werte setzen (`DATABASE_URL`, `JWT_SECRET`, Synapse-Admin-Token etc.) 3. `cd backend && npm run db:generate && npm run db:migrate` ```bash cd backend && npm run dev # localhost:4000 cd frontend && npm run dev # localhost:5173, proxied /api zum Backend ``` Für eine lokale Synapse-Instanz siehe `synapse/` (`docker-compose.yml`, `install.sh`, `homeserver.yaml.sample`). ## Deployment Produktivbetrieb via `git pull` + `rsync` + `systemd` auf einem selbst verwalteten Linux-Server (kein Vendor-Lock-in) — siehe `/deploy`-Skill (`.claude/skills/deploy/`) und `docs/deployment.md`. ## Lizenz MIT License