GymTeam
Vereinsverwaltung: eine Plattform, viele Vereine
Die Mitarbeiterseite des Fitofan-Ökosystems: Sportvereine verwalten Mitglieder, Kurse, Check-in, Fortschritt und Zahlungen, jeder Verein in seinem eigenen privaten Bereich.
- Rolle
- Senior Full-Stack Engineer
- Zeitraum
- 2025 – 2026


Kontext
GymTeam ist der Arbeitsplatz von Vereinsinhabern, Managern und Trainern; Athleten und Eltern nutzen Fitofan, das sie auch anmeldet. Ich habe es aus der Fitofan-Codebasis in ein eigenes Produkt herausgelöst und den Großteil davon geliefert.
Die Herausforderung
Viele unabhängige Vereine aus einer Anwendung bedienen, mit strikter Datenisolation, Zahlungen in jedem Markt annehmen, in dem die Vereine tätig sind, und Vereinsdaten in Echtzeit mit der Athletenplattform konsistent halten.
Über den gesamten Stack gebaut
- Next.js-16-Admin auf Feature-Sliced Design: über 80 Seiten, 11 Locales
- NestJS-Backend: ein Modul pro Entität mit Use Cases, Repositories und validierten DTOs; 95 Migrationen
- Tenant-Isolation: ein Guard löst jeden Verein per ID oder Slug auf und prüft die Mitgliedschaft, bevor ein Handler läuft
- Mitglieder, Einladungen und Probetrainings, Wochenpläne mit Wartelisten, Live-Check-in, Anwesenheit, Lehrplan und Gürtelgrade, Haftungserklärungen, Hausaufgaben, Bewertungen
- Zahlungen: Finix, Stripe, PayPal, Square, Monopay, LiqPay, GCash und Mercado Pago plus Barzahlung und Schulden, ein täglicher Abrechnungs-Scheduler, Zugangsdaten verschlüsselt mit AES-256-GCM
- RabbitMQ-Vertrag gemeinsam mit Fitofan: 29 Routing-Keys, ein typisierter Envelope mit Correlation-IDs, dokumentierte Topologie
- QR-Login über WebSockets, ein Socket.IO-Session-Gateway, S3-kompatibler Medienspeicher
- Umsatz-, Anwesenheits- und Trainer-Analysen mit CSV- und PDF-Export
- Dieselbe Delivery-Pipeline wie Fitofan: Type-Check- und Jest-Gate, Docker-Image, SSH-Deploy
Technische Schwerpunkte
- Tenant-Scope auf dem Server erzwungen, nie dem Client vertraut
- Webhooks idempotent nach Anbieter und Event-ID; Payment Intents tragen Idempotenzschlüssel
- Eine eigene ESLint-Regel mit eigenen Tests hält die Feature-Sliced-Layer ehrlich
- Registrierung und Vereinsanlage kommen aus Paketen, die beide Produkte teilen
Was es ermöglicht
Jeder Verein bekommt ein Produkt, das wie für ihn gebaut wirkt, während das Engineering eine Codebasis und ein Deployment bleibt.