Documentação técnica
Arquitetura
A web usa Next.js 15 com App Router. A API é um monólito modular NestJS. Prisma persiste os dados em PostgreSQL, Redis atende cache, filas e limitações, e o storage guarda fotos, comprovantes, evidências e documentos.
Web e mobileSite público, áreas autenticadas e app mobile Expo.
API e dadosREST, regras de domínio, PostgreSQL e Redis no mesmo fluxo transacional.
Documentação técnica
Tenants e perfis
Uma ONG é o tenant da operação. O slug da organização chega no contexto autenticado ou no cabeçalho X-Tenant-Slug; as consultas protegidas aplicam esse escopo. Assim, animais, casos, doações, prontuários e dados de uma ONG não se misturam aos de outra.
Os perfis cobrem tutor, doador, voluntário, veterinário, ONG, governo, polícia, Ministério Público e conselho. O RBAC limita cada ação ao papel e ao tenant autorizados. Administração e governo têm leituras institucionais próprias.
Documentação técnica
Contas de demonstração
Ambiente de demonstração, dados fictícios.
Use estas contas na página de login.
| Perfil | Senha | Após o login | |
|---|---|---|---|
| Administrador | admin@projetomel.com.br | Mel2026!admin | /admin (auditoria, tenants) |
| Gestora de ONG | gestora@patinhas.org.br | Mel2026!demo | /patinhas-cerrado/dashboard |
| Voluntário | voluntario@gmail.com | Mel2026!demo | /patinhas-cerrado/dashboard |
| Veterinário | vet@clinica.com.br | Mel2026!demo | /patinhas-cerrado/vacinas (Portal Clínico) |
| Doador / tutor | doador@gmail.com | Mel2026!demo | /minha-conta |
| Governo (SEMA) | governo@gdf.gov.br | Mel2026!demo | /dashboard governo |
| Polícia Civil | policia@pmdf.gov.br | Mel2026!demo | /casos-criticos e /denuncias |
| Promotor (MPDFT) | promotor@mpdft.mp.br | Mel2026!demo | /dossies e casos críticos |
| Conselho | conselho@gdf.gov.br | Mel2026!demo | /relatorios e indicadores |
Documentação técnica
Cadeia de integridade
Cada bloco usa SHA-256 sobre seis partes ordenadas: sequência, tipo da entidade, identificador, payload com chaves ordenadas recursivamente, hash anterior e data ISO. Os valores são unidos por um separador antes do cálculo. Se um payload, a ordem ou um elo anterior mudar, o hash deixa de coincidir.
SHA-256(sequence | entityType | entityId | payloadOrdenado | prevHash | timestampISO)A API também mantém o formato anterior para registros jurídicos: o hash é calculado sobre o JSON do payload seguido do hash anterior. O verificador público consulta a cadeia sem expor o conteúdo protegido.
Documentação técnica
API pública
A base versionada é /api/v1. Esta lista foi regenerada a partir de grep -rn "@Public" apps/api/src e inclui os endpoints públicos de denúncias e eventos. Eles não exigem token, mas ainda aplicam as validações, limites e guardas específicos de cada recurso.
POST /public/abuse-reportsPOST /public/abuse-reports/:protocol/verify-contactPOST /public/abuse-reports/:protocol/statusGET /public/abuse-reports/channelsGET /animals/availableGET /animals/public/:idGET /animals/chip/:chipNumberPOST /animals/:id/likePOST /auth/registerPOST /auth/register-ongPOST /auth/loginPOST /auth/refreshPOST /auth/forgot-passwordPOST /auth/reset-passwordPOST /auth/logoutGET /donation-categoriesGET /donations/publicPOST /donationsPOST /donations/webhookGET /verify/:hashGET /eventsGET /events/:slugGET /healthPOST /integration/mercadopago/create-preferenceGET /integration/healthGET /lost-foundGET /lost-found/:idGET /lost-found/:id/candidatesGET /storage/*pathGET /tenantsGET /tenants/:slugPOST /tenants/:slug/join-requestGET /transparency/integrity/summaryGET /transparency/integrity/verifyGET /transparency/statsGET /transparency/mapGET /transparency/timelineGET /transparency/donationsGET /transparency/tenantsGET /transparency/tenants/:slugGET /transparency/tenants/:slug/donationsGET /transparency/tenants/:slug/atividadescurl https://api.projetomel.com.br/api/v1/transparency/stats
curl https://api.projetomel.com.br/api/v1/animals/availableDocumentação técnica
LGPD
Denúncias podem ser anônimas com frase-senha ou identificadas com confirmação por código. O acompanhamento público exige o segredo escolhido pela pessoa denunciante. Fotografias enviadas para denúncia têm os metadados EXIF removidos antes do armazenamento.
Para limitar abuso sem conservar um identificador direto, a plataforma usa hash diário do IP. O identificador é removido após 90 dias. Dados públicos são agregados ou anonimizados conforme o contexto; endereços, nomes e evidências não são publicados no acompanhamento da denúncia.
Documentação técnica
Integrações
Mercado Pago cria a preferência de pagamento e confirma eventos por webhook. O recibo de doação é gerado em PDF com hash verificável. E-mail usa Resend ou SMTP conforme a configuração de ambiente. Notificações in-app e WhatsApp usam as preferências da pessoa e os canais conectados pela operação.
Documentação técnica
Deploy
O fluxo segue GitOps: uma alteração validada entra no repositório, a automação prepara os artefatos e o Dokploy aplica os serviços configurados. PostgreSQL, Redis, API, web, Metro e storage permanecem separados no ambiente. Segredos ficam no provedor de deploy, não no código ou nos exemplos desta página.
A plataforma é mantida pela HoldNexus. Healthchecks da API e das integrações ajudam a operação a identificar disponibilidade antes de uma investigação manual.