CivicFlow: zgłoszenia mieszkańców dla gmin
Mieszkaniec zgłasza usterkę w formularzu z kategorią i priorytetem, a urzędnik prowadzi całą kolejkę zgłoszeń w jednym panelu, z dziennikiem każdej zmiany statusu.
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.
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.
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 dopisuje zgłoszenie do rejestru.
- Panel administracyjny
- Urzędnik widzi wszystkie zgłoszenia w jednym miejscu: filtr po kategorii i priorytecie, sortowanie po dacie, zmiana statusu jednym kliknięciem, przez Oczekujące, W trakcie i Rozwiązane albo Odrzucone.
- Nagłówki bezpieczeństwa
- HSTS, X-Content-Type-Options, Referrer-Policy i CSP z nonce na każde żądanie, ustawione na poziomie odpowiedzi. Demo nie ma bazy danych: rejestr jedzie w podpisanym ciasteczku odwiedzającego, więc dane jednej osoby nie trafiają na ekran drugiej.
Struktura, nie marketingowe liczby
Dane jednej osoby nigdy nie pojawiają się na ekranie drugiej.
- 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.
- 2 h
- tyle żyje kopia rejestru w demo: potem ciasteczko wygasa i nie zostaje nic do usuwania.
Projekt własny. Zbudowaliśmy go i utrzymujemy sami. Rejestr, który klikasz, jest Twoją prywatną kopią w podpisanym ciasteczku, więc sprawdzisz wszystko bez zakładania konta.
Każdy wybór ma powód
| Warstwa | Wybór | Co to daje |
|---|---|---|
| Frontend | Next.js | Panel otwiera się od razu z listą zgłoszeń, bez ekranu ładowania. |
| Dane w demo | Podpisane ciasteczko HMAC | Rejestr, który klikasz, jest Twoją własną kopią i wygasa sam. |
| Walidacja | Zod | Ten sam zestaw reguł pilnuje formularza u Ciebie i na serwerze, więc błąd widzisz raz. |
| Bezpieczeństwo | CSRF (double-submit cookie) | Obca strona nie wyśle zgłoszenia w Twoim imieniu. |
| Sesja administratora | HMAC SHA-256 | Panel urzędnika otwiera tylko ten, kto ma ważną sesję. |
| Styl | Tailwind CSS | Jeden jasny motyw, czytelny także na starszym monitorze w urzędzie. |
