Asystent treningowy w aplikacji (PWA)
Do szyfrowanej aplikacji notatek dołożyliśmy pełnoprawnego asystenta treningowego — jako drugą zakładkę obok notatek. Zapisujesz wagę i widzisz jej trend, ładujesz blokowy plan treningowy, a w trybie „prowadź trening" apka prowadzi Cię seria po serii: odlicza przerwy, zapisuje realny czas każdej serii i pauzy, porównuje wykonanie z założeniami. Cały ciężar analityczny — tonaż na partię, procent realizacji vs plan — liczy się z danych, które i tak masz. Kluczowy trik architektoniczny: wszystkie dane treningowe leżą w tym samym zaszyfrowanym E2E magazynie co notatki, więc szyfrowanie, sync, offline i wykrywanie konfliktów dostajemy za darmo — bez dokładania ani linijki do backendu.
Schemat działania — krok po kroku
Waga i trend
Zapisujesz wagę (kg plus opcjonalne parametry), a aplikacja rysuje wykres trendu w czasie.
Plan blokowy
Ładujesz plan z periodyzacją blokową (bloki 3–4 tygodni z deloadem) i podwójną progresją.
Start sesji
„Rozpocznij trening" wybiera dzisiejszą sesję z planu; rozgrzewkę kończysz ręcznie.
Seria po serii
Apka podaje zadane serie; po każdej wpisujesz realny ciężar i powtórzenia (RPE opcjonalnie).
Timery przerw
Auto-odliczanie przerwy z dźwiękiem i wibracją na telefonie; realny czas zapisywany osobno.
Sterowanie w trakcie
Pomiń serię lub ćwiczenie, „przerwa techniczna" liczona osobno, „zakończ wcześniej".
Podsumowanie
Czas, suma przerw, serie i tonaż na partię mięśniową oraz procent realizacji względem planu.
Co to daje
Dane treningowe też E2E
Waga, plan i historia szyfrowane end-to-end tym samym mechanizmem co notatki.
Zero zmian w backendzie
Cała historia w jednym zaszyfrowanym blobie (zarezerwowana „notatka") — mniej kodu, mniej ryzyka.
Realne czasy, nie założone
Zapisujemy faktyczny czas serii, przerw i pauz — analiza opiera się na tym, co było, nie co miało być.
Pełne działanie offline
Sesja żyje w pamięci z checkpointem po każdej serii — utrata zasięgu nie kasuje treningu.
Progresja mierzalna
Podwójna progresja z kotwicą RPE i periodyzacją blokową — wzrost zamiast przypadkowości.
Analiza z zachowaniem prywatności
Jawny plik eksportujesz świadomą akcją; klucz i fraza nigdy nie opuszczają Twoich urządzeń.
Szczegóły
Jeden zaszyfrowany magazyn na wszystko
Waga, plan i cała historia treningów leżą w jednym pliku szyfrowanym E2E — technicznie „zarezerwowanej notatce". Dzięki temu bez dotykania backendu dziedziczymy szyfrowanie AES-256-GCM, wykrywanie konfliktów, tryb offline i synchronizację. Backend pozostaje „głupi" i nietknięty, a cała nowa logika żyje w kliencie — co minimalizuje powierzchnię ataku.
Tryb „prowadź trening" jak maszyna stanów
Start → rozgrzewka (kończona ręcznie) → ćwiczenie → seria (realny czas) → korekta faktycznych wartości → przerwa z timerem → kolejna seria. W trakcie: pomiń serię, pomiń ćwiczenie, przerwa techniczna liczona osobno i nieodwracalne „zakończ wcześniej". Każdy czas — serii, przerwy, pauzy — zapisywany niezależnie, żeby dało się później zweryfikować realny przebieg, a nie tylko założenia.
Analiza realizacja vs plan, prywatnie
W każdej serii trzymamy obok siebie wartości zadane i faktyczne — to sól analizy. Podsumowanie liczy tonaż na partię mięśniową i procent realizacji względem planu. Pętla ulepszania planu jest ręczna i zgodna z E2E: eksportujesz jawny plik (JSON plus czytelny MD) świadomą akcją, dostajesz propozycję zmian, a po akceptacji importujesz nowy plan. Klucz i fraza nigdy nie opuszczają Twoich urządzeń.
Dla zainteresowanych — jak to działa „pod maską". Cała funkcja treningowa to moduły ES w kliencie (bez procesu build), a dane to jeden wersjonowany obiekt JSON szyfrowany tym samym pipeline co notatki. Backend PHP nie jest w ogóle ruszany.
Model danych
Jeden obiekt JSON wersjonowany polem schema: ustawienia, pomiary wagi (kg plus luźne parametry opcjonalne), plan (bloki, dni, ćwiczenia z partiami i RPE) oraz historia treningów. W każdej serii zapis prescribed vs actual plus niezależne znaczniki czasu początku/końca serii, przerwy i pauzy techniczne — pełny, weryfikowalny ślad sesji.
Offline i odporność sesji
Aktywny trening trzyma checkpoint w localStorage po każdej serii, więc zamknięcie okna lub utrata zasięgu nie kasuje postępu. Na końcu sesja dopisuje się do historii (append-only), a przy konflikcie łączymy po identyfikatorze sesji (unia), nie ślepym nadpisaniem — zapisy przy braku sieci są kolejkowane i ponawiane jak autozapis notatek.
Mobile-first UX
W trakcie serii minimalny interfejs: duży zegar i jeden główny przycisk, a akcje ryzykowne (pomiń, zakończ) schowane, żeby nie kliknąć przez przypadek. Timer przerwy widoczny na całym ekranie, dźwięk i wibracja na koniec odpoczynku, pola 16 px bez auto-zoomu iOS oraz obsługa safe-area pod notcha.