# 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: ```sh cp .env.example .env ``` Instale as dependências: ```sh npm install ``` Rode o app: ```sh npm run dev ``` Ou suba com Docker: ```sh 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 sh scripts/backup.sh ``` Os arquivos são salvos em `./backups` por padrão, com rotação de 14 dias. Para restaurar: ```sh 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: ```sh 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: ```sh openssl rand -base64 32 ``` Suba em produção: ```sh 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: ```sh 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: ```sh 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`: ```sh 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: ```sh 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: ```sh /api/health ``` Ela verifica app + conexão com o banco. ## E-mail 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.