尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Sistema interno da ASP (Advanced Services Provider / ASP Serviços Industriais) para gestão de inspeção robótica e execução de serviços em tanques e tubulações. Um Projeto (um pedido de compra) reúne várias Inspeções (tanques/ pontos), e cada inspeção percorre um fluxo de fases simétrico — Inspeção e Execução — com coleta de dados de campo, relatórios versionados, aprovação da gerência, agendamento com notificações e histórico auditável.
Stack: Next.js 14 (App Router · TypeScript · React 18) · Supabase (Postgres + Auth + Storage, com RLS) · Vercel · Resend (e-mail, opcional) · medidor de sedimento embutido (HTML/JS standalone).
Produção:
asp-plataform.vercel.app· Repo:github.com/douglaskengit-dev/ASP-PLATAFORM
Projetos & Inspeções
Fluxo de fases (por inspeção)
Avançar registra data de autenticação e autor. Aprovação (fases 5/9) avança; reprovação volta uma fase com a tag "Ajustar", exigindo motivo e preservando o histórico de versões.
Coleta — Medidor de Sedimento
postMessage com o app. Anexo de PDF também suportado. Outras
ferramentas (ultrassom, drone, MFL) marcadas como "em desenvolvimento".Relatórios
Agendamento
Dashboard
Clientes (reutiliza gp_orgaos) — cadastro/edição, busca e filtros, e
lixeira. Histórico — projetos em aberto. Arquivos — coletas e relatórios
agrupados por projeto/inspeção, com busca e filtros.
Notificações — sino no header com avisos persistidos (ex.: inspeção agendada) e as inspeções paradas numa fase sob responsabilidade do perfil do usuário.
Administração de usuários — criar usuários; Área/Acesso (Comercial, Operações, Gerência, Admin), Função (Coordenador, Engenheiro, Técnico), editar nome, redefinir senha e ativar/inativar.
Identidade visual — paleta ASP (azul #0f5cad / amarelo #e8c51f), fonte
Montserrat, badge + wordmark no header, mascote nos títulos.
| Área (perfil) | Atua nas fases | Observações |
|---|---|---|
| Comercial | 1, 2, 6 | abre projetos e agenda |
| Operações | 3, 4, 7, 8 | coleta e relatórios |
| Gerência | 5, 9 (+ todas) | aprova/reprova |
| Admin | tudo | + administração de usuários |
editor/visualizador) ainda são aceitos durante a migração.gp_projetos 1 projeto = 1 pedido de compra (cliente → gp_orgaos)
└── gp_inspecoes N por projeto; carregam as fases 2..10
├── gp_coletas medição (jsonb) + PDF do medidor
├── gp_relatorios inspeção/execução, versionados
├── gp_agendamentos data/hora, execução, equipe, checklist (jsonb)
└── gp_fase_historico auditoria de fases (ação, autor, data)
gp_notificacoes avisos in-app por usuário
gp_profiles perfil (área) + funcao
Soft-delete (excluido_em / excluido_por) em gp_projetos, gp_inspecoes e
gp_orgaos — a exclusão vira lixeira, recuperável por 30 dias, com
limpeza automática (preguiçosa) depois disso. Storage no bucket privado
gp-arquivos (coletas e relatórios).
O fluxo antigo (Processos/TR/Proposta/Ofício, tabelas
gp_processosetc.) permanece no repositório para reaproveitamento, mas fora da navegação.
Pré-requisitos: Node 18+, um projeto Supabase.
npm install
cp .env.example .env.local # preencha os valores
npm run dev # http://localhost:3000
Variáveis de ambiente (.env.local e Vercel):
| Variável | Uso |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | URL do projeto Supabase |
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY | chave publicável (client) |
SUPABASE_SECRET_KEY | chave secreta / service_role (só servidor) |
NEXT_PUBLIC_APP_URL | URL pública do app (links de e-mail) — opcional |
SMTP_HOST | servidor SMTP, ex.: smtp.gmail.com — definido, o e-mail sai por SMTP |
SMTP_PORT | 465 (TLS direto, padrão) ou 587 (STARTTLS) |
SMTP_USER | conta que envia, ex.: [email protected] |
SMTP_PASS | senha de app do Google (16 letras; espaços são ignorados) |
RESEND_API_KEY | envio pelo Resend (usado quando não há SMTP_HOST) |
EMAIL_PROVEDOR | smtp ou resend para forçar um provedor (opcional) |
EMAIL_REMETENTE | remetente, ex.: ASP <[email protected]> (opcional) |
EMAIL_RESPONDER_PARA | endereço de resposta (Reply-To) (opcional) |
Sem nenhum provedor configurado o e-mail é no-op (as notificações in-app seguem funcionando).
Migrations: aplique os arquivos de supabase/migrations/ no banco (SQL
Editor do Supabase ou supabase db push). Os relevantes ao fluxo ASP:
20260725120000_asp_novo_fluxo_v1.sql schema + RLS + perfis
20260727100000_asp_usuario_funcao.sql coluna funcao
20260728100000_asp_agendamento_notificacoes.sql hora + gp_notificacoes
20260729100000_asp_agendamento_data_execucao.sql data de execução
20260730100000_asp_projeto_soft_delete.sql lixeira de projeto
20260731100000_asp_soft_delete_inspecao_cliente.sql lixeira de inspeção/cliente
Envia convites, redefinição de senha e agendamentos (com o .ics) por uma
conta Gmail, sem precisar de domínio próprio:
SMTP_HOST=smtp.gmail.com
SMTP_PORT=465
SMTP_USER=<conta>@gmail.com
SMTP_PASS=<senha de app, 16 caracteres>
EMAIL_REMETENTE="ASP <[email protected]>"
EMAIL_RESPONDER_PARA=<opcional: endereço para respostas>
/api/diag (deve mostrar "provedor": "smtp",
SMTP_PASS_presente: true) e depois /api/[email protected] para
enviar um teste; o erro, se houver, vem em português.Observações:
EMAIL_REMETENTE
for outro, o sistema usa o SMTP_USER e mantém o nome (o /api/diag avisa).RESEND_API_KEY pode continuar definida: com SMTP_HOST o SMTP tem
precedência. EMAIL_PROVEDOR=resend volta para o Resend sem apagar nada.E-mail (Resend, alternativa): crie a conta, verifique um domínio em
Domains (registros SPF/DKIM) e defina RESEND_API_KEY/EMAIL_REMETENTE.
app/
page.tsx landing pública
login/ autenticação (Supabase)
dashboard/ KPIs, gráficos e calendário
projetos/ lista, detalhe, edição e lixeira
inspecoes/[id]/ fases, coleta, agendamento, relatórios, histórico
arquivos/ documentos por projeto/inspeção
orgaos/ clientes (cadastro, edição, lixeira)
admin/usuarios/ administração de usuários
api/ route handlers (projetos, inspecoes, coletas,
relatorios, agendamentos, notificacoes, usuarios…)
components/ BarraUsuario, Modal, TituloPagina, CalendarioAgenda,
NotificacoesBotao, FormularioOrgao, DashboardCharts…
lib/
asp/fases.ts modelo de fases e ações
asp/permissoes.ts regras de exclusão
supabase/ clients (browser, route, admin/server)
email.ts, ics.ts, email-templates.ts
public/ferramentas/ medidor de sedimento (HTML standalone)
supabase/migrations/ migrations SQL
npx tsc --noEmit (type-check) e, quando possível, npm run build
antes do push.SUPABASE_SECRET_KEY),
nunca no navegador.