← Todos os projetos
01Produto próprio · 2026

Team Desk.

A operação inteira de uma rede de franquias num sistema só, com cada pessoa vendo só o que é dela.

SaaS multi-tenantAuditoria imutável~2 mil testes
Dashboard do Team Desk em modo escuro
Dashboard do Team Desk no celular

O problema

Falta de indicadores · Retrabalho

Uma franqueadora precisa padronizar várias unidades e saber o que acontece em cada uma, sem planilha nem grupo de WhatsApp. Dono, consultor, franqueado, gerente e colaborador veem e fazem coisas diferentes, e nada pode vazar de uma unidade para outra.

O que construí

Construí o produto inteiro, do PRD ao deploy. O SLA conta horas úteis e escala sozinho. Inspeção enviada a mais de 200 metros da unidade vai para revisão. Cada item "não conforme" vira um plano 5W2H com prazo de 7 dias. Lead aprovado vira unidade, com chat e projeto de implantação criados na mesma transação. O cronograma recalcula o caminho crítico toda noite, e a universidade corporativa emite certificado com página pública de verificação.

Decisões técnicas

  1. 01Auditoria que nem a aplicação consegue apagar

    A tabela de auditoria é particionada por mês, e a role do banco que a aplicação usa não tem UPDATE, DELETE nem TRUNCATE nela. Um bug, ou alguém com acesso ao app, não reescreve o histórico.

    Onde está no código: drizzle/0002_audit_partition_grants.sql

  2. 02Webhooks assinados e protegidos contra SSRF

    Cada entrega leva HMAC-SHA256 sobre timestamp e corpo cru, tenta 6 vezes com backoff e desativa o endpoint depois de 10 falhas. Antes de chamar a URL do cliente, uma resolução de DNS própria recusa faixas de rede privada.

    Onde está no código: lib/webhooks/signature.ts · url.ts · deliver.ts

  3. 03API pública que aguenta retry

    Todo POST exige Idempotency-Key, a paginação é por cursor, o limite é de 300 requisições por minuto e o contrato sai em OpenAPI 3.0. Cliente que repete a chamada não cria nada em dobro.

    Onde está no código: lib/api/idempotency.ts · openapi.ts

  4. 04Três processos, um domínio

    Web (Next), workers (BullMQ) e tempo real (Socket.io com adapter Redis) rodam separados sobre o mesmo código de domínio. Job pesado não trava a tela de ninguém.

  5. 05Testes contra banco de verdade

    Cerca de 2.050 testes Vitest e 85 E2E. Os de integração rodam contra Postgres e Redis reais, e o CI ainda confere se as migrações batem com o schema. Upload confere os magic bytes do arquivo, e rich text fica guardado como JSON validado, nunca como HTML.

Números

552

commits, autor único

~2k

testes Vitest

85

testes E2E

61

tabelas

55

páginas

13

eventos de webhook

Stack

  • Next.js 15
  • React 19
  • TypeScript
  • Tailwind 4
  • shadcn/ui
  • Better Auth
  • PostgreSQL 16
  • Drizzle
  • Redis
  • BullMQ
  • Socket.io
  • S3
  • Vitest
  • Playwright
  • Docker

Telas

Implantação de unidade com Gantt
Fila de chamados com SLA
Chat da rede
Próximo case

Finance Web