Sistema de Gestão da Loja de Ferragens El Mallín
Link do projeto:
Uma solução Full-Stack robusta de ponto de venda e estoque, projetada para modernizar um negócio familiar tradicional. Transforma registros manuais em um ecossistema digital de alto desempenho, com controle de estoque em tempo real, gestão inteligente de dívidas e integridade transacional atômica.
Tecnologias utilizadas

🛠️ O Desafio
“El Mallín” é uma tradicional loja de ferragens familiar que já tinha superado suas raízes analógicas. Gerenciar mais de 20.000 itens diferentes em registros de papel criava gargalos críticos:
- 📉 Divergência de estoque: diferenças entre o estoque real e os valores registrados.
- 🐌 Caixa lento: a consulta manual de preços e o registro de dívidas atrasavam o atendimento.
- 💸 Gestão da inflação: atualizar milhares de preços manualmente em uma economia volátil era impossível.
Projetei e desenvolvi uma Solução de Transformação Digital sob medida para centralizar as operações, garantir rigorosamente a integridade dos dados e oferecer inteligência de negócio em tempo real.
🚀 Principais Funcionalidades
📦 Motor Inteligente de Estoque e Preços
- Busca de alto desempenho: Implementei indexação otimizada por SKU e por texto para consultar milhares de produtos em milissegundos.
- Preços à prova de inflação: Criei uma Ferramenta de Atualização em Massa que usa transações de banco de dados para aplicar aumentos percentuais a categorias inteiras instantaneamente, um recurso essencial para se adaptar à economia.
- Controle visual de estoque: Alertas automáticos na interface e no backend para itens com estoque baixo, evitando vendas perdidas.
💳 PDV Integrado e Livro de Dívidas
- Transações atômicas: Vendas e registros de dívidas são envolvidos em transações de banco de dados (compatíveis com ACID). Uma única ação reduz o estoque, atualiza o saldo do cliente e registra a movimentação. Se qualquer parte falhar, toda a operação é revertida, garantindo 100% de consistência dos dados.
- Armazenamento híbrido: Usei colunas
JSONdo PostgreSQL na tabelaaccount_movementspara guardar os detalhes não estruturados do carrinho (itens, quantidades), mantendo os dados financeiros principais estruturados para relatórios rápidos. - Limpeza inteligente do histórico: Desenvolvi um algoritmo que arquiva ou exclui automaticamente o histórico de transações quando o saldo do cliente chega a zero, otimizando o armazenamento e o desempenho das consultas ao longo do tempo.
- Faturamento profissional: Integrei o
dompdfpara gerar na hora extratos de conta e recibos em PDF com a identidade visual da loja.
🔐 Segurança de Nível Empresarial e UX
- Controle de acesso baseado em funções (RBAC): Permissões granulares que separam o perfil ‘Admin’ (dados financeiros sensíveis, permissão de exclusão) do perfil ‘Funcionário’ (vendas, consulta de estoque).
- Experiência ‘de corredor’ mobile-first: Uma interface totalmente responsiva construída com Tailwind CSS, permitindo que a equipe consulte estoque e preços pelo celular enquanto atende os clientes na loja.
💻 Arquitetura Técnica: O “Monólito Moderno”
Escolhi uma arquitetura Laravel 11 + Inertia.js para combinar a simplicidade de um monólito com a interatividade de uma Single Page Application (SPA).
- Gerenciamento de estado fluido: O Inertia.js funciona como a cola que me permite construir um frontend React completo, fortemente integrado ao backend em Laravel, eliminando a necessidade de uma camada de API complexa ou de stores de estado no cliente (como Redux).
- Confiabilidade do banco de dados: Implantado no Supabase (PostgreSQL), aproveitando o connection pooling para lidar com eficiência com as requisições simultâneas do PDV.
- Backend robusto: O uso intensivo do Service Container e dos Form Requests do Laravel para validação garante que nenhum dado inválido entre no sistema.
// Example: Atomic Consistency in Debt Registration
DB::transaction(function () use ($request, $client) {
// 1. Log the financial movement
AccountMovement::create([
'client_id' => $client->id,
'amount' => $request->total_amount,
'type' => 'debt',
'items' => json_encode($request->items)
]);
// 2. Update Stock for every item in the cart
foreach ($request->items as $item) {
Product::find($item['id'])->decrement('stock', $item['quantity']);
}
// 3. Update Client Balance
$client->increment('balance', $request->total_amount);
});
📊 Impacto no Negócio
- ⚡ Redução de 60% no tempo de atendimento no caixa por cliente, melhorando significativamente o fluxo de atendimento.
- 🎯 Zero divergência entre o estoque físico e os registros digitais desde o lançamento do sistema.
- 📈 Visibilidade em tempo real da saúde financeira para os donos, algo inédito nos 20 anos de história do negócio.
- 🚀 Adaptabilidade econômica com atualizações de preço em massa instantâneas, protegendo as margens de lucro contra a inflação.