Briefing de Site SeConectai
Sistema web para cadastro de clientes e preenchimento guiado do briefing de criação de sites.
As pastas Conhecimento/ e Schema/ ficam como documentação de referência. O sistema em si é criado na raiz do projeto, com app/, components/, lib/, prisma/, Docker e configurações do Next.js.
Stack
- Next.js 14+ com App Router
- TypeScript
- Tailwind CSS
- shadcn/ui como padrão de componentes
- Prisma + PostgreSQL 16
- Auth.js v5
- React Hook Form + Zod
- Docker Compose
Desenvolvimento
Crie um .env a partir do exemplo quando for implementar autenticação, banco e integrações reais:
cp .env.example .env
Instale as dependências:
npm install
Rode o app:
npm run dev
Ou suba com Docker:
docker compose up
Estrutura inicial
app/: rotas e layout base.components/ui/: componentes base no padrão shadcn.lib/: utilitários compartilhados.prisma/briefing-seed.json: cópia do seed usado para carregar as seções e perguntas do briefing.Schema/: documentação das etapas do backend e regras de negócio.Conhecimento/: guias de frontend, UI, responsividade, acessibilidade e revisão.
Observação
O ambiente atual do shell não tem node, npm nem docker instalados, então a validação de instalação, lint, build e compose precisa ser feita em uma máquina com essas ferramentas disponíveis.
Backup
Com DATABASE_URL e UPLOAD_DIR configurados:
sh scripts/backup.sh
Os arquivos são salvos em ./backups por padrão, com rotação de 14 dias.
Para restaurar:
sh scripts/restore.sh backups/db-YYYYMMDD-HHMMSS.sql backups/uploads-YYYYMMDD-HHMMSS.tar.gz
Produção
Crie o .env no servidor. Variáveis mínimas:
POSTGRES_DB=briefing
POSTGRES_USER=briefing
POSTGRES_PASSWORD=troque-esta-senha
DATABASE_URL=postgresql://briefing:troque-esta-senha@db:5432/briefing?schema=public
AUTH_SECRET=gere-um-segredo-forte
APP_URL=https://seu-dominio.com.br
APP_DOMAIN=seu-dominio.com.br
LETSENCRYPT_EMAIL=voce@dominio.com.br
CPF_ENC_KEY=chave-base64-com-32-bytes
CPF_HASH_KEY=segredo-hmac-forte
ADMIN_EMAIL=admin@dominio.com.br
ADMIN_INITIAL_PASSWORD=senha-inicial-forte
UPLOAD_DIR=/app/storage/uploads
UPLOAD_MAX_MB=25
Para gerar uma chave base64 de 32 bytes:
openssl rand -base64 32
Suba em produção:
docker compose -f docker-compose.prod.yml up -d --build
O serviço release roda prisma migrate deploy e o seed idempotente antes do app iniciar. O seed cria o admin inicial usando ADMIN_EMAIL e ADMIN_INITIAL_PASSWORD somente se o usuário ainda não existir.
Instalador em um comando
Depois que o repositório estiver acessível pelo servidor, você pode instalar em uma máquina limpa com Docker usando:
curl -fsSL https://gitea.seconectai.com.br/tiago/SeConectai_Web/raw/branch/main/scripts/install-server.sh \
| APP_DOMAIN=seu-dominio.com.br \
LETSENCRYPT_EMAIL=voce@dominio.com.br \
ADMIN_EMAIL=admin@dominio.com.br \
ADMIN_INITIAL_PASSWORD='troque-esta-senha' \
sh
Opcionalmente defina também:
INSTALL_DIR=/opt/seconectai-web
POSTGRES_PASSWORD=senha-forte-do-banco
AUTH_SECRET=segredo-auth
CPF_ENC_KEY=base64-32-bytes
CPF_HASH_KEY=segredo-hmac
SMTP_HOST=smtp.exemplo.com
SMTP_PORT=587
SMTP_USER=usuario
SMTP_PASS=senha
SMTP_FROM=contato@dominio.com.br
Evite colocar senha em parâmetro de URL. URL pode ficar gravada em histórico, logs e proxy. Passe segredo por variável de ambiente no comando ou edite o .env no servidor.
Sem domínio, para testar por IP em HTTP na porta 3000:
curl -fsSL https://gitea.seconectai.com.br/tiago/SeConectai_Web/raw/branch/main/scripts/install-server.sh \
| SERVER_IP=45.13.59.110 \
ADMIN_EMAIL=tiago27.dossantos@gmail.com \
ADMIN_INITIAL_PASSWORD='troque-esta-senha' \
sh
Depois acesse http://45.13.59.110:3000.
Para atualizar:
docker compose -f docker-compose.prod.yml pull
docker compose -f docker-compose.prod.yml up -d --build
O Postgres não publica porta externa no docker-compose.prod.yml; ele fica acessível apenas na rede interna do Compose. Os uploads ficam no volume nomeado uploads, e o banco no volume pgdata.
HTTPS
O docker-compose.prod.yml usa Caddy com o Caddyfile da raiz. Configure APP_DOMAIN e LETSENCRYPT_EMAIL no .env; o Caddy emite e renova o certificado automaticamente e redireciona HTTP para HTTPS.
Healthcheck
A aplicação expõe:
/api/health
Ela verifica app + conexão com o banco.
Configure SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS e SMTP_FROM. No DNS do remetente, confira SPF e DKIM do provedor SMTP para reduzir chance de spam. O sistema nunca envia CPF completo por e-mail.