Plataforma web para um município registar e acompanhar ocorrências reportadas por cidadãos e serviços, com foco em coordenação operacional e consulta pública do estado de cada caso.
Construí a aplicação com Next.js 16 (App Router) e React 19 em TypeScript, com PostgreSQL via Prisma. O cidadão submete uma ocorrência com fotografias, localização GPS e contacto; as imagens são normalizadas para WebP com o Sharp. Um painel administrativo protegido por NextAuth valida cada registo antes de ele aparecer no mapa público, construído com Leaflet e camadas de calor. A submissão é defendida por hCaptcha e por limitação de pedidos sobre Redis, com degradação controlada quando o serviço não está configurado.
A interface é multilingue (next-intl) e os formulários usam React Hook Form com validação Zod partilhada entre cliente e servidor. A aplicação é instalável como PWA.
Cidadao/Servico
| submete (foto, GPS)
v
+----------------+ valida +--------+
| Registo + API | ---------> | Admin |
+----------------+ +--------+
| |
| Prisma | publica
v v
+-----------+ +-----------+
| PostgreSQL| | Mapa pub. |
+-----------+ +-----------+
O deploy é contínuo via Coolify a partir da branch principal. O projeto está arquivado para fins de portfólio.