尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗cp .env.example .env # preencha NEXTAUTH_SECRET, ENCRYPTION_KEY e HASH_KEY (openssl rand -hex 32)
bash scripts/preparar-migrations.sh # sobe o Postgres, instala e gera prisma/migrations
npm run db:seed # dados de demonstração
npm test # testes unitários
npm run dev # http://localhost:3000
Logins de demo (senha Demo@12345): dono@, engenheiro@, encarregado@, fiscal@, cliente@, compras@ demo.com.
| Peça | Arquivo |
|---|---|
| Schema completo (13 módulos) | prisma/schema.prisma |
| Login (bcrypt, bloqueio, 2FA TOTP opcional) | src/lib/auth/options.ts |
| Matriz de permissões (5 perfis) | src/lib/auth/permissions.ts |
| Acesso por obra (anti-IDOR) | src/lib/auth/guard.ts |
| Criptografia CPF/banco (AES-256-GCM) | src/lib/crypto.ts |
| Auditoria sem dados sensíveis | src/lib/audit.ts |
| Raio GPS do ponto, horas extras | src/lib/geo.ts, src/lib/jornada.ts |
| Fluxo de aprovação de compras | src/lib/compras.ts |
| Seed e CI | prisma/seed.ts, .github/workflows/ci.yml |
/api/obras/[id]/... chama exigirPerfilNaObra() e depois assertCan().registrarAuditoria().crypto.ts.Obras (CRUD + painel) → Usuários → Ponto (PWA + câmera + GPS) → Diário → Etapas/Gantt → Compras → Financeiro.
/login (com etapa do código 2FA, quando a conta tiver ativado), menu lateral (desktop) e barra inferior (celular), tema claro/escuro/dashboard: resumo e cartões de cada obra (avanço físico, custo, semáforo do prazo)/obras, /obras/nova (só o dono), /obras/[id] (painel, etapas, mapa, equipe, mudança de situação)/perfil e /perfil/2fa (QR code para o aplicativo autenticador)Para ver: npm install e npm run dev, abrir http://localhost:3000.
/obras/[id]/ponto: bater entrada, almoço e saída; entrada e saída pedem foto (câmera do celular) e GPS*FotoUrl já aceitam URL).prisma db push nem seed de novo./obras/[id]/diario: situação de hoje, dias úteis sem diário concluído (alerta), histórico de 60 dias e gerador de relatório/obras/[id]/diario/AAAA-MM-DD: diário do dia (turno: manhã, tarde ou dia inteiro)
/obras/[id]/diario/relatorio?de=&ate=: relatório do período (máx. 31 dias) para imprimir ou salvar em PDF, com ou sem fotos/obras/[id]/etapas: lista em árvore (etapa > sub-etapa > sub-sub-etapa), Gantt (planejado x realizado, hoje, atrasadas em vermelho), andamento informado direto na lista/obras/[id]/medicoes: fechar medição do período (andamento atual − medição anterior) e boletim para imprimir ou salvar em PDFPrecisa de migração: 20261021200000_compras_pagamentos (chave PIX no fornecedor;
vencimento, favorecido e PIX na despesa). Rode npm run db:deploy antes de subir o código.
/obras/[id]/compras: solicitação (encarregado) → aprovação (engenheiro; acima do
limite da empresa, o dono) → ordem de compra com fornecedor e prazo de pagamento →
enviada → entregue. Na entrega nasce a conta a pagar, com o PIX do fornecedor.
Preço acima da média histórica do material aparece como alerta./pagamentos: todas as obras com o que falta pagar, o vencido e o próximo vencimento;
lista das contas com "Copiar PIX", QR code e "Marcar como paga". Cada conta é uma
Despesa (pagamento nulo = em aberto), então entra no custo real da análise.unpdf),
foto (QR do PIX e código de barras pelo leitor do celular; o resto pelo assistente, se
ASSISTENTE_API_KEY estiver configurada) ou texto colado. PIX e linha digitável são
conferidos pelos dígitos verificadores; a pessoa confere tudo antes de salvar./fornecedores: cadastro com chave PIX.[email protected] no seed): setor de compras, em todas as obras.
Abre pedido, emite e envia a ordem de compra, cadastra fornecedor e registra a entrega;
não aprova e não vê o financeiro. Só o dono cria um Comprador. /compras reúne os
pedidos em aberto de todas as obras (esperando ordem, a caminho, aguardando aprovação).src/lib/voz.ts), sem IA.
Funciona no Chrome/Edge e no Safari do iPhone; no Firefox, digite o comando./obras/[id]/diario/AAAA-MM-DD/rdo — folha A4 no formato de papel
(cabeçalho, clima por turno, mão de obra, equipamentos, serviços, fotos, assinaturas).
?branco=1 gera o modelo vazio para preencher à mão.A pasta prisma/migrations/ precisa existir e estar commitada. Sem ela o
Vercel não tem como criar as tabelas no Neon.
bash scripts/preparar-migrations.sh
git add prisma/migrations && git commit -m "migrations iniciais"
Crie o projeto na região AWS São Paulo (sa-east-1) — não aceite o padrão
dos Estados Unidos: cada consulta atravessaria o continente e o app é usado em
campo, no celular.
Copie as duas strings de conexão. A agrupada tem -pooler no host:
| Variável | String | Para quê |
|---|---|---|
DATABASE_URL | [email protected]/...?sslmode=require&pgbouncer=true&connect_timeout=15 | tempo de execução |
DIRECT_URL | [email protected]/...?sslmode=require | migrations |
Importe o repositório (detecta Next.js sozinho). O vercel.json já fixa a
região gru1, junto do banco.
Variáveis de ambiente, em Production e Preview:
DATABASE_URL = <agrupada do Neon>
DIRECT_URL = <direta do Neon>
NEXTAUTH_URL = https://seu-dominio.vercel.app
NEXTAUTH_SECRET = openssl rand -base64 32
ENCRYPTION_KEY = openssl rand -hex 32
HASH_KEY = openssl rand -hex 32
As duas últimas são irrecuperáveis. Perder
ENCRYPTION_KEYtransforma todo CPF e dado bancário do banco em lixo — não existe recuperação. TrocarHASH_KEYfaz a busca por CPF parar de encontrar os registros antigos. Guarde as duas num cofre antes de subir.
O build do package.json roda prisma migrate deploy && prisma generate && next build — as tabelas são criadas no primeiro deploy.
Nunca rode npm run db:seed em produção: ele cria usuários com a senha
pública Demo@12345. Use o bootstrap, que cria só a empresa real, a
configuração e o primeiro administrador:
EMPRESA_NOME="Construtora X" ADMIN_NOME="Seu Nome" \
ADMIN_EMAIL="[email protected]" ADMIN_SENHA="<12+ caracteres>" \
DATABASE_URL="<direta do Neon>" ENCRYPTION_KEY=... HASH_KEY=... \
npm run db:bootstrap
Entre com esse e-mail e senha. A verificação em duas etapas é opcional: fica em Perfil → Verificação em duas etapas. Quem ativa passa a ter o código pedido no login; quem não ativa entra só com e-mail e senha.
Com dados reais de trabalhador no banco (CPF, foto de rosto, GPS), ative o 2FA pelo menos na conta do dono, que enxerga todas as obras.
*FotoUrl já aceitam URL.NEXTAUTH_URL é fixa, então o login falha nas URLs
geradas por preview. Aponte a Preview para uma URL fixa de homologação ou
teste só em produção.&connection_limit=1 à DATABASE_URL.