Przejdź do treści
W rozwojuAplikacja webowa

Platforma szkoleń ratownictwa i bezpieczeństwa

Web i aplikacja mobilna dla czterech dyscyplin ratownictwa, z certyfikatem weryfikowanym kodem QR. Dostępu pilnuje baza danych, nie interfejs, a 67 testów bezpieczeństwa sprawdza to na żywym projekcie. Lekcje offline szyfrowane AES-256.

Zgodność:

  • WCAG
  • RODO
Branża
edtech
Czas trwania
Od 2026, w toku
Stack
Next.js, React +10

Co dostarczyliśmy

Kluczowe funkcje

  • Dwie warstwy dostępu: artykuły i quizy bez logowania, pełne kursy z certyfikacją po opłacie
  • Certyfikat PDF z kodem QR i publiczną stroną weryfikacji, sprawdzalny bez zakładania konta
  • Uprawnienia egzekwowane w Postgresie przez Row Level Security, nie w kodzie interfejsu
  • 67 testów bezpieczeństwa w Playwright, weryfikujących reguły dostępu na żywej bazie
  • Jedno monorepo, dwa klienty: 8 pakietów współdzielonych między web a mobile
  • Lekcje wideo offline szyfrowane AES-256, z gate na WiFi i kolejką pobierania
  • Druga marka jako plik konfiguracyjny, nie fork repozytorium
  • Dostęp do kursu nadaje wyłącznie webhook płatności, z idempotencją zdarzeń

Wyzwanie

Uprawnienia ratownicze wygasają. Kwalifikowaną pierwszą pomoc trzeba odnawiać cyklicznie, a odnowienie zwykle oznacza kilka dni urlopu i dojazd na kurs stacjonarny. Dla strażaka OSP albo kogoś na etacie to realna bariera, która nie ma nic wspólnego z jego umiejętnościami.

Do tego rynek jest rozdrobniony. Wiedza jest w jednym miejscu, testy w drugim, certyfikat w trzecim. Kursant składa to dziś z kilku niepowiązanych dostawców i przy każdej zmianie zaczyna od zera.

Na końcu zostaje certyfikat na papierze, z którym pracodawca niewiele może zrobić. Nie da się go zweryfikować ani wpiąć w obieg formalny, a to właśnie pracodawca i urząd najczęściej za szkolenie płacą.

Co zbudowaliśmy

Platformę szkoleniową dla ratownictwa i bezpieczeństwa cywilnego, która łączy naukę online z certyfikowanym szkoleniem w terenie. Cztery dyscypliny pod jedną marką: kwalifikowana pierwsza pomoc, medycyna pola walki, survival i taktyka. Teoria i testy dzieją się w aplikacji, a w terenie zostaje tylko to, czego nie da się zrobić zdalnie.

Dostęp ma dwa poziomy i to jest sedno produktu. Warstwa otwarta to artykuły i quizy bez logowania i bez opłat, dostępne dla każdego. Warstwa płatna to pełne kursy z wideo, materiałami offline, egzaminem i certyfikatem PDF z kodem QR, który pracodawca sprawdzi na publicznej stronie weryfikacji, bez zakładania konta.

Platforma w liczbach (stan: lipiec 2026)

19 tabel, 18 funkcji RPC i 34 migracje SQL pisane ręcznie, forward-only, wdrażane z CI

14 kursów w bazie, w tym pierwszy pełny kurs produkcyjny ze scenariuszami i quizami

10 artykułów i 5 quizów w warstwie otwartej, dostępnych bez logowania

3 Edge Functions na Deno 2: webhook płatności, wystawianie certyfikatów i podpisywanie adresów do wideo

78 testów E2E w Playwright, z czego 67 to testy bezpieczeństwa, plus 20 plików testów jednostkowych

6 równoległych jobów w CI, od typów i lintu po parity migracji i testy bezpieczeństwa

Najtrudniejszy problem: bezpieczeństwo, którego nie da się obejść

Kluczowa decyzja architektoniczna brzmi tak: granicą bezpieczeństwa jest baza danych, nie warstwa aplikacji. Uprawnienia egzekwuje Postgres przez Row Level Security. Warstwa web zatrzymuje request, zanim dojdzie do renderu, ale nawet gdyby ktoś ją ominął, baza po prostu nie odda cudzych danych.

W praktyce znaczy to trzy rzeczy. Zapisu na kurs nie da się wstawić z klienta, robi to wyłącznie webhook płatności działający na roli serwisowej, z idempotencją, więc ten sam event nie zapisze się dwa razy. Eskalacja roli jest zablokowana triggerami i audytowana w osobnej tabeli. Dostęp do lekcji bramkuje funkcja bazodanowa, a nie warunek w komponencie.

Najważniejsze jest to, że te reguły są testowane na żywym projekcie, a nie na mockach. Sprawdza je 67 testów bezpieczeństwa przy każdym wdrożeniu. Reguła, której nikt nie testuje, jest tylko dobrą intencją.

Regulacje jako fundament, nie dodatek

Dostępności pilnuje CI. Audyt axe-core chodzi automatycznie razem z testami przeglądarkowymi, więc regresja w dostępności nie przechodzi po cichu do produkcji.

Pod RODO ochrona jest wbudowana w architekturę, a nie dopięta na końcu: Row Level Security na wszystkich tabelach z danymi użytkownika, szyfrowanie materiałów offline, audit log zmian ról oraz prywatny bucket na wideo, do którego adresy są podpisywane i wygasają po 6 godzinach.

Inżynieria, której nie widać

Jedno monorepo, dwa klienty, jeden backend. Osiem pakietów jest realnie współdzielonych między web a mobile: baza, auth, logika domenowa, design system, brand, płatności, walidatory i analityka. Aplikacja mobilna korzysta z tych samych tokenów designu co web.

Tryb offline to nietrywialny kawałek inżynierii mobilnej. Aplikacja pobiera lekcje wideo z gate na WiFi i limitem miejsca, kolejką FIFO przeżywającą nawigację, i szyfruje je AES-256 na dysku. Materiał kursu nie leży na telefonie jako goły plik.

Wielomarkowość zaprojektowaliśmy od fundamentu. Druga marka, wersja cywilna dla samorządów, powstaje przez plik konfiguracyjny, a nie przez fork. Nazwy, taksonomia, nawigacja, dane sprzedawcy i flagi funkcji są wyniesione z komponentów, a wspólnego schematu bazy pilnuje CI, żeby oba wdrożenia nie rozjechały się po cichu.

Świadome decyzje, czego nie robimy

Hosting jest własny: Docker w konfiguracji multi-stage, non-root, z healthcheckiem, uruchamiany na Coolify. Świadomie bez Vercela.

Wideo trzyma prywatny bucket z podpisanymi adresami, zamiast płatnego hostingu wideo. Płatność jest jednorazowa za kurs, kartą albo BLIK-iem, bez subskrypcji, bo produkt jej dziś nie potrzebuje. Każda z tych decyzji to mniej rachunków co miesiąc i mniej rzeczy, które mogą nas zaskoczyć przy skalowaniu.

Filozofia interfejsu jest równie stanowcza. Design system nazywa ją "Equipment, not Interface": narzędzie, którego ktoś używa w sytuacji krytycznej, ma być precyzyjne i przewidywalne, bez ozdobników. Ciemny interfejs, monospace, cienkie linie, brak cieni, pomarańczowy akcent tylko jako wezwanie do działania. Świadomie bez estetyki gamingowej i bez militarnego kiczu.

Co dalej

Produkt jest przed publicznym startem. Domykamy ostatnie elementy i przygotowujemy pilotaż z pierwszymi grupami. Rozwijamy go w modelu produktowym, więc wszystko, czego się przy nim uczymy o bezpieczeństwie danych, aplikacjach mobilnych i utrzymaniu dwóch marek na jednym kodzie, trafia potem do projektów naszych klientów.

Stack technologiczny

Technologie

Next.jsReactTypeScriptSupabasePostgreSQLTailwind CSSReact NativeExpoStripeDenoPlaywrightDocker

Zgodność z regulacjami

  • WCAG
  • RODO

Zrzuty ekranu

Galeria

Strona główna w całości. Design system nazywa to podejście Equipment, not Interface
Katalog 14 kursów z filtrowaniem po kategorii, poziomie i cenie
Warstwa otwarta: 10 artykułów dostępnych bez logowania i bez opłat
Quizy z wynikiem i wyjaśnieniami od razu, bez logowania i bez zapisu

Masz podobny projekt? Porozmawiajmy.

Bezpłatna konsultacja