Aplicação full-stack para coleta e gestão de solicitações via formulário. O projeto contém um frontend público, um painel administrativo e uma API Node.js com Prisma e PostgreSQL.
Projeto criado e publicado originalmente em dezembro de 2024. Atualmente, esta versão foi adaptada para portfólio, com arquitetura reorganizada, documentação pública e remoção de credenciais, dumps e referências de ambiente interno.
O objetivo atual deste repositório é servir como aplicação de referência para um fluxo DevOps end-to-end: build, teste, imagem Docker, scan de segurança, deploy Kubernetes/GitOps e observabilidade.
apps/web/: frontend público em React, Chakra UI e Vite.apps/admin/: painel administrativo em React, Chakra UI e Vite.apps/api/: API Express com Prisma, autenticação JWT e upload de anexos.infra/observability/: configurações opcionais de métricas, logs e tracing.scripts/: automações auxiliares para imagens e deploy local.docker-compose-dev.yml: ambiente local com PostgreSQL, backend e frontends.
- Aplicação full-stack containerizada com frontend público, painel admin e API.
- API Express com Prisma, PostgreSQL, autenticação JWT, upload de anexos e seed administrativo opcional.
- Endpoints operacionais para liveness, readiness e métricas Prometheus.
- Dockerfiles separados para API, web e admin, com
.dockerignoree healthchecks. - CI com instalação, validação Prisma, testes de API, build frontend, Docker Compose config, build de imagens e Trivy.
- Checks locais para bloquear
.env, secrets, dumps, chaves e marcadores internos antes de publicar.
Este repositório não deve conter segredos reais, dumps de banco, chaves de
serviços externos ou dados de ambiente interno. Use .env.example como base e
mantenha .env fora do Git.
Se você clonar uma versão antiga que continha segredos, rotacione as credenciais antes de tornar o repositório público.
- Node.js 18+
- npm 9+
- Docker e Docker Compose, opcional para ambiente local completo
- PostgreSQL 15+ se executar sem Docker
cp .env.example .env
docker compose -f docker-compose-dev.yml up --buildServiços padrão:
- Frontend público:
http://localhost:5173 - Painel admin:
http://localhost:5174 - API:
http://localhost:3001/forms - PostgreSQL:
localhost:15432no host,postgres:5432na rede Docker
O ambiente demo sobe com catalogo inicial para os selects do formulario e com usuario administrativo:
- Usuario:
admin - Senha: valor de
ADMIN_PASSWORD, por padraodemo-admin-password
O reCAPTCHA fica desabilitado por padrao na demo local. Para ativa-lo, informe
uma chave publica valida em VITE_RECAPTCHA_SITE_KEY e a chave privada
correspondente em SECRET_KEY.
Backend:
cd apps/api
npm install
npm run prisma:generate
npm run prisma:migrate
npm run devFrontend público:
cd apps/web
npm install
npm run devPainel admin:
cd apps/admin
npm install
npm run devNa raiz:
npm run validate
npm run build
npm run test:api
npm run build:user
npm run build:admin
npm run prisma:validate
make public-check
make security-checkBuild das imagens Docker:
REGISTRY_NAMESPACE=seu-usuario TAG=latest ./scripts/build-images.shCom API_PREFIX=/forms, a API expõe:
GET /livez: liveness sem dependência externa.GET /health: health básico.GET /readyz: readiness com checagem de banco via Prisma.GET /metrics: métricas Prometheus.GET /forms/health,/forms/liveze/forms/readyz: equivalentes com prefixo para compatibilidade com ingress/API gateway.
DATABASE_URL: conexão PostgreSQL usada pelo Prisma.JWT_SECRET: chave de assinatura dos tokens do painel administrativo.ADMIN_PASSWORD: senha inicial usada pelo seed opcional.SEED_DEMO_DATA: quandotrue, popula catalogos demonstrativos do formulario.VITE_BASE_URL: URL base da API usada pelos frontends.VITE_API_PREFIX: prefixo das rotas da API, padrão/forms.VITE_RECAPTCHA_SITE_KEY: chave pública do reCAPTCHA.VITE_REQUIRED_FILE_KEY_*: nomes usados pela API para mapear anexos exigidos no formulário.SECRET_KEY: chave privada do reCAPTCHA no backend.
Antes de publicar:
- Confirme que
.env,mysecrets.yml, dumps SQL e builds não estão versionados. - Rode
npm run build. - Rode
npm run prisma:validate. - Rode
npm run test:api. - Rode
make public-check. - Rode
make security-check, quando Docker estiver disponível.
Consulte docs/evidence.md para a lista de validações reproduzíveis e para o papel deste projeto no demo DevOps end-to-end.