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.
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.
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:5432
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 build
npm run build:user
npm run build:admin
npm run prisma:validateBuild das imagens Docker:
REGISTRY_NAMESPACE=seu-usuario TAG=latest ./scripts/build-images.shDATABASE_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.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. - Faça uma varredura por IPs, domínios internos e segredos.