Wróć do realizacji
Edukacja / Sektor publiczny2026Samodzielnie, od projektu po wdrożenie

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 roliEfekty uczenia się: filtry i import z CSVBaza pytań egzaminacyjnych powiązanych z kwalifikacjami

Panel zarządzania: statystyki i nawigacja zależna od roli

4
Role, każda z własnym panelem
Zgłoszenie → certyfikat
Cały cykl egzaminu w jednym systemie
Bez utraty danych
Egzamin przeżywa zerwanie łącza

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.

Flutter WebDartSupabasePostgreSQLClean ArchitectureBLoCFirebase HostingAzure App Insights

Architektura

Warstwy systemu

Web
  • 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)
Backend
  • 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ąć.

Porozmawiajmy