Courtside
Eigenes Projekt · 2026Personal project · 2026

Courtside Clipboard

Eine Coaching-App für mein Basketball-Jugendteam, von der Idee bis zum Live-Betrieb: Taktikboard, Trainingsplanung, Spiele und Statistiken, Import der offiziellen Matchblätter und ein Live-Modus fürs Handy an der Seitenlinie.A coaching app for my youth basketball team, from the first idea to running it live: tactics board, practice planning, games and statistics, import of the official scoresheets and a live mode for the phone on the bench.

Projekt vonA project by Alberto Hamolsky Hilvert · Trainer U16 und ICT Professional SIZU16 coach and ICT Professional SIZ

Courtside: Startseite Today mit nächstem Spiel, Training und letztem Resultat Live-Modus auf dem Handy

Das ProblemThe problem

Als Trainer eines U16-Teams war alles verstreut: Spielzüge auf Papier, Matchblätter als PDF, Trainingspläne im Kopf, Infos für Eltern im Gruppenchat.As the coach of a U16 team, everything was scattered: plays on paper, scoresheets as PDFs, practice plans in my head, information for parents in the group chat.

Ein Ort für allesOne place for everything

Spielzüge, Trainings, Spiele und Spieler in einer App, auf Laptop und Handy.Plays, practices, games and players in one app, on laptop and phone.

Weniger HandarbeitLess manual work

Matchblätter und Spielplan werden importiert statt abgetippt, auch automatisch per E-Mail.Scoresheets and the league schedule are imported instead of typed in, even automatically by e-mail.

Daten von Minderjährigen schützenProtect minors' data

Eltern sehen Termine und Resultate, aber nie Namen oder Notizen. Nur Trainer mit Login sehen ihr Team.Parents see dates and results, never names or notes. Only logged-in coaches see their own team.

Was die App kannWhat the app does

Die Bilder stammen aus der Demo mit einem erfundenen Team.The pictures come from the demo with a made-up team.

Taktikboard
TaktikTactics

Taktikboard und PlaybooksTactics board and playbooks

  • Spielzüge zeichnen: Laufwege, Pässe, Dribblings, Blöcke, in mehreren Schritten animiertDraw plays: cuts, passes, dribbles, screens, animated over several steps
  • Bibliothek mit über 700 Spielzügen; neue Playbooks direkt aus PDF (Diagramme werden aus den Vektoren gelesen, Duplikate übersprungen)Library of 700+ plays; new playbooks straight from PDF (diagrams read from the vector drawings, duplicates skipped)
  • Spielzüge als Bild oder Link mit dem Team teilenShare plays with the team as an image or a link
Live-Modus
Live

Live-Modus an der SeitenlinieLive mode on the bench

  • Zwei Taps pro Aktion: Spieler, dann Wurf, Rebound, Foul …Two taps per play: player, then shot, rebound, foul …
  • Uhr, Viertel, Teamfouls, Wechsel, Minuten und Plus/Minus automatischClock, quarters, team fouls, subs, minutes and plus/minus counted automatically
  • Funktioniert ohne Netz in der Halle und schickt alles, sobald wieder Verbindung da istWorks without signal in the gym and sends everything once the connection is back
Trainingsplaner
TrainingPractice

Trainingsplaner mit ÜbungsbibliothekPractice planner with drill library

  • Trainings aus Übungen und Spielzügen zusammenstellen, per Drag and Drop, mit ZeitbalkenBuild practices from drills and plays with drag and drop and a time bar
  • Trainingspläne aus PDF importieren, als PDF exportierenImport practice plans from PDF, export them as PDF
  • KI-Vorschläge (Workers AI) passend zu den Schwächen aus den letzten SpielenAI suggestions (Workers AI) based on the weaknesses from recent games
Spielplan und Liga
SpieleGames

Spielplan, Liga und GegnerSchedule, league and opponents

  • Offizieller Spielplan als Excel-Import: Tabelle, Saisonverlauf, KalenderdateiOfficial schedule imported from Excel: league table, season path, calendar file
  • Matchblatt-PDFs werden gelesen: Punkte, Fouls, Viertel, Startfünf, auch per E-MailScoresheet PDFs are read: points, fouls, quarters, starting five, also via e-mail
  • Scouting-Seite pro GegnerA scouting page per opponent
Statistiken
TeamTeam

Statistiken, Teamseite, mehrere TrainerStatistics, team page, several coaches

  • Saisonstatistik pro Spieler und Punkte pro ViertelSeason stats per player and points per quarter
  • Teamseite für Spieler und Eltern: Termine, Resultate, Tabelle, ausgewählte Spielzüge, nur Nummern, keine NamenTeam page for players and parents: dates, results, table, chosen plays, numbers only, no names
  • Mehrere Trainer mit eigenem Login; jeder sieht nur seine TeamsSeveral coaches with their own login; each sees only their own teams

Technik und ArchitekturTechnology and architecture

Serverlos auf Cloudflare: kein eigener Server zu warten, eine einzige Worker-Anwendung liefert App, API, E-Mail-Import und nächtliche Jobs.Serverless on Cloudflare: no server to maintain. One Worker serves the app, the API, the e-mail import and the nightly jobs.

Cloudflare WorkersD1 (SQLite)R2 Object StorageWorkers AIEmail Routing & ServiceCron TriggersCustom Domains & DNSGitHub + CI/CD (Workers Builds)Test- & Live-UmgebungJavaScript (ohne Framework)PWA / Service WorkerPDF-ParsingREST-API

Sicherheit und DatenschutzSecurity and privacy

Es geht um Daten von Jugendlichen. Darum wurde Sicherheit nicht angehängt, sondern mitgeplant.This is data about teenagers, so security was planned in from the start, not added at the end.

Login

  • E-Mail und 6-stelliger Code statt PasswörterE-mail and a 6-digit code instead of passwords
  • Codes und Sessions nur als gesalzene Hashes gespeichertCodes and sessions stored only as salted hashes
  • Session-Cookie HttpOnly, Secure, SameSite=StrictSession cookie HttpOnly, Secure, SameSite=Strict
  • Max. 5 Versuche, Rate-Limits, keine Auskunft, ob eine Adresse existiertMax. 5 tries, rate limits, no hint whether an address exists

RechtePermissions

  • Serverseitig geprüft: Trainer sehen nur ihre TeamsChecked on the server: coaches only see their own teams
  • Admin verwaltet Trainer, kann sie sofort sperrenAdmin manages coaches and can switch them off instantly
  • Aktivitätslog 90 Tage, ohne SpielernamenActivity log for 90 days, without player names
  • Schutz gegen fremde Seiten (CSRF), Sicherheits-HeaderProtection against cross-site requests (CSRF), security headers

DatenData

  • Öffentliche Seiten zeigen nur Nummern, nie NamenPublic pages show numbers only, never names
  • Testversion nur mit anonymisierten DatenTest version only with anonymised data
  • Nächtliches Backup, 30 Tage aufbewahrtNightly backup, kept for 30 days
  • Keine Geheimnisse im Code; Schlüssel nur in CloudflareNo secrets in the code; keys live only in Cloudflare

Wie ich gearbeitet habeHow I worked

Wie ein kleines IT-Projekt: vom eigenen Bedarf über viele kleine Versionen bis zum stabilen Betrieb.Like a small IT project: from my own needs, through many small releases, to stable operation.

50+dokumentierte Versionendocumented releases
2Umgebungen: Test und Liveenvironments: test and live
32automatische Sicherheitstests für den Loginautomated security tests for the login
0Server zu wartenservers to maintain
  1. Anforderungen aus der Praxis:Requirements from real use: was ich als Trainer jede Woche brauche, priorisiert nach Nutzen.what I need as a coach every week, prioritised by value.
  2. Kleine Schritte:Small steps: jede Änderung als eigene Version mit Changelog, getestet vor dem Ausliefern.every change as its own release with a changelog, tested before it ships.
  3. Test vor Live:Test before live: neue Funktionen laufen zuerst auf einer separaten Testversion mit eigener Datenbank, erst dann live. Rollback jederzeit möglich.new features run on a separate test version with its own database first, then go live. Rollback is always possible.
  4. Versioniert und dokumentiert:Versioned and documented: Code auf GitHub, automatische Auslieferung über Cloudflare, Betriebsnotizen und Übergabedokumentation.code on GitHub, automatic deployment through Cloudflare, operating notes and handover documentation.
  5. Im Betrieb:In operation: die App läuft für mein Team, mit Logins, E-Mail-Import, Teamseite für Eltern und nächtlichen Backups.the app runs for my team, with logins, e-mail import, a team page for parents and nightly backups.
Transparent:To be transparent: Idee, Anforderungen, Gestaltung, Tests, Einrichtung und Betrieb (Cloudflare, Domain, E-Mail, GitHub) habe ich verantwortet. Den Programmcode habe ich zusammen mit einem KI-Assistenten (Claude von Anthropic) geschrieben: ich habe die Aufgaben beschrieben, die Ergebnisse geprüft, getestet und entschieden, was live geht.I owned the idea, requirements, design, testing, setup and operation (Cloudflare, domain, e-mail, GitHub). I wrote the code together with an AI assistant (Claude by Anthropic): I described the tasks, reviewed and tested the results, and decided what went live.

Selbst ausprobierenTry it yourself

Die Demo läuft komplett in deinem Browser, mit einem erfundenen Team. Nichts wird gespeichert oder verschickt.The demo runs entirely in your browser, with a made-up team. Nothing is saved online or sent anywhere.

Demo öffnenOpen the demo →