Se você já tentou manter um software vivo por mais de três anos, sabe que a entropia é a única certeza. Projetos de software não morrem porque a tecnologia é ruim; eles morrem porque a complexidade cresce mais rápido que a capacidade da equipe de gerência-la.
Hoje, quero abrir o capô do Number. Não para falar de features bonitas, mas para dissecar a jornada de engenharia desde aquele primeiro git init em 19 de junho de 2023 até hoje, março de 2026, onde temos uma IA escrevendo nossos changelogs.
Esta é a história de como transformamos um CRUD de centros de custo em um ecossistema financeiro inteligente.
---
O Início: A Ilusão do CRUD Simples (2023)
Voltemos a junho de 2023. O cenário era clássico: Laravel, Docker e uma missão. O primeiro commit, "instalando laravel para dar inicio ao projeto junto do docker", parecia inofensivo.
Naquela época, a preocupação era infraestrutura básica. "Fazer o CRUD de usuários", "Ajustar visualização de senha". É a fase da lua de mel. Tudo funciona porque não existe legado.
O banco de dados tem dez tabelas e você acha que um User::all() nunca vai ser um gargalo.
Mas a realidade bate rápido. Quando você começa a implementar "Processo de Faturamento" e "Rateio de Centros de Custo", você descobre que a contabilidade não perdoa abstrações mal feitas. Se o seu Schema não refletir a realidade do DRE (Demonstrativo do Resultado do Exercício), você vai passar os próximos dois anos fazendo if no código para corrigir modelagem errada no banco.
A lição aqui: Normalização de banco de dados não é preciosismo acadêmico; é o que impede você de ter que fazer três JOINs para descobrir de quem é uma conta a pagar dois anos depois.
A Adolescência: Dívida Técnica e a Guerra dos Padrões (2024-2025)
Conforme o sistema crescia, o "jeitinho" começou a cobrar juros. Chegamos a um ponto onde tínhamos classes de serviço vitais, como o DREService, que precisavam desesperadamente de refatoração.
Recentemente, tivemos que parar tudo para alinhar o projeto à PSR-4. Pode parecer burocracia, mas quando você tem milhares de classes, o autoloading precisa ser previsível. Tivemos commits inteiros dedicados a renomear DREService para DreService e corrigir namespaces.
E não vamos esquecer a infraestrutura. A luta para manter o ambiente de desenvolvimento (Docker) alinhado com a produção é eterna. Tivemos vazamentos de memória no PHP 8.2, brigas com o Xdebug que precisava ser isolado via build args para não matar a performance em produção.
> O Momento Akita: Não existe 'funciona na minha máquina' quando você está lidando com dinheiro dos outros. Se o Docker não está idêntico à produção, você está apenas brincando de programador.
A Maturidade: CRM, Performance e o Bug do "Pago" (Início de 2026)
Em 2026, o Number deixou de ser apenas um sistema passivo (que guarda dados) para ser ativo (que gera valor). Implementamos um CRM completo, com pipeline de vendas, integração com WhatsApp (Meta API) e automação de cobranças.
Mas com grandes poderes vêm grandes race conditions.
Um dos bugs mais instrutivos que enfrentei recentemente foi no Dashboard Gerencial. O sistema mostrava valores zerados para contas recebidas. O motivo? O banco de dados retornava o status como 'pago' (minúsculo), mas o código PHP comparava com 'Pago' (maiúsculo).
Como usamos Collections do Laravel para filtrar dados em memória (para evitar re-queries excessivas), a comparação where() era case-sensitive.
A correção: Normalizar os dados na hidratação do objeto.
A lição: Nunca confie que o dado que entra no banco é o mesmo que sai. Sanitize inputs, normalize outputs.
Otimização Extrema: SQL Union
Para o histórico de conciliação bancária, o Eloquent ORM, por mais maravilhoso que seja, começou a engasgar. A solução? Descer para o SQL cru e usar UNION para juntar tabelas de histórico e transações em uma única query otimizada. Às vezes, você tem que sujar as mãos de SQL para garantir que o usuário não fique vendo um spinner girar.
A Era da IA: O Number Ganha Vida (Março de 2026)
Aqui é onde a mágica acontece. Não nos contentamos em integrar a API da OpenAI ou Google Gemini para fazer um chatbot bobo. Nós integramos a IA no Core do negócio.
1. Leitura de Documentos: O sistema agora "lê" anexos. PDF, imagem, o que for. Ele extrai dados de faturas e comprovantes automaticamente.
2. Changelog Automatizado: Cansado de escrever e-mails de "Novidades da Semana"? Criamos um Job (WeeklyChangelogService) que lê os commits do git log (sim, o mesmo que analisei para escrever isso), usa A.I. para resumir em linguagem humana e de marketing, e envia para os clientes via WhatsApp e E-mail.
O código agora escreve sobre o próprio código. Isso é meta-programação no nível de produto.
UX/UI: A Batalha Final
Performance de backend não salva UI ruim. Nos últimos meses, investimos pesado em front-end.
* Tours Guiados: Implementamos onboarding interativo. Não é um vídeo; é o sistema destacando elementos na tela, guiando o usuário.
* Drag-and-Drop: O Kanban de Leads e a organização dos cards do Dashboard agora são arrastáveis. Parece fútil? Tente organizar prioridades de vendas numa tabela estática e me diga se é fútil.
* Design System: Padronização visual. O header do tour, as cores dos status (aquele amarelo específico para "Pendente"), o feedback visual de salvamento.
Conclusão: O Código Nunca Para
Olhando para trás, desde aquele instalando laravel em 2023 até o feat(ui/tour) de hoje, a sensação é de vertigem. O Number não é mais o mesmo software. Ele evoluiu, quebrou, foi consertado, refatorado e expandido.
Nós saímos de "fazer o sistema funcionar" para "fazer o sistema trabalhar pelo usuário".
A lição final para você, dev, que está começando seu projeto agora, é uma só: não espere a perfeição para colocar o seu código no mundo. O código perfeito é uma ilusão que só existe no localhost. No mundo real, o que importa é a resiliência e a capacidade de se adaptar.
Software nunca está pronto.
Ele está sempre em produção - e em evolução.
Bem-vindos à nova era do Number.