Pular para o conteúdo

Voltar aos projetos

Projeto freelance

Em desenvolvimento, entrega prevista: dezembro de 2026 Arquitetura, revisão de código, testes e segurança ficam a meu cargo; o código é gerado com IA sob a minha direção.

CRM para controle de pragas

CRM para uma empresa de controle de pragas. Os técnicos escaneiam o QR code de cada estação e preenchem o relatório no local, o escritório agenda e faz orçamentos, e cada cliente consulta seus relatórios assinados em um portal.

Cliente
Controltec Fumigaciones
Contexto
Freelance · Projeto individual
Período
julho de 2026 – atual
Tecnologias
  • FastAPI
  • Python
  • React
  • TypeScript
  • Material UI
  • Expo
  • React Native
  • Supabase
  • PostgreSQL
  • Render
  • WhatsApp Cloud API (Meta)
  • Google Maps

Pontos-chave

  1. Cada estação de controle tem uma etiqueta com QR code. O técnico a escaneia e registra no local a constatação (por exemplo, o consumo da isca), o estado do dispositivo, as pragas encontradas e uma foto. O relatório não pode ser assinado enquanto faltar alguma estação do serviço.

  2. Quando o cliente e o técnico assinam, o sistema gera o PDF no formato da empresa e o arquiva sem alterações: é a evidência apresentada em uma auditoria. Se o cliente for pessoa jurídica e houver aplicação de produtos, também emite o certificado de controle de pragas com a assinatura do proprietário.

  3. Integrei a WhatsApp Cloud API da Meta para enviar ao cliente uma mensagem de modelo quando o relatório dele é assinado, e o Google Maps para marcar no mapa os endereços dos clientes e abrir a rota no celular do técnico.

  4. O app de campo, feito com Expo e React Native, permite concluir o relatório inteiro sem sinal: guarda cada etapa no celular e a envia sozinho quando a conexão volta, sem duplicar relatórios nem pagamentos.

  5. O escritório tem agenda por mês, semana, dia e técnico, clientes com seus endereços e estações, orçamentos em PDF, serviços recorrentes, receitas e contas a receber, e estatísticas de pragas e tendências das estações.

Problema

Em uma auditoria sanitária, uma empresa de controle de pragas precisa comprovar o que aconteceu em cada visita: quais estações foram verificadas, o que foi encontrado, qual produto foi aplicado e quem assinou. O relatório de serviço era o formulário impresso da empresa, e o certificado de controle de pragas era emitido à mão. Além disso, os técnicos trabalham em depósitos e subsolos onde o sinal cai.

Solução

Uma única API em FastAPI atende a uma aplicação web com três visões e a um app móvel. No escritório, a equipe agenda as visitas, gerencia os clientes com seus endereços e estações, faz orçamentos e acompanha os pagamentos. Em campo, o técnico abre sua jornada, escaneia o QR code de cada estação e completa o relatório em quatro etapas: estações, produtos aplicados, comprovações e assinaturas do cliente e do técnico. Ao assinar, o sistema arquiva o PDF, emite o certificado quando for o caso e avisa o cliente pelo WhatsApp. No portal, cada cliente consulta seus serviços, as próximas visitas, suas estações e seus certificados.

Decisões técnicas

  • O FastAPI é a única porta de acesso aos dados: nem o navegador nem o app falam com o Supabase, e as fotos, assinaturas e PDFs são servidos pela API.
  • As permissões são concedidas por capacidade, não por perfil. Cada endpoint declara a que exige, e um registro fora do alcance do usuário responde 404 para não revelar quais clientes existem.
  • Um relatório assinado nunca é editado: o PDF é arquivado no momento da assinatura e não é gerado de novo com catálogos que possam ter mudado depois.
  • O desenvolvimento usa um Supabase local no Docker com dados anonimizados. O backend, a aplicação web e o app se recusam a iniciar em desenvolvimento se apontarem para produção.

Tratamento de falhas

  • O aviso pelo WhatsApp roda em segundo plano depois da resposta: se falhar, o relatório continua assinado. Só os erros temporários são repetidos, até três vezes.
  • No app de campo, cada ação entra em uma fila no SQLite. O fechamento do relatório e a declaração de pagamento levam uma chave gerada no celular; assim, reenviá-los depois de perder a resposta não cria um segundo relatório nem uma segunda receita.
  • Se o servidor rejeitar um envio, nada é apagado: ele fica em “Requer atenção” com o motivo, e o técnico decide se tenta de novo, corrige ou descarta.

Meu papel

Desenvolvo o projeto sozinho, de ponta a ponta. Projetei o banco de dados no Supabase (PostgreSQL) e o mantenho com migrações versionadas; construí a API em FastAPI, organizada por módulos de negócio; implementei a aplicação web em React, TypeScript e Material UI a partir de um protótipo no Figma, e o app de campo com Expo e React Native. Integrei a WhatsApp Cloud API e o Google Maps, configurei o deploy no Render e escrevi mais de mil testes automatizados para o backend.

Resultados

  • O cliente também contratou a manutenção.

Próximos passos

Compilar e testar o app no iOS, fazer a câmera do celular abrir o app ao escanear uma etiqueta (hoje abre a versão web) e desenvolver o módulo de despesas.

Código privado por confidencialidade com os clientes; capturas de tela, arquitetura e demonstração disponíveis mediante solicitação.