Pular para o conteúdo

SaaS de gestão de obra, produto próprio

Obly

SaaS de gestão de obra em produção, usado pela web e pelo aplicativo iOS baixado na App Store. API em NestJS sobre PostgreSQL servindo uma aplicação web em Next.js e um aplicativo em Expo, vendido por assinatura em três planos e construído por especificação: a intenção do produto vive num repositório de documentação que antecede o código.

Papel
Autoria única: produto, arquitetura e engenharia em seis repositórios.
Período
2026 até hoje
Situação
Em produção, na web e na App Store
Painel do Obly comparando orçamento e despesa da obra, com curva S e concentração por categoria.

O que o sistema faz

  • Diário de obra registrado no canteiro, com foto tirada na hora e digitalização de documento pela câmera.
  • Financeiro por obra: orçamento por etapa, despesa, cotação de fornecedor e comparação entre orçado e gasto.
  • Cronograma com EAP, montagem assistida e importação de XML do MS Project.
  • Acervo de documentos no nível da conta, com projeto, contrato, nota fiscal e licença.
  • Leitura de planta em PDF e importação de orçamento em planilha, as duas por modelo de linguagem, com revisão obrigatória antes de gravar.
  • Assistente de voz que classifica o que foi dito e transforma em lançamento.
  • Relatório de obra em PDF, montado a partir do que já foi lançado.
  • Time do assinante e acesso do cliente, com permissão por papel.
  • Assinatura em três planos, com teste de catorze dias sem cartão.

Arquitetura

  • API em NestJS sobre PostgreSQL concentra a regra de negócio, em vinte e sete módulos e setenta e sete migrations. Web em Next.js e aplicativo em Expo consomem o mesmo modelo de domínio.
  • Isolamento por conta contratante: time, plantas, armazenamento e direitos comerciais vivem no nível da conta, não do usuário. Não existe entidade de conta separada, a conta é o usuário dono.
  • Autenticação por token do Firebase verificado no servidor em guard de rota. O backend não guarda senha, sessão nem refresh token.
  • Motor de direitos no servidor: catálogo de capacidades, molde por plano em tabela, guard por capacidade nas rotas de escrita e reserva mensal atômica para a cota de importação por modelo.
  • Arquivo do acervo em armazenamento compatível com S3 no Cloudflare R2, com URL assinada para subir e baixar. O PostgreSQL guarda a chave do objeto, e a reconciliação de upload abandonado roda uma vez por dia.
  • Planta em PDF renderizada com mupdf e interpretada por modelo Gemini. O mesmo provedor atende a importação de orçamento e a classificação do assistente, sempre com saída validada por esquema antes de virar escrita.
  • Importação de cronograma a partir de XML do MS Project e de planilha. A importação é sempre prévia: nada entra no domínio antes da confirmação.
  • Cobrança por assinatura em Stripe, com preço lido do provedor e nunca copiado para banco ou tela.
  • CI contra PostgreSQL real em GitHub Actions, migration aplicada antes do deploy e rotina diária de limpeza agendada no mesmo lugar.
  • Repositório de documentação sem código guarda a intenção do produto: PRD único, cento e setenta e seis regras de negócio com status em quinze domínios, seis ADRs, especificação por funcionalidade com critério de aceitação, e duas skills que descrevem o procedimento de mudança.

Detalhes de implementação

  • Nenhum preço fica escrito em banco ou em tela: o catálogo é lido do provedor de pagamento a cada consulta.
  • O webhook de cobrança registra o evento antes de qualquer mapeamento, e um índice único parcial garante uma assinatura vigente por conta.
  • O aplicativo não vende assinatura: a cobrança acontece na web, e o aplicativo apenas lê o direito vigente.

Tecnologias

TypeScript
Linguagem única nos três repositórios de aplicação.
NestJS
Framework da API, com módulos, guards e injeção de dependência.
TypeORM
ORM e as setenta e sete migrations versionadas.
PostgreSQL
Banco único do produto.
Next.js
Aplicação web autenticada.
React Native e Expo
Aplicativo iOS e Android, com navegação por arquivo e entrega por EAS.
Firebase Auth
Identidade na web e no aplicativo, com o token verificado no servidor.
Stripe
Checkout, portal do assinante, assinatura e webhook.
Cloudflare R2
Armazenamento de foto, miniatura e documento, com URL assinada.
Gemini
Leitura de planta, importação de orçamento e classificação do assistente de voz.
mupdf
Renderização da planta em PDF antes da leitura pelo modelo.
exceljs e fast-xml-parser
Leitura da planilha de orçamento e do XML do MS Project.
Zod
Validação da saída do modelo antes de virar escrita no domínio.
TanStack Query
Cache e sincronização de dados na web.
Tailwind CSS
Estilo da aplicação web.
Jest, Supertest e Vitest
Testes da API, da web e do aplicativo.
Swagger
Documentação da API.
Expo Push
Notificação entregue pela API, em lote, com revogação de token inválido.
PostHog
Analytics de produto no aplicativo.
GitHub Actions
CI contra PostgreSQL real e rotina diária de limpeza.
  • Cronograma da obra em Gantt, agrupado por etapa, com barra de concluído, em andamento e pendente, e a linha de hoje.
  • Importação de XML do MS Project em revisão: três etapas e dez atividades detectadas, com seleção item a item antes de criar.
  • Importação de orçamento por modelo de linguagem, com a lista de itens aberta para revisão antes de gravar.
  • Diário de obra no aplicativo, com foto tirada no canteiro.
  • Acervo de documentos da obra, com pastas de projeto, contrato, nota fiscal e licença.
  • Capa do relatório de obra gerado para o cliente.

Quer conversar sobre arquitetura, decisão técnica e entrega em produção?

Retrato de Thiago Sanches

Dados de contato

Disponível para trabalho remoto em times internacionais

Nome
Thiago Sanches
Localização
Brasil · UTC−3 · trabalho remoto
Idiomas
Português nativo · inglês com fluência profissional
Baixar currículo

Experiência

  • 5 anos

    em sistemas corporativos

  • 70%

    menos tempo por relatório novo

  • 50%

    menos latência em GraphQL

  • Workers

    processos assíncronos com filas em Redis