Guardião da Praia: a plataforma de ciência cidadã da costa alagoana por dentro
Oito tipos de ocorrência, cinco estados de moderação com trilha de auditoria, mapa público derivado do estado e limites de envio no servidor. A arquitetura completa do projeto.

O Guardião da Praia é uma plataforma de ciência cidadã para a costa alagoana. Pescadores, moradores e organizações registram poluição, óleo, esgoto e degradação costeira direto do celular, e cada ocorrência aprovada vira um dado georreferenciado público, aberto a pesquisadores e a órgãos ambientais.
O projeto recebeu terceiro lugar no SINPETE da UFAL em 2025. Eu fui o responsável pelo desenvolvimento do sistema, sem integrar a equipe que apresentou o trabalho na banca, e prefiro registrar isso a deixar ambíguo.
Este texto descreve a plataforma inteira, com atenção maior à parte que decide se ela serve para alguma coisa: o que acontece entre o envio e a publicação.
O formulário é a parte fácil
Um formulário com foto e coordenada é um sábado de trabalho. O problema real aparece no dia seguinte ao lançamento, quando chega o primeiro registro duvidoso.
Ciência cidadã carrega uma tensão que não se resolve com código:
- Se você publica tudo, o conjunto de dados fica poluído e nenhum pesquisador confia nele.
- Se você publica pouco, quem contribuiu não vê retorno e para de contribuir.
A plataforma inteira é uma tentativa de resposta a essa tensão, e quase todas as decisões de arquitetura saem daí.
O domínio
Uma ocorrência é tipada em oito categorias: poluição, óleo, esgoto, pesca predatória, desmatamento, construção irregular, morte de animais e outros. Categoria fechada, e não campo livre, porque a promessa do projeto é entregar dado agregável.
Cada registro carrega o autor, o tipo, a descrição, a localização com coordenada, endereço e cidade, a data do ocorrido separada da data de criação, as fotos, o estado atual, um bloco de moderação e o histórico de tudo que aconteceu com ele.
A separação entre dataOcorrido e criadoEm parece detalhe e não é. Alguém fotografa uma mancha de óleo no domingo e registra na terça, e um pesquisador que cruze ocorrências com maré e corrente precisa da primeira data, não da segunda.
O fluxo, e o ponto de corte
| Passo | Ação | Onde acontece |
|---|---|---|
| 01 | Entrar com conta Google | Cliente |
| 02 | Marcar o ponto no mapa | Cliente |
| 03 | Descrever e anexar evidência | Cliente |
| 04 | Publicar após análise | Servidor, com revisão humana |
Os três primeiros passos são do usuário. O quarto não é, e essa é a decisão que define o produto.
O registro é feito num assistente por etapas, com seletor de ponto no mapa e busca por endereço, para que quem está em campo não precise saber coordenada. A busca de local existe porque a pessoa que registra sabe dizer “praia de Pajuçara” e não sabe dizer −9,66 por −35,70.
A máquina de estados da moderação
Registro não é aprovado ou reprovado. Ele está em um de cinco estados, e o que vai ao mapa público é derivado disso, nunca escolhido à mão:
Separar Pendente de Em Análise parece detalhe e não é: sem isso, dois moderadores abrem o mesmo registro ao mesmo tempo e um descobre o trabalho do outro depois de feito.
Separar Aprovada de Resolvida é o que permite o mapa mostrar ao mesmo tempo o que existe e o que já foi resolvido, sem apagar o histórico do problema. Uma praia que teve três ocorrências resolvidas conta uma história diferente de uma praia que nunca teve nenhuma, e as duas são informação.
Duas regras cercam a decisão de rejeitar.
A primeira é que ela exige motivo escrito, com no mínimo dez caracteres, e o botão fica desabilitado até isso ser satisfeito. Rejeição sem justificativa é indistinguível de desleixo para quem contribuiu, e quem contribuiu é o recurso mais escasso do projeto.
A segunda é que toda mudança de estado entra num histórico anexado ao próprio registro, com a ação, a data e o responsável. Quem revisa também é auditável. Numa plataforma que se apresenta como fonte de dado público, moderação sem rastro é um buraco de credibilidade do mesmo tamanho que registro sem moderação.
O papel de moderação é hierárquico, com administrador e superadministrador, e a contagem de contribuições do autor é ajustada quando um registro sai do conjunto público, para que a métrica de perfil não conte o que não vale.
Limites do lado do servidor
O envio de evidência tem regras próprias, aplicadas na rota e não na interface: cinco megabytes por imagem, apenas JPEG e PNG, e no máximo doze envios por minuto por conta.
O controle de taxa é uma janela deslizante por identidade, com uma limpeza periódica das entradas expiradas quando o mapa de controle cresce demais. É simples de propósito, porque a alternativa cara não se justifica na escala do projeto, e é suficiente para o que precisa impedir: um mapa público que aceita qualquer coisa em qualquer volume não fica aberto por muito tempo.
Vale notar onde essa validação mora. Limite de tamanho e tipo no cliente é conveniência para o usuário; no servidor é a regra. Os dois existem, e só um deles conta.
Por que login obrigatório
Registro anônimo aumenta volume e destrói responsabilidade. Exigir conta amarra cada registro a uma identidade estável, torna spam caro o suficiente para não valer a pena e permite dar retorno a quem contribuiu quando o caso é resolvido.
O custo é atrito. Alguém que ia registrar em quinze segundos leva quarenta. Foi um custo aceito conscientemente, porque a alternativa é um mapa que ninguém pode citar.
Georreferenciamento é o que dá valor ao registro
Uma foto de praia suja é uma denúncia. A mesma foto com coordenada, data, cidade e categoria é dado.
A diferença importa porque muda quem consegue usar aquilo. Um pesquisador precisa cruzar ocorrências com maré, corrente e ponto de descarte. Um órgão ambiental precisa saber a jurisdição. Nenhum dos dois consegue fazer nada com uma imagem solta.
Por isso o ponto no mapa não é opcional no fluxo de registro. É o campo que transforma relato em dado reutilizável, e é também o que impõe as exigências de estrutura: categoria consistente, coordenada em formato padrão, data em fuso declarado. Dado aberto que não é padronizado é arquivo, não é dado.
As superfícies do sistema
| Área | Para quem | O que faz |
|---|---|---|
| Mapa público | Qualquer visitante | Exibe apenas ocorrências em estado público |
| Nova ocorrência | Autenticado | Assistente por etapas, com mapa e upload |
| Minhas ocorrências | Autor | Acompanha estado e motivo de cada registro seu |
| Moderação | Administrador | Fila, mudança de estado e justificativa |
| Relatórios | Administrador | Séries e distribuição por tipo e período |
| Usuários | Superadministrador | Gestão de contas e papéis |
| FAQ e Sobre | Qualquer visitante | Regras do projeto e prazo de análise |
A existência de “Minhas ocorrências” é a contrapartida da moderação fechada: se a publicação depende de revisão humana, quem enviou precisa ver em que pé está o próprio registro, e ler o motivo quando ele for recusado.
O número honesto
A página inicial mostra os registros públicos, os casos resolvidos e as cidades monitoradas, e são números pequenos.
A plataforma não os disfarça. Poderia haver contadores inflados por registros não moderados; a escolha foi mostrar só o que passou pelo crivo. Um projeto de ciência cidadã que mente na própria métrica perde a única coisa que ele tem para oferecer.
A pilha
| Camada | Tecnologia | Papel |
|---|---|---|
| Aplicação | Next.js 15 e React 19 | Rotas protegidas por grupo e rota de upload |
| Mapa | Leaflet e React Leaflet | Mapa público, seletor de ponto e zoom |
| Gráficos | Recharts | Relatórios por tipo e período |
| Persistência | Firebase e Firebase Admin | Autenticação, dados e operações privilegiadas |
| Datas | date-fns | Períodos e formatação |
| Interface | Biblioteca própria de componentes | Botões, campos, abas, toasts e estados vazios |
A biblioteca de componentes própria, com dezenove peças, é o que mantém a coerência entre sete telas construídas em momentos diferentes. Estado vazio e estado de carregamento entraram como componentes desde o começo, e não como improviso por tela, o que é a diferença entre uma interface que parece terminada e uma que parece um protótipo.
Próximos passos
Quem registra já acompanha o próprio caso com estado e motivo. O que falta é do outro lado:
- Prazo visível na fila. O FAQ diz quanto tempo costuma levar, mas ninguém vê a posição do próprio registro nem quanto a fila cresceu. É a diferença entre esperar e não saber se foi esquecido.
- Exportação pública. Hoje a consulta é pelo mapa. Um endpoint aberto, em formato geoespacial padrão, faria o dado circular sem depender da interface, que é o que a promessa de dado aberto realmente exige.
- Validação cruzada. Duas ocorrências do mesmo tipo, no mesmo trecho e na mesma janela de tempo são um sinal mais forte que duas isoladas, e hoje a moderação não recebe esse sinal pronto.
Onde está
A plataforma está em seaguardian.vercel.app, com mapa público, registro autenticado, moderação com trilha de auditoria e relatórios.
O que ela ensina, no fim, não é sobre mapa: é que a credibilidade de um conjunto de dados público se decide na etapa que ninguém vê.
Continue lendo
- 9 min
Mundaú Sentinela: monitoramento hidrológico cívico da bacia por dentro
Nove pontos monitorados, previsão de 48 horas a partir do GloFAS, relatos cidadãos moderados, memória de cheias desde 1988 e projeção climática até 2050. A arquitetura completa da plataforma. - 9 min
NATIVA: uma plataforma de educação ambiental com dado, texto e IA na mesma superfície
Indicadores com fonte declarada, biblioteca editorial, quiz gerado na hora, busca de vídeo e uma assistente que explica sem virar a origem do número. A arquitetura completa do projeto. - 11 min
Educaki: a plataforma de preparação para o ENEM e o SISU por dentro
Simulado no modelo oficial, correção de redação por competência, simulação de candidatura com nota de corte efetiva e painéis para o professor. A arquitetura completa de uma plataforma gratuita que ganhou o InovaEdu.