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

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?
