17 KiB
Projektplan: WM 2026 Tippspiel — Staffbase Custom Plugin
Projekt: WM 2026 Tippspiel Auftraggeber: GEALAN Fenster-Systeme GmbH Erstellt: April 2026 Version: 1.0 Status: Initialisierung
1. Projektziel & Vision
1.1 Zielsetzung
Entwicklung eines interaktiven Tippspiel-Plugins für die FIFA Weltmeisterschaft 2026 (USA/Kanada/Mexiko, 11. Juni – 19. Juli 2026), das nahtlos in die bestehende Staffbase-Mitarbeiter-App von GEALAN integriert wird. Alle Mitarbeitenden können über die gewohnte Staffbase-Oberfläche — auf Mobile und Desktop — ihre Tipps abgeben, Ergebnisse verfolgen und die Rangliste einsehen.
1.2 Kernziele
- Mitarbeiterbindung und -engagement rund um die WM 2026 stärken
- Niedrigschwellige Teilnahme: kein separates Login, keine externe App nötig
- Vollständige Integration in die bestehende Staffbase-Instanz von GEALAN
- Mehrsprachige Unterstützung (Deutsch, Englisch — erweiterbar)
- Skalierbar für zukünftige Turniere (EM, CL etc.)
1.3 Nicht-Ziele (Out of Scope v1.0)
- Echte Geldwetten oder externe Zahlungsabwicklung
- Integration mit externen sozialen Netzwerken
- Eigene mobile App (kein separates iOS/Android-App-Release)
2. Technische Architektur
2.1 Integrationsmodell: Staffbase Custom Plugin
Das Tippspiel wird als Staffbase Custom Plugin realisiert. Custom Plugins sind externe Web-Applikationen, die per iFrame in die Staffbase-Plattform eingebettet werden. Staffbase übernimmt die Authentifizierung der Mitarbeitenden automatisch über JWT-Tokens (RS256), sodass kein separates Benutzerkonto für das Tippspiel benötigt wird.
Vorteile dieses Ansatzes:
- Vollständige technische Freiheit bei Backend, Frontend und Datenbank
- Automatisches Single Sign-On via Staffbase JWT
- Funktioniert auf iOS-App, Android-App und Web-Browser
- Keine Änderungen an der Staffbase-Instanz selbst notwendig
2.2 Architektur-Übersicht
┌─────────────────────────────────────────────┐
│ Staffbase-Plattform (GEALAN) │
│ │
│ ┌──────────────────────────────────────┐ │
│ │ Custom Plugin (iFrame) │ │
│ │ → Tippspiel-Frontend (React) │ │
│ └──────────────┬───────────────────────┘ │
│ │ JWT Token (automatisch) │
└─────────────────│───────────────────────────┘
│ HTTPS
┌────────▼─────────┐
│ Backend API │
│ (Node.js/Express)│
│ + JWT-Validierung│
└────────┬──────────┘
│
┌────────▼──────────┐
│ Datenbank │
│ (PostgreSQL) │
│ Supabase Managed │
└───────────────────┘
│
┌────────▼──────────┐
│ WM-Spielplan API │
│ football-data.org│
└───────────────────┘
2.3 Technologie-Stack
| Schicht | Technologie | Begründung |
|---|---|---|
| Frontend | React + TypeScript | Moderner Standard, große Community, passt zu Staffbase Client SDK |
| Staffbase Integration | @staffbase/plugins-client-sdk | Offizielle Brücke zwischen iFrame und Staffbase-App |
| Backend | Node.js + Express | Passt nahtlos zum Staffbase Node.js SDK |
| Auth / SSO | @staffbase/staffbase-plugin-sdk | JWT-Validierung (RS256/PKCS8) |
| Datenbank | PostgreSQL via Supabase | Managed, DSGVO-konform (EU-Region wählbar), einfaches Setup |
| Hosting | Railway oder Render | HTTPS out-of-the-box, einfaches Deployment, kostengünstig |
| WM-Spielplan | football-data.org API | Kostenfreie WM-Daten inkl. Ergebnisse, Teams, Gruppen |
| Caching | Redis (optional) | Spielplandaten cachen, Rate-Limit-Entlastung |
| CI/CD | GitHub Actions | Automatisiertes Deployment |
2.4 Staffbase SDK — Verfügbare Nutzerdaten via JWT
Bei jedem Aufruf des Plugins stellt Staffbase automatisch folgende Nutzerdaten bereit:
| Feld | Beschreibung | Verwendung im Tippspiel |
|---|---|---|
userId |
Eindeutige Staffbase-User-ID | Primärschlüssel für Tipps & Rangliste |
fullName |
Vollständiger Name | Anzeigename in der Rangliste |
locale |
Spracheinstellung (z.B. de_DE) |
Automatische Sprachumschaltung |
role |
Staffbase-Rolle (admin, reader…) | Admin-Bereich nur für Admins sichtbar |
branchId |
Instanz-/Bereichs-ID | Für standortbezogene Auswertungen |
3. Funktionsumfang (Features)
3.1 Kernfunktionen (MVP — Pflicht für v1.0)
F1 — Benutzer & Authentifizierung
- Automatischer Login via Staffbase SSO (JWT) — kein separates Konto
- Benutzerprofil mit Name und Gesamtpunkten
- Rollenbasierter Zugriff: Normaler Nutzer vs. Admin
F2 — WM-Spielplan
- Anzeige aller 104 WM-Spiele (Gruppenphase + KO-Runde)
- Automatische Synchronisation mit football-data.org API
- Anzeige von Datum, Uhrzeit (lokalisiert), Stadion, Teams, aktueller Ergebnisstatus
F3 — Tipp-Eingabe
- Tipp abgeben: Ergebnis (Heimtore : Auswärtstore) pro Spiel
- Tipp nur möglich bis Anpfiff (Deadline-Schutz)
- Tipp-Änderung bis zur Deadline erlaubt
- Visuelle Bestätigung bei gespeichertem Tipp
F4 — Punkte-System
- Ergebnis exakt richtig: 3 Punkte
- Tendenz richtig (Sieg/Remis/Niederlage): 1 Punkt
- Falsch: 0 Punkte
- Bonus-Punkte für KO-Runde konfigurierbar (z.B. ×2 ab Halbfinale)
- Automatische Berechnung nach Ergebnis-Eintrag durch Admin
F5 — Rangliste
- Live-Gesamtrangliste aller Teilnehmenden
- Anzeige: Platz, Name, Punkte, Tipp-Quote
- Filterbar nach Abteilung oder Standort (via Staffbase-Gruppen)
- Eigene Position stets sichtbar (auch wenn außerhalb der Top 10)
F6 — Admin-Bereich
- Spielergebnisse manuell eintragen / korrigieren
- Punkte automatisch neu berechnen nach Eintrag
- Übersicht aller Tipps pro Spiel
- Teilnahme-Statistiken (Anzahl Tipps, aktive Nutzer)
3.2 Erweiterungen (Nice-to-have — v1.1 oder später)
| Feature | Beschreibung | Aufwand |
|---|---|---|
| Push-Benachrichtigungen | Ergebnisse-Update via Staffbase News API | Mittel |
| Gruppenphase-Tipper | Tipp auf Gruppensieger/-zweiten | Mittel |
| Turniersieger-Tipp | Einmaliger Tipp auf WM-Sieger (×5 Punkte) | Klein |
| Mini-Ligen | Interne Teams (z.B. nach Abteilung) | Groß |
| Kommentar-Funktion | Tipps kommentieren | Klein |
| Tipp-Analyse | Auswertung: beliebteste Tipps, Überraschungen | Mittel |
| Automatische Ergebnis-Synchronisation | Polling football-data.org, kein manuelles Eintragen | Mittel |
4. Datenbankschema
4.1 Kerntabellen
-- Nutzer (befüllt automatisch via JWT bei erstem Login)
CREATE TABLE users (
id VARCHAR(64) PRIMARY KEY, -- Staffbase userId
full_name VARCHAR(255) NOT NULL,
locale VARCHAR(10) DEFAULT 'de_DE',
role VARCHAR(20) DEFAULT 'reader',
branch_id VARCHAR(64),
created_at TIMESTAMPTZ DEFAULT NOW(),
last_seen_at TIMESTAMPTZ DEFAULT NOW()
);
-- WM-Spiele (synchronisiert via football-data.org)
CREATE TABLE matches (
id SERIAL PRIMARY KEY,
external_id VARCHAR(32) UNIQUE NOT NULL, -- ID aus football-data.org
stage VARCHAR(50) NOT NULL, -- 'GROUP_STAGE', 'ROUND_OF_16', ...
group_name VARCHAR(10), -- 'A', 'B', ... (NULL in KO-Runde)
home_team VARCHAR(100) NOT NULL,
away_team VARCHAR(100) NOT NULL,
kickoff_at TIMESTAMPTZ NOT NULL,
home_score SMALLINT, -- NULL bis Abpfiff
away_score SMALLINT,
status VARCHAR(20) DEFAULT 'SCHEDULED' -- SCHEDULED, IN_PLAY, FINISHED
);
-- Tipps
CREATE TABLE predictions (
id SERIAL PRIMARY KEY,
user_id VARCHAR(64) REFERENCES users(id),
match_id INTEGER REFERENCES matches(id),
predicted_home SMALLINT NOT NULL,
predicted_away SMALLINT NOT NULL,
points_earned SMALLINT, -- NULL bis Spiel ausgewertet
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW(),
UNIQUE (user_id, match_id)
);
-- Rangliste (materialized view oder separate Tabelle für Performance)
CREATE MATERIALIZED VIEW leaderboard AS
SELECT
u.id AS user_id,
u.full_name,
u.branch_id,
COALESCE(SUM(p.points_earned), 0) AS total_points,
COUNT(p.id) AS total_predictions,
COUNT(CASE WHEN p.points_earned = 3 THEN 1 END) AS exact_hits,
RANK() OVER (ORDER BY COALESCE(SUM(p.points_earned), 0) DESC) AS rank
FROM users u
LEFT JOIN predictions p ON p.user_id = u.id
GROUP BY u.id, u.full_name, u.branch_id;
5. API-Design (Backend)
5.1 Endpunkte
| Method | Endpunkt | Beschreibung | Auth |
|---|---|---|---|
GET |
/api/matches |
Alle Spiele mit Status | JWT |
GET |
/api/matches/:id |
Einzelnes Spiel | JWT |
GET |
/api/predictions/me |
Eigene Tipps | JWT |
POST |
/api/predictions |
Tipp abgeben | JWT |
PUT |
/api/predictions/:id |
Tipp ändern (vor Deadline) | JWT |
GET |
/api/leaderboard |
Gesamtrangliste | JWT |
GET |
/api/leaderboard/me |
Eigene Position | JWT |
PUT |
/api/admin/matches/:id/result |
Ergebnis eintragen | JWT + Admin |
POST |
/api/admin/recalculate |
Punkte neu berechnen | JWT + Admin |
GET |
/api/admin/stats |
Teilnahmestatistiken | JWT + Admin |
5.2 Authentifizierung
Jeder Request vom Frontend sendet den Staffbase JWT im Header:
Authorization: Bearer <staffbase-jwt-token>
Das Backend validiert den Token mit dem @staffbase/staffbase-plugin-sdk (RS256, Public Key aus Staffbase Studio). Bei gültigem Token werden Nutzer-ID, Name, Rolle und Locale aus dem Token extrahiert und der Nutzer automatisch in der users-Tabelle angelegt (upsert).
6. Projektphasen & Zeitplan
Gesamtlaufzeit: 10 Wochen (April — Mitte Juni 2026)
Phase 1 — Setup & Fundament (Woche 1–2)
| Aufgabe | Verantwortlich | Aufwand |
|---|---|---|
| Staffbase Plugin registrieren (Plugin-ID + Public Key) | Admin | 0,5 Tage |
Node.js Projekt-Skeleton generieren (create-staffbase-plugin-nodejs) |
Entwicklung | 0,5 Tage |
| Git-Repository anlegen, CI/CD konfigurieren (GitHub Actions) | Entwicklung | 1 Tag |
| Hosting-Umgebung aufsetzen (Railway/Render) | Entwicklung | 0,5 Tage |
| Supabase-Projekt anlegen, Datenbankschema deployen | Entwicklung | 1 Tag |
| JWT-Authentifizierung implementieren und testen | Entwicklung | 1 Tag |
| football-data.org API-Key beantragen und testen | Entwicklung | 0,5 Tage |
Meilenstein: Authentifizierter API-Call von Staffbase-Plugin zu Backend funktioniert.
Phase 2 — Kern-Backend (Woche 3–4)
| Aufgabe | Verantwortlich | Aufwand |
|---|---|---|
| Spielplan-Synchronisation (football-data.org → DB) | Entwicklung | 2 Tage |
| REST API vollständig implementieren | Entwicklung | 3 Tage |
| Tipp-Logik mit Deadline-Prüfung | Entwicklung | 1 Tag |
| Punkte-Berechnungslogik | Entwicklung | 1 Tag |
| Ranglisten-Abfrage (inkl. Materialized View) | Entwicklung | 1 Tag |
| Unit-Tests für Kernlogik | Entwicklung | 1 Tag |
Meilenstein: Vollständige Backend-API testbar via Postman/API-Client.
Phase 3 — Frontend (Woche 5–7)
| Aufgabe | Verantwortlich | Aufwand |
|---|---|---|
| React-Projekt aufsetzen, Staffbase Client SDK integrieren | Entwicklung | 1 Tag |
| Spielplan-Übersicht (nach Datum / Gruppe filtern) | Entwicklung | 2 Tage |
| Tipp-Eingabeformular mit Validierung | Entwicklung | 2 Tage |
| Rangliste mit Pagination | Entwicklung | 1,5 Tage |
| Admin-Bereich (Ergebnis eintragen, Statistiken) | Entwicklung | 2 Tage |
| Responsive Design (Mobile-first für Staffbase App) | Entwicklung | 1,5 Tage |
| Mehrsprachigkeit DE/EN | Entwicklung | 1 Tag |
Meilenstein: Vollständige App funktionsfähig im Browser (ohne Staffbase-Integration).
Phase 4 — Staffbase-Integration & Test (Woche 8–9)
| Aufgabe | Verantwortlich | Aufwand |
|---|---|---|
| Plugin-URL in Staffbase Studio hinterlegen | Admin | 0,5 Tage |
| iFrame-Test in Staffbase Web und Mobile App | Entwicklung | 1 Tag |
| End-to-End-Tests mit echten Staffbase-Nutzern | Entwicklung + QA | 2 Tage |
| Bugfixing aus Testphase | Entwicklung | 2 Tage |
| Performance-Test (Last: viele gleichzeitige Tipps) | Entwicklung | 1 Tag |
| DSGVO-Check: keine unautorisierten Daten gespeichert | PM/Legal | 1 Tag |
Meilenstein: Plugin läuft stabil in der Staffbase-Staging-Umgebung.
Phase 5 — Launch & Betrieb (Woche 10 + laufend)
| Aufgabe | Verantwortlich | Aufwand |
|---|---|---|
| Go-Live in Staffbase Produktivumgebung | Admin + Entwicklung | 1 Tag |
| Kommunikation an Mitarbeitende (via Staffbase News Channel) | Kommunikation | 0,5 Tage |
| Monitoring & Alerting einrichten (Uptime, Fehler-Logs) | Entwicklung | 1 Tag |
| WM-Start-Phase begleiten (Hotfixes, Support) | Entwicklung | laufend |
| Tägliche Ergebnispflege (manuell oder automatisch) | Admin | laufend |
7. Ressourcen & Rollen
| Rolle | Verantwortlichkeiten | Zeitaufwand |
|---|---|---|
| Projektleiter/PM | Steuerung, Stakeholder-Kommunikation, Abnahme | ~20% (verteilt) |
| Fullstack-Entwickler (1–2) | Backend, Frontend, Deployment, Tests | 100% über 8 Wochen |
| Staffbase-Admin | Plugin-Registrierung, Studio-Konfiguration, Rollout | ~5% |
| Kommunikation | Launch-Kommunikation, Mitarbeitende informieren | ~5% |
| QA (optional) | Testen, Bugmeldungen | ~20% in Phase 4 |
8. Infrastruktur & Kosten
8.1 Hosting (monatlich, geschätzt)
| Dienst | Zweck | Kosten/Monat |
|---|---|---|
| Railway / Render | Backend-Hosting (Node.js) | ~5–15 € |
| Supabase | PostgreSQL (Free Tier reicht für ~500 User) | 0 € (Free) / 25 € (Pro) |
| football-data.org | WM-Spielplan API | 0 € (Free Tier) |
| GitHub | Code-Repository + CI/CD | 0 € (Free) |
| Gesamt | ~5–40 € / Monat |
8.2 Einmalige Kosten (Entwicklung)
Gemäß separater Aufwandsschätzung (siehe Projektphasen). Bei internem Entwicklerteam: reine Zeitkosten. Bei externer Vergabe: ca. 15.000–25.000 € (je nach Erfahrungsniveau und Scope).
9. Risiken & Maßnahmen
| Risiko | Wahrscheinlichkeit | Auswirkung | Maßnahme |
|---|---|---|---|
| Staffbase JWT-Integration schlägt fehl | Niedrig | Hoch | Frühzeitig in Phase 1 testen, Staffbase Support einbinden |
| football-data.org API unzuverlässig | Mittel | Mittel | Spielplandaten lokal cachen, manuelle Eingabe als Fallback |
| Zu viele gleichzeitige Nutzer (WM-Start) | Mittel | Mittel | Load-Test vor Go-Live, Auto-Scaling auf Hosting-Plattform |
| DSGVO: unbeabsichtigte Datenspeicherung | Niedrig | Hoch | Nur JWT-Daten speichern, kein Tracking, Datenschutzprüfung |
| Entwicklungsrückstand (Urlaube, Krankheit) | Mittel | Mittel | Puffer von 1 Woche eingeplant, MVP-Scope reduzierbar |
| WM-Spielplan ändert sich (Absagen, Verlegungen) | Niedrig | Niedrig | Automatische API-Synchronisation |
10. Definition of Done (DoD)
Ein Feature gilt als fertig, wenn:
- Funktionalität implementiert und manuell getestet
- Unit-Tests vorhanden (Backend-Logik)
- Responsive auf Mobile und Desktop
- In Staffbase-iFrame getestet (Web + App)
- Kein Fehler in den Browser-Konsolen-Logs
- Code reviewed und in
main-Branch gemergt
Das Gesamtprojekt gilt als abgenommen, wenn:
- Alle MVP-Features (F1–F6) funktionsfähig sind
- Mind. 20 Test-Nutzer einen Tipp abgegeben haben (Pilottest)
- Performance-Test bestanden (< 2 Sekunden Ladezeit)
- DSGVO-Prüfung abgeschlossen und dokumentiert
- Go-Live in Produktivumgebung erfolgt
11. Nächste Schritte (Sofortmaßnahmen)
- Plugin bei Staffbase registrieren → Staffbase Studio → Einstellungen → Plugins → neues Plugin anlegen → Plugin-ID und Public Key notieren
- Entwicklungsumgebung aufsetzen →
npx create-staffbase-plugin-nodejs@latest wm2026-tippspiel - football-data.org API-Key beantragen → https://www.football-data.org/client/register
- Supabase-Projekt anlegen → https://supabase.com (EU-Region Frankfurt)
- Kickoff-Meeting mit allen Beteiligten (PM, Entwicklung, Staffbase-Admin, Kommunikation)
Anhang A: Nützliche Links & Ressourcen
| Ressource | URL |
|---|---|
| Staffbase Developer Portal | https://developers.staffbase.com |
| Staffbase Custom Plugin Übersicht | https://developers.staffbase.com/concepts/customplugin-overview/ |
| Staffbase Plugins Client SDK | https://github.com/Staffbase/plugins-client-sdk |
| Staffbase Node.js SDK | https://github.com/Staffbase/plugins-sdk-nodejs |
| Staffbase Plugin Skeleton Generator | https://github.com/Staffbase/create-staffbase-plugin-nodejs |
| football-data.org API | https://www.football-data.org |
| Supabase | https://supabase.com |
| Railway Hosting | https://railway.app |
| Render Hosting | https://render.com |
| WM 2026 Spielplan (FIFA) | https://www.fifa.com/worldcup |