Egzaminy online i automatyczna certyfikacja
Problem
Fundacja wydaje oficjalnie uznawane kwalifikacje zawodowe, a cały proces obsługiwał starszy system, do którego kodu źródłowego fundacja nie miała dostępu. Oznaczało to, że żaden inny programista nie mógł go rozwijać ani choćby poprawić w nim błędów. Do tego kontakt z jedynym developerem, który za system odpowiadał, urwał się. System działał niestabilnie i był pełen błędów, których nie miał kto naprawić. Fundacja potrzebowała dwóch rzeczy: zbudować system od podstaw i znaleźć osobę, która zaopiekuje się nim po wdrożeniu, czyli programistę, z którym realnie będzie mieć kontakt.
Rozwiązanie
Zbudowałem system, który prowadzi ten proces od początku do końca w jednym miejscu. Ośrodek zgłasza egzamin w aplikacji, fundacja go akceptuje, egzaminator przeprowadza, kandydat zdaje przez przeglądarkę, a certyfikat z numerem rejestrowym generuje się sam jako PDF gotowy do druku. Każdy widzi tylko to, co go dotyczy: ośrodek swoje egzaminy, egzaminator swoje terminy, fundacja całość.
Egzamin nie powstaje za każdym razem od zera. W systemie są szablony egzaminów, bank pytań i efekty uczenia się. Fundacja składa egzamin z gotowych klocków, a każde pytanie jest powiązane z konkretnym efektem uczenia się, więc widać, że egzamin sprawdza dokładnie to, czego wymaga kwalifikacja.
Czas egzaminu pilnuje system, nie komputer kandydata. Jeśli komuś w trakcie padnie internet, wraca i pisze dalej, a odpowiedzi nie przepadają. Gdy czas minie, egzamin kończy się sam. W okresie testów miałem podgląd na żywo we wszystko, co dzieje się w aplikacji, więc błędy naprawiałem, zanim ktokolwiek zdążył je zgłosić.
Całość zrobiłem w pojedynkę: na zlecenie klienta zaprojektowałem UX/UI, napisałem kod i wdrożyłem system.
Wdrożenie
Ekrany aplikacji
Kilka zrzutów z działającego produktu. Podpisy mówią, na co patrzysz.



Panel zarządzania: statystyki i nawigacja zależna od roli
Co potrafi
Kluczowe funkcje
Pełny proces egzaminu
Od zgłoszenia egzaminu przez ośrodek, przez akceptację fundacji i przeprowadzenie przez egzaminatora, po zdawanie w przeglądarce, wszystko w jednym miejscu.
Egzamin odporny i nie do oszukania
Zerwane łącze nie gubi odpowiedzi, a czas liczony jest po stronie serwera, więc zegara nie da się oszukać z komputera kandydata.
Egzamin z gotowych klocków
Szablony, bank pytań i efekty uczenia się; każde pytanie powiązane z efektem, więc egzamin sprawdza dokładnie to, czego wymaga kwalifikacja.
Automatyczne certyfikaty z numerem
Po zdaniu certyfikat PDF z numerem rejestrowym generuje się sam, gotowy do druku, bez ręcznej papierologii.
Dostęp według ról
Cztery role z osobnymi widokami: ośrodek widzi tylko własne egzaminy, egzaminator tylko swoje terminy, kandydat tylko swój egzamin, a fundacja ma wgląd w całość.
Dane odizolowane per podmiot
Dane każdego podmiotu w pełni oddzielone i zabezpieczone, z izolacją na poziomie wierszy w bazie.
Stack technologiczny
Główne technologie
Konkretne pakiety i integracje znajdziesz niżej.
Architektura
Warstwy systemu
- Flutter Web w oparciu o Clean Architecture
- Panele wg roli: fundacja, ośrodek, egzaminator, egzaminowany
- Server-authoritative czas egzaminu z rozłączeniem i powrotem
- Responsywne, wdrożone na Firebase Hosting (no-cache, PWA off)
- PostgreSQL z row-level security na każdej tabeli
- RPC SECURITY DEFINER łamiące rekursję RLS, scope'owane wg roli
- Edge functions w Deno do maili transakcyjnych (Resend)
- pg_cron: auto-zamykanie egzaminów, keep-warm
- Ciągła, rocznikowa numeracja certyfikatów
Biblioteki
Kluczowe pakiety
- flutter_bloczarządzanie stanem (Cubit)
- freezedniemutowalne encje i stany
- dartzobsługa błędów Either<Failure, T>
- get_it + injectablewstrzykiwanie zależności
- go_routerrouting i guardy wg roli
- pdf + printinggenerowanie certyfikatów do druku
Integracje
Usługi zewnętrzne
- SupabasePostgres, Auth, Storage, Edge Functions
- Resendmaile transakcyjne (zaproszenia, konta)
- Azure Application Insightsmetryki live, błędy, zależności
- Firebasehosting + analityka produktowa GA4
- Sentryśledzenie błędów z breadcrumbami
Budujesz coś podobnego?
Napisz parę zdań o projekcie, odeślę konkretne uwagi i termin, od kiedy mogę zacząć.