Grow ERP
Un ERP para distribuidoras de alimento animal: punto de venta, factura electrónica, stock por sucursal, repartos y cuentas.

Una distribuidora de alimento para mascotas y animales manejaba el negocio entre planillas, cuadernos y programas sueltos. Vende en mostrador y al por mayor, desde más de una sucursal, y cada factura tiene que pasar por AFIP/ARCA. Los pedidos se aprueban, se arman en el depósito y salen en camión. El dueño no es programador, así que el sistema también tenía que poder correrlo y mantenerlo el propio negocio.
Tres decisiones que lo definieron.
- 01
Server Actions como capa de negocio, con permiso en cada acción
Por qué. El dominio vive en 76 archivos de acciones que las páginas llaman directo. Cada una arranca con protectAction y la lista de roles permitidos. Ocultar un ítem del menú es solo visual; escribir la URL a mano igual choca con el control. Nueve roles, del dueño al repartidor, comparten una sola app.
El costo. No hay una API REST general. La tienda online y las subidas necesitan rutas propias con otra autenticación, y una acción nueva sin el control quedaría abierta.
- 02
La deuda de cada cliente se guarda dos veces, a propósito
Por qué. La cuenta corriente es la fuente de verdad del saldo total del cliente. Cada factura además guarda su saldo pendiente, para imputar pagos a facturas concretas y calcular la antigüedad de la deuda.
El costo. Todo movimiento de plata tiene que escribir en los dos. Si uno se saltea, las pantallas no coinciden, así que hay un script de conciliación que los compara.
- 03
Un servidor que controla el dueño, y una guía para correrlo
Por qué. La app, Postgres y Caddy corren juntos con Docker Compose en un solo VPS. Una guía de nueve capítulos cubre la instalación, los backups, los certificados de AFIP y cómo hacer cambios con un asistente de IA. Un hook de pre-push corre tipos, lint, tests y build.
El costo. Un solo servidor significa sin redundancia, y los backups dependen de un cron que alguien tiene que revisar.




Grow ERP
Un ERP para distribuidoras de alimento animal: punto de venta, factura electrónica, stock por sucursal, repartos y cuentas.
- Rol
- Desarrollo full-stack y mantenimiento, desde el esquema de la base hasta el servidor donde corre
- Stack
- Next.js 15 (App Router), React 19, TypeScript, Prisma + PostgreSQL, TanStack Table / Query, AFIP SDK, Docker Compose + Caddy, Vitest + Playwright
- En vivo
- app.corelogixerp.com ↗

Una distribuidora de alimento para mascotas y animales manejaba el negocio entre planillas, cuadernos y programas sueltos. Vende en mostrador y al por mayor, desde más de una sucursal, y cada factura tiene que pasar por AFIP/ARCA. Los pedidos se aprueban, se arman en el depósito y salen en camión. El dueño no es programador, así que el sistema también tenía que poder correrlo y mantenerlo el propio negocio.
Tres decisiones que lo definieron.
Server Actions como capa de negocio, con permiso en cada acción
Por qué. El dominio vive en 76 archivos de acciones que las páginas llaman directo. Cada una arranca con protectAction y la lista de roles permitidos. Ocultar un ítem del menú es solo visual; escribir la URL a mano igual choca con el control. Nueve roles, del dueño al repartidor, comparten una sola app.
El costo. No hay una API REST general. La tienda online y las subidas necesitan rutas propias con otra autenticación, y una acción nueva sin el control quedaría abierta.
La deuda de cada cliente se guarda dos veces, a propósito
Por qué. La cuenta corriente es la fuente de verdad del saldo total del cliente. Cada factura además guarda su saldo pendiente, para imputar pagos a facturas concretas y calcular la antigüedad de la deuda.
El costo. Todo movimiento de plata tiene que escribir en los dos. Si uno se saltea, las pantallas no coinciden, así que hay un script de conciliación que los compara.
Un servidor que controla el dueño, y una guía para correrlo
Por qué. La app, Postgres y Caddy corren juntos con Docker Compose en un solo VPS. Una guía de nueve capítulos cubre la instalación, los backups, los certificados de AFIP y cómo hacer cambios con un asistente de IA. Un hook de pre-push corre tipos, lint, tests y build.
El costo. Un solo servidor significa sin redundancia, y los backups dependen de un cron que alguien tiene que revisar.



