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.

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
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.
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.
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.
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.
Struktura, nie marketingowe liczby
kategorii zgłoszeń: każde trafia do właściwego wydziału z priorytetem, a nie do wspólnej skrzynki.
statusy zgłoszenia, zmieniane jednym kliknięciem: cały zespół widzi od razu, co czeka, co jest w toku i co zamknięte.
fałszywych zgłoszeń w bazie: każde musi przejść przez prawdziwy formularz, więc kolejka nie zapycha się śmieciami.
Każdy wybór ma powód
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ą.