Sistema de Gestión Ferretería El Mallín
Link del proyecto:
Una sólida solución Full-Stack de punto de venta e inventario, diseñada para modernizar un negocio familiar tradicional. Transforma los registros manuales en un ecosistema digital de alto rendimiento con control de stock en tiempo real, gestión inteligente de deudas e integridad transaccional atómica.
Tecnologías utilizadas

🛠️ El Desafío
“El Mallín” es una ferretería familiar de referencia que había superado sus raíces analógicas. Gestionar más de 20.000 artículos distintos con registros en papel generaba cuellos de botella críticos:
- 📉 Desfase de inventario: diferencias entre el stock real y los valores registrados.
- 🐌 Cobro lento: la consulta manual de precios y el registro de deudas demoraban la atención al cliente.
- 💸 Gestión de la inflación: actualizar miles de precios a mano en una economía volátil era imposible.
Diseñé y desarrollé una Solución de Transformación Digital a medida para centralizar las operaciones, garantizar estrictamente la integridad de los datos y ofrecer información del negocio en tiempo real.
🚀 Funcionalidades Clave
📦 Motor Inteligente de Inventario y Precios
- Búsqueda de alto rendimiento: Implementé indexación optimizada por SKU y por texto para consultar miles de productos en milisegundos.
- Precios a prueba de inflación: Construí una Herramienta de Actualización Masiva que usa transacciones de base de datos para aplicar aumentos porcentuales a categorías completas al instante, una función clave para adaptarse a la economía.
- Control visual de stock: Alertas automáticas en la interfaz y el backend para artículos con poco stock, evitando ventas perdidas.
💳 Punto de Venta Integrado y Libro de Deudas
- Transacciones atómicas: Las ventas y el registro de deudas están envueltos en transacciones de base de datos (compatibles con ACID). Una sola acción descuenta stock, actualiza el saldo del cliente y registra el movimiento. Si alguna parte falla, toda la operación se revierte, garantizando un 100% de consistencia de los datos.
- Almacenamiento híbrido: Usé columnas
JSONde PostgreSQL en la tablaaccount_movementspara guardar el detalle no estructurado del carrito (artículos, cantidades), manteniendo estructurados los datos financieros principales para generar reportes rápidos. - Depuración inteligente del historial: Desarrollé un algoritmo de limpieza que archiva o elimina automáticamente el historial de transacciones cuando el saldo de un cliente llega a cero, optimizando el almacenamiento y el rendimiento de las consultas con el tiempo.
- Facturación profesional: Integré
dompdfpara generar al instante resúmenes de cuenta y comprobantes en PDF con la marca del negocio.
🔐 Seguridad de Nivel Empresarial y UX
- Control de acceso basado en roles (RBAC): Permisos granulares que separan el rol ‘Admin’ (datos financieros sensibles, permisos de eliminación) del rol ‘Empleado’ (ventas, consulta de inventario).
- Experiencia ‘de pasillo’ mobile-first: Una interfaz totalmente responsive construida con Tailwind CSS, que permite al personal consultar stock y precios desde el celular mientras atiende a los clientes en el salón.
💻 Arquitectura Técnica: El “Monolito Moderno”
Elegí una arquitectura Laravel 11 + Inertia.js para combinar la simplicidad de un monolito con la interactividad de una Single Page Application (SPA).
- Gestión de estado fluida: Inertia.js funciona como nexo y me permite construir un frontend React completo, estrechamente integrado con el backend en Laravel, sin necesidad de una capa de API compleja ni de stores de estado en el cliente (como Redux).
- Confiabilidad de la base de datos: Desplegada en Supabase (PostgreSQL), aprovechando el connection pooling para manejar de forma eficiente las solicitudes concurrentes del punto de venta.
- Backend robusto: El uso intensivo del Service Container y de los Form Requests de Laravel para validación garantiza que ningún dato inválido ingrese al 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 en el Negocio
- ⚡ 60% de reducción en el tiempo de cobro por cliente, mejorando notablemente el flujo de atención.
- 🎯 Cero diferencias entre el inventario físico y los registros digitales desde el lanzamiento del sistema.
- 📈 Visibilidad en tiempo real de la salud financiera para los dueños, algo inédito en los 20 años de historia del negocio.
- 🚀 Adaptabilidad económica gracias a la actualización masiva e instantánea de precios, protegiendo los márgenes de ganancia frente a la inflación.