01Case study · Sektor publiczny

Projekt własny: oprogramowanie, które sami zbudowaliśmy i utrzymujemy.

CivicFlow

Mieszkaniec zgłasza usterkę w prostym formularzu z kategorią i priorytetem, urzędnik widzi całą kolejkę w jednym panelu. Żadne zgłoszenie nie ginie w skrzynce. Portal jest zabezpieczony przed fałszywymi zgłoszeniami, a baza danych nie wymaga własnego serwera.

Otwórz demo na żywoZamów bezpłatny audyt
Panel administracyjny CivicFlow: kolejka zgłoszeń mieszkańców z kategorią, priorytetem i statusemDemo na żywo
02Wyzwanie

Zgłoszenia mieszkańców giną w skrzynkach i telefonach

Usterka trafia do urzędu mailem albo telefonem. Nikt od razu nie widzi, co jest pilne, co już ktoś obsługuje ani ile podobnych zgłoszeń już wpłynęło. Zbudowaliśmy więc prosty portal: mieszkaniec wybiera kategorię i priorytet, a urzędnik widzi całą kolejkę i zmienia status bez grzebania w mailach.

03Dla kogo

Od gminy po straż miejską, jeden system zgłoszeń

CivicFlow działa wszędzie tam, gdzie zgłoszenie mieszkańca musi trafić do właściwej osoby z priorytetem, nie do wspólnej skrzynki. Gmina prowadzi w nim zgłoszenia o drogach i oświetleniu. Miasto rozdziela je między wydziały. Straż miejska prowadzi osobną kolejkę: nielegalne parkowanie, hałas, porządek. Kategorie i uprawnienia dopasowujemy do struktury urzędu, nie na odwrót.

04Jak to działa

Od formularza mieszkańca do panelu urzędnika

Zgłoszenie

Formularz z walidacją po stronie klienta i schematem Zod po stronie serwera: nazwisko, e-mail, jedna z 6 kategorii, priorytet, treść. Token CSRF w modelu double-submit cookie chroni przed atakami cross-site przed wysłaniem żądania.

Weryfikacja i zapis

Serwer najpierw porównuje token CSRF z sekretem w ciasteczku httpOnly, sprawdza limit zapytań, waliduje treść schematem Zod i dopiero wtedy zapisuje zgłoszenie w Postgres przez Prisma.

Panel administracyjny

Urzędnik widzi wszystkie zgłoszenia w jednym miejscu: filtr po kategorii i priorytecie, sortowanie po dacie, zmiana statusu Pending → In Progress → Resolved (lub Rejected) jednym kliknięciem.

Nagłówki bezpieczeństwa

HSTS, X-Content-Type-Options, Referrer-Policy ustawione na poziomie odpowiedzi. Baza danych to prywatna instancja Postgres na Neon, bez własnego serwera do utrzymania.

05Liczby

Struktura, nie marketingowe liczby

6

kategorii zgłoszeń: każde trafia do właściwego wydziału z priorytetem, a nie do wspólnej skrzynki.

4

statusy zgłoszenia, zmieniane jednym kliknięciem: cały zespół widzi od razu, co czeka, co jest w toku i co zamknięte.

0

fałszywych zgłoszeń w bazie: każde musi przejść przez prawdziwy formularz, więc kolejka nie zapycha się śmieciami.

Sprawdź te liczby sam w demo
06Stack

Każdy wybór ma powód

Frontend
Next.js 16 (React 19)
App Router, server components dla dashboardu
Baza danych
PostgreSQL (Neon)
Serverless Postgres przez Vercel Marketplace, zero zarządzania infrastrukturą
ORM
Prisma 7
Typowany dostęp do bazy danych i synchronizacja schematu
Walidacja
Zod
Jeden schemat waliduje formularz po stronie klienta i serwera
Bezpieczeństwo
CSRF (double-submit cookie)
Token httpOnly + nagłówek żądania chronią endpoint POST /api/report
Styl
Tailwind CSS 4
Utility-first, tryb ciemny wbudowany od startu
07Kontakt

Masz uciążliwy problem? Opisz go, resztę zakoduję.

Jedno zdanie wystarczy, żeby zacząć. Napisz, co Cię uwiera. Wracam w 48 godzin z odpowiedzią, czy da się to zrobić, i ze stałą ceną.

Bez zobowiązań: opisanie problemu nic nie kosztuje
Bezpłatny audyt na start: raport zostaje u Ciebie
Stała cena ustalona z góry albo nie zaczynamy: bez niespodzianek na fakturze
Ograniczona liczba projektów naraz, każdy z pełną uwagą: przy pilnym terminie odezwij się wcześniej
Odpowiadamy w ciągu 48 godzin
Napisz bezpośrednio
contact@tenzanlogic.com