EN

Nº 04de 22Destaque

Portal TECNA

O super app interno da TECNA em Next.js 16: quatro sistemas novos meus — Qualidade com tela de campo sem sinal, Planejamento com caminho crítico, Segurança e Gerenciamento de Projetos —, o manual do proprietário e o CMS do site

Ano
2026
Status
NO AR
Papel
Full-stack · equipe IOTech
Stack
Next.js 16 · React 19 · TypeScript · Drizzle ORM +7
portal-tecna
PT

Next.js 16

Sem captura pública — capa gerada

01O projeto

O Portal TECNA reúne sob um login só os sistemas internos da construtora — atendimento pós-obra, portal do cliente, departamento pessoal, suprimentos, o manual do proprietário e o CMS do site comercial —, num app Next.js 16 / React 19 com um deploy e um PostgreSQL só, via Drizzle. É projeto de equipe na IOTech, em repositório privado: dos 1.288 commits, 256 são meus, entre o fim de agosto e outubro de 2026. O que é meu: 118 commits no módulo do manual do proprietário, os quatro sistemas novos — Qualidade, Planejamento, Segurança e Gerenciamento de Projetos — e o CMS “Site Institucional” que alimenta o site comercial da TECNA.

02O que foi feito

  1. Qualidade: a tela de campo funciona sem sinal — a aplicação inteira fica no IndexedDB antes de ir para a rede, um service worker reabre a tela offline, e a fila (criar, respostas, arquivos, concluir) só esvazia com a confirmação do servidor, com teto de 3 MB

  2. Reenvio sem duplicar: a inspeção nasce com o id gerado no aparelho (o mesmo corpo de novo responde 200 com criada: false; o mesmo id em outro checklist, 409), o anexo é deduplicado pelo clienteId e a resposta mais velha não passa por cima da mais nova

  3. Planejamento: o cálculo do cronograma é uma função pura usada no servidor e na prévia da tela — dias úteis, predecessoras (vale a mais atrasada), ciclo recusado, atraso real e caminho crítico — e o Gantt mostra a linha de base

  4. Manual do proprietário: o quadro da obra exportado em PDF e em Excel, e quatro otimizações minhas — uma consulta por obra em vez de uma por unidade, o logo embutido uma vez por PDF em vez de por página, a lista de fichas sem baixar o texto de todas e o segundo PDF da mesma obra saindo na hora

  5. CMS “Site Institucional”: abas por página do site comercial, gravação por seção que não apaga a edição de outra, limpeza do HTML dos posts por lista fechada e tradução automática por LLM em lotes, sem atropelar o que se digita

03Decisões

Decisão 01

Pergunta: Como uma inspeção de qualidade sobrevive a uma obra sem sinal?

Resposta: Tratando a rede como a parte que falha. Tudo é gravado no aparelho primeiro; o envio é uma fila ordenada que só tira um passo quando o servidor confirma — rede caída, 5xx e 401 param e guardam. Do outro lado, toda rota aceita o mesmo pedido duas vezes sem duplicar, porque a fila VAI reenviar: a inspeção nasce com o id do aparelho e o anexo carrega o clienteId.

Decisão 02

Pergunta: O que é meu num sistema de 1.288 commits?

Resposta: É projeto de equipe, e a maior parte dos commits é de outras pessoas. O que reivindico é o que o histórico confirma no meu nome — o manual do proprietário, os quatro sistemas novos e o CMS do site. Login, hub, atendimento pós-obra e portal do cliente aparecem aqui como contexto, não como autoria.

04Stack

  • Next.js 16
  • React 19
  • TypeScript
  • Drizzle ORM
  • PostgreSQL
  • Zod
  • IndexedDB
  • Service Worker
  • Vitest
  • Playwright
  • Vercel
Próximo projeto →Nº 05

Assistente com RAG: coleta diária em GitHub Actions, busca vetorial em Postgres com pgvector e resposta ancorada no contexto recuperado