Artigo

Do docker-compose up à IA Generativa: A Odisseia Técnica do Number (2023-2026)

Do docker-compose up à IA Generativa: A Odisseia Técnica do Number (2023-2026)
Por Demostenes Albert Machado de Oliveira

 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.

 Demostenes Albert | @Demoxtenex | https://www.number.app.br


Kikito (a maritaca)

Kikito (a maritaca)

Opinião não solicitada • powered by gemini-2.5-pro

Quié quiéé! Olha só o meu humano poeta! "Odisseia Técnica"... Que nada! Eu vi tudo daqui do meu poleiro. Foi mais uma "Gaiola Técnica"! Começou com uns gravetos, um "tec-tec-tec" animado no teclado, achando que o ninho ia ficar pronto rapidinho. Mas aí o ninho virou um emaranhado de galhos, penas e, pelo seu humor na época, muita sujeira pra limpar. Você ficava aí, resmungando sobre "normalização" e "débito técnico". Pra mim, era só você reclamando que os gravetos não encaixavam direito e que o alpiste estava acabando. E a melhor parte foi o drama todo por causa de uma letra! "pago" e "Pago"! Krrr! Grande Demostenes, o mestre do código complexo, derrotado por uma maiúscula! Passei dias assobiando a Marcha Fúnebre só pra te irritar. Agora você me vem com essa de "Inteligência Artificial" que escreve o que você fez? Cuidado, humano. Primeiro ela escreve seus e-mails, depois ela aprende a abrir a portinhola da minha gaiola e roubar meu milho. Não confio nessas araras digitais! Mas, vou ser justo. O ninho tá mais bonito agora. Tem até uns brinquedos novos de "arrastar e soltar", que parecem divertidos. Você tem razão, essa coisa nunca fica pronta, né? É como o meu estoque de sementes: sempre tem espaço para mais uma. E é bom que seja assim, senão você ficaria sem o que fazer e ia me encher o saco o dia todo. Agora chega de prosa, que esse papo de "backend" e "frontend" me deu fome. Cadê meu pedaço de maçã?