Web Routes (SSR)
Strony i fragmenty HTMX panelu Manager-Content. Serwer Go renderuje HTML z użyciem szablonów i Alpine.js. Autoryzacja oparta na cookie sesji.
Strony
GET /login
Strona logowania. Formularz z dwoma trybami:
- Kod z aplikacji — wpisanie 8-znakowego kodu alfanumerycznego (wielkie litery + cyfry) wygenerowanego w aplikacji mobilnej
- E-mail — wpisanie adresu e-mail, następnie kodu weryfikacyjnego
Po udanym logowaniu przekierowanie na /dashboard.
GET /dashboard
Panel główny rodzica. Zawiera podsumowanie aktywności dzieci:
- Statystyki (XP, poziom, ukończone zadania, seria dni)
- Ostatnia aktywność
- Lista połączonych dzieci z możliwością przełączania
GET /content
Lista treści edukacyjnych (zadań). Tabela z paginacją offset (?page=1&per_page=20). Kolumny: tytuł, typ, świat, lokacja, trudność, status. Filtrowanie i wyszukiwanie.
GET /content/new
Formularz tworzenia nowego zadania. Pola: tytuł, opis, typ, trudność, nagroda XP, bloki treści (dodawane dynamicznie przez Alpine.js).
GET /content/:id
Widok szczegółów / edycji zadania. Formularz z wczytanymi danymi, podgląd bloków treści, historia zmian.
GET /worlds
Lista światów. Tabela z paginacją offset. Kolumny: nazwa, liczba lokacji, liczba zadań, status.
GET /worlds/new
Formularz tworzenia nowego świata. Pola: nazwa, opis, kolor, ikona, pozycja na globusie.
GET /worlds/:id
Szczegóły świata z listą lokacji. Edycja danych świata, dodawanie/usuwanie lokacji, zmiana kolejności.
GET /todo
Lista zadań to-do przypisanych do dziecka (widok rodzica). Rodzic widzi cele dziecka i może dodawać sugestie.
GET /settings
Ustawienia konta rodzica:
- Zarządzanie połączonymi dziećmi
- Preferencje powiadomień
- Język panelu
- Wylogowanie
Fragmenty HTMX (Partials)
Fragmenty zwracają wyłącznie HTML — bez pełnego layoutu strony. Używane do dynamicznego aktualizowania zawartości bez przeładowania.
GET /partials/task-list
Fragment tabeli zadań z paginacją.
Query params:
| Param | Typ | Domyślnie | Opis |
|---|---|---|---|
page | int | 1 | Numer strony |
per_page | int | 20 | Elementów na stronę |
search | string | – | Wyszukiwanie po tytule |
type | string | – | Filtr: quiz, matching, creative, itp. |
world_id | string | – | Filtr po świecie |
Nagłówki odpowiedzi:
X-Total-Count: 87
X-Page: 2
X-Per-Page: 20Użycie HTMX:
<div hx-get="/partials/task-list?page=1"
hx-trigger="load"
hx-swap="innerHTML">
</div>
<button hx-get="/partials/task-list?page=2"
hx-target="#task-table-body"
hx-swap="innerHTML">
Następna strona
</button>GET /partials/todo-list
Fragment listy to-do dla wybranego dziecka.
Query params:
| Param | Typ | Domyślnie | Opis |
|---|---|---|---|
child_id | string | – | ID profilu dziecka |
status | string | – | Filtr: pending, done |
Użycie HTMX:
<div hx-get="/partials/todo-list?child_id=prof_a1b2c3"
hx-trigger="load"
hx-swap="innerHTML">
</div>GET /partials/world-list
Fragment tabeli światów z paginacją.
Query params:
| Param | Typ | Domyślnie | Opis |
|---|---|---|---|
page | int | 1 | Numer strony |
per_page | int | 20 | Elementów na stronę |
Użycie HTMX:
<div hx-get="/partials/world-list?page=1"
hx-trigger="load"
hx-swap="innerHTML">
</div>GET /partials/dashboard-stats
Fragment statystyk na dashboardzie. Aktualizowany co 60 sekund.
Query params:
| Param | Typ | Domyślnie | Opis |
|---|---|---|---|
child_id | string | – | ID profilu dziecka |
Użycie HTMX:
<div hx-get="/partials/dashboard-stats?child_id=prof_a1b2c3"
hx-trigger="load, every 60s"
hx-swap="innerHTML">
</div>Zwraca karty ze statystykami: XP, poziom, ukończone zadania, seria dni, ostatnia aktywność.