Jedno konto = jeden trener
Wszystko należało do pojedynczego konta. Wspólny dostęp sztabu do zawodników, planów, obecności i biblioteki wymagał zmiany modelu własności danych.
Case study · Sport i technologia
Pełne przepisanie platformy dla trenerów koszykówki - z migracją setek tysięcy rekordów, współpracą sztabu, trybem offline i uratowanym edytorem grafik taktycznych.
Klient miał używaną od lat aplikację: bibliotekę ćwiczeń i zagrywek, plany treningowe, kadrę, materiały edukacyjne oraz edytor grafik. Produkt działał, ale technologicznie stanął w miejscu.
Wszystko należało do pojedynczego konta. Wspólny dostęp sztabu do zawodników, planów, obecności i biblioteki wymagał zmiany modelu własności danych.
Około 442 tys. ćwiczeń, 304 tys. grafik taktycznych, ponad 30 tys. zagrywek, 18 tys. playbooków i tysiące planów treningowych na jedno konto - bez możliwości utraty danych.
Kolumny liczbowe zawierały tekst, relacje bywały puste, brakowało slugów, a dokumentacja i typy nie odpowiadały rzeczywistym danym produkcyjnym.
Aplikacja wymagała stałego połączenia, nie instalowała się na telefonie, a zamrożony edytor jQuery/Snap.svg nie obsługiwał dotyku na współczesnych urządzeniach.
Artykuły były surowym HTML-em, a nagrania mieszały pliki MP4 i embedy bez spójnego modelu publikacji.
Przepisaliśmy aplikację dla trenera od podstaw: nowy frontend, API i model współpracy, ale na tych samych, zmigrowanych danych produkcyjnych. To nie był greenfield.
Zaproponowaliśmy model workspace'ów zamiast własności indywidualnej. Wybrany workspace decyduje, gdzie powstają rekordy, jaka biblioteka jest dostępna oraz kto może edytować i usuwać dane. Była to przygotowana wspólnie z klientem decyzja produktowa, nie tylko zadanie techniczne.
Dostarczyliśmy również całą warstwę serwerową: 52 typy treści w Strapi, endpointy zakresowane workspace'em, uprawnienia, zaproszenia, migracje i skrypty naprawcze dla danych legacy.
Format sceny starego edytora był kontraktem dla około 304 tys. istniejących rysunków. Silnika nie można było po prostu wymienić. Otrzymaliśmy zamrożony bundle o wadze 1,3 MB, bez procesu budowania i wsparcia autora.
Nieaktualne API sprawiało, że narzędzia nie rejestrowały ruchu palcem, a pinch-to-zoom zostawiał przypadkowe kreski.
jQuery 1.8.3 i JSZip były ładowane mimo braku realnego użycia.
Rysunki zapisane wyłącznie jako XML nie pojawiały się w planach, miniaturach ani na wydrukach.
Dialogi wychodziły poza layout, kontrolki zasłaniały boisko, a część operacji wymagała myszy.
Wprowadziliśmy kontrolowane łatanie kodu dostawcy: zapisany punkt odniesienia, rejestr każdej poprawki, brak kasowania oryginalnego kodu i czytelne źródła odpowiadające każdej zmianie. Zachowaliśmy zgodność historycznych scen, a obcy silnik stał się bezpiecznie rozwijalną częścią produktu.
Cała komunikacja z API odbywa się po stronie serwera. Przeglądarka nie odpytuje backendu bezpośrednio, a sesja pozostaje w ciasteczku HttpOnly.
Projekt był prowadzony w modelu wspomaganym przez AI od pierwszego dnia. Najważniejsze nie było samo generowanie kodu, lecz rygor sprawiający, że rezultat można bezpiecznie przyjąć do produkcji.
17 plików reguł i 7 opisanych procesów sprawiało, że każdy model oraz narzędzie rozpoczynały pracę z tym samym zestawem wymagań.
40 samodzielnych briefów zawierało zakres, mapę plików, kształt API i reguły najbardziej narażone na złamanie. Wyniki wracały jako zwykłe pull requesty.
Każdy fakt o backendzie potwierdzaliśmy na działającym API. Dokumentacja i typy były hipotezą, dopóki nie potwierdziły ich prawdziwe dane.
Typy, testy i dwa lintery automatycznie decydowały, czy zadanie jest skończone. Blisko 3 800 testów pozwalało poruszać się szybko bez regresji.
Najbardziej ryzykowne obszary offline przeszły 11 udokumentowanych rund przeglądu. Każda znaleziona usterka otrzymała poprawkę i test regresji.
Model workspace'ów, zakres feedbacku, sposób łatania silnika oraz decyzje o tym, czego nie budować, były przygotowane z konsekwencjami i zatwierdzane przez klienta.
Efekt: 266 pull requestów i 576 commitów w 12 miesięcy, równolegle z odtwarzaniem nieudokumentowanego modelu danych i utrzymaniem pełnego pokrycia testami.
75 ekranów działa na produkcji, a staging aktualizuje się automatycznie.
Zmigrowaliśmy bibliotekę, grafiki, playbooki, cykle treningowe i archiwalne materiały bez utraty dorobku użytkowników.
Workspace'y, zaproszenia, role i spójne uprawnienia umożliwiły realną wspólną pracę.
Plany, obecność i edycja treści działają bez sieci, z ochroną przed konfliktem i podwójnym zapisem.
PWA instaluje się na iOS i Androidzie i uruchamia jak aplikacja natywna.
Jest o połowę lżejszy, obsługuje dotyk i offline, zachowując format około 304 tys. rysunków.
Około 3 800 testów oraz 64 scenariusze end-to-end obejmują także utratę sieci i restart przeglądarki.
Każdy z 266 PR-ów przeszedł review i komplet automatycznych bramek jakości.