Saltar al contenido
Matías VaglivielloBackend & sistemas a medida
Python
Backend Core
Django 5 & DRF
ERPs & Channels
FastAPI
Async APIs
TypeScript
Strict Typing
NestJS
DDD & Microservicios
Prisma ORM
Data Access
PostgreSQL
Modelado & ACID
Redis
Caché & WebSockets
Docker
Contenedores & Sandbox
Go (Golang)
BitGoTe & Seguridad
RabbitMQ
Saga & Eventos
Next.js
Web & SSR
React Native
Apps de Campo
Linux
nftables & Infra
PROYECTOS Y CASOS REALES

Lo que resolvimos en la vida real con código y arquitectura

De mis trabajos más recientes a los primeros sistemas: apps para administrar ligas y equipos, ERPs y aplicaciones de campo. En cada caso, el problema, la solución y las decisiones de ingeniería.

CASO DE ESTUDIO #01 · APP PARA FÚTBOL AMATEUREquipos amateurs, cuerpos técnicos y organizadores de ligas

Futboliga — Administración de Ligas y Equipos

Una app para organizar planteles, partidos y convocatorias, y administrar ligas con torneos, fixture y resultados. Cada equipo puede funcionar con o sin liga.

Equipos
Planteles y Roles
Partidos
Convocatoria y Asistencia
Ligas
Torneos, Fases y Grupos
Fixture
Resultados y Posiciones
Organizar el fútbol también necesita un sistema
  • →Centralizar el plantel, la agenda y quién confirmó su presencia en cada partido.
  • →Separar las responsabilidades del presidente, delegados, cuerpo técnico y jugadores.
  • →Administrar ligas y torneos con equipos, fases, grupos y resultados consistentes.
Un espacio para el equipo y otro para la liga
  • ✓Vestuario para crear un equipo o unirse por invitación, con aprobación de ingreso y gestión del plantel.
  • ✓Agenda de partidos, convocatorias y respuestas de asistencia, con cierre de listas y permisos según el rol.
  • ✓Administración de ligas y torneos: inscripción de equipos, fases, grupos, generación de fixture y tabla de posiciones calculada con los resultados.

CAPTURAS REALES DEL SISTEMA WEB Y APP MÓVIL (CLICK PARA AMPLIAR):

Next.jsReactTypeScriptNestJSPrismaPostgreSQLZodpnpm Workspaces
CASO DE ESTUDIO #02 · ERP EN PRODUCCIÓNEmpresa de Publicidad en Vía Pública (Múltiples Unidades de Negocio)

Sistema Zona — ERP Integral OOH

De planillas Excel desconectadas a un ERP en tiempo real con 13 módulos operativos, facturación electrónica ARCA, WebSockets con Redis y motor financiero.

13
Módulos de Negocio Activos
65
Modelos de Datos (188 Migraciones)
~136.8k
Líneas de Código en Repo
-94%
Tráfico Móvil (WebSockets + Redis)
El problema real que había que destrabar
  • →Operación fragmentada en múltiples planillas Excel sin trazabilidad entre lo que se cotizaba, lo que se producía en taller y lo que realmente se cobraba.
  • →Una misma cotización para un cliente involucraba varias unidades de negocio y socios distintos (producción de letreros, alquiler de carteleras, instalación en calle).
  • →El personal de campo y taller necesitaba ver el estado del Kanban en el celular sin agotar la batería ni saturar el servidor con polling HTTP constante.
  • →Complejidad impositiva y contable argentina: IVA crédito/débito fiscal, percepciones de IIBB, retenciones, flujo de caja consolidado y facturación electrónica ARCA.
La solución de ingeniería llevada a producción
  • ✓Motor inteligente de Presupuestos → Órdenes de Trabajo (OT): al aprobar una cotización, el backend particiona y genera automáticamente una OT independiente por cada combinación única de (Unidad de Negocio × Tipo de Trabajo).
  • ✓Tablero Kanban en tiempo real vía Django Channels 4 + Daphne + Redis: una única conexión WebSocket autenticada por JWT (/ws/updates/) reemplazó el polling, bajando el tráfico móvil de ~50 req/min a 2-3 req/min.
  • ✓Automatización transaccional por eventos/signals: la carga o pago de una factura de proveedor impacta automáticamente el inventario por sector, el libro de IVA y el CashFlow sin pasos manuales.
  • ✓Asesor Financiero OOH integrado: scoring de terrenos (1-5★), absorción de costos por campaña, simulador de renovaciones y fichaje de RRHH con validación GPS.

CAPTURAS REALES DEL SISTEMA WEB Y APP MÓVIL (CLICK PARA AMPLIAR):

PythonDjango 5Django REST FrameworkDjango Channels (WebSockets)RedisPostgreSQL 15Next.jsRefineDockerSentryARCA / Facturación Electrónica
CASO DE ESTUDIO #03 · DDD ESTRICTO CON NESTJS, PRISMA & TRANSACCIONESArquitectura Hexagonal, Modelado Relacional y Consistencia Financiera

Plataformas SaaS & Billetera Distribuida (Futboliga / Wallet v2)

Cómo diseño sistemas en el ecosistema TypeScript (NestJS + Prisma / TypeORM + PostgreSQL + Zod) donde las reglas de negocio viven aisladas del framework y la performance se defiende con tests automáticos.

4 Capas
Verificadas por Linter (ESLint)
1 = 20
Aserción de Queries en Listados
Centavos
Cero Floats en Operaciones de Dinero
ADRs
Decisiones Técnicas Documentadas
Los vicios típicos que evito en proyectos TypeScript/Backend
  • →Controladores y servicios acoplados al ORM (Prisma/TypeORM) donde cambiar una regla de negocio obliga a levantar toda la base de datos para correr un test.
  • →Endpoints de listado que funcionan rápido en desarrollo con 5 filas pero explotan en producción con N+1 queries cuando hay miles de registros.
  • →Manejo de dinero con números flotantes (float/double) o verificaciones de idempotencia hechas con un SELECT antes de un INSERT (vulnerables a race conditions).
  • →Migraciones de base de datos sin estrategia de rollback en sistemas que mueven dinero o estados críticos.
Ingeniería de software con reglas verificables en CI
  • ✓Fronteras de capas forzadas por ESLint: domain/ (TypeScript puro, cero imports de Nest o Prisma), application/ (casos de uso + interfaces de Repository), infrastructure/ (implementaciones Prisma y Fakes en memoria) y http/ (controllers finos).
  • ✓Guardián automático anti N+1: todo endpoint de listado es paginado por diseño (esquema Zod compartido) y lleva un test que cuenta los eventos query de Prisma con 1 fila vs. 20 filas — la cantidad de queries debe ser idéntica.
  • ✓Dinero e Idempotencia en la Base: importes siempre en centavos enteros (Int/BIGINT), claves de idempotencia determinísticas respaldadas por constraints UNIQUE en PostgreSQL y patrón Outbox + Saga orquestada para transferencias entre microservicios.
  • ✓Migraciones reversibles: cada migración de Prisma/SQL que modifica estructura crítica se acompaña de su script down.sql verificado, o se elige TypeORM cuando el rollback transaccional nativo es prioritario (documentado en ADRs).
TypeScriptNestJSPrisma ORMTypeORMPostgreSQLRedisRabbitMQZodNext.jspnpm WorkspacesDockerJest / Testcontainers
CASO DE ESTUDIO #04 · MAYORISTA WEB + MOBILE + IA LOCALDistribuidora Mayorista Avícola (Galpón, Caja, Reparto y Ventas en Calle)

Huevo de Oro — Ecosistema Mayorista & Distribución

Digitalización total de un mayorista: ERP web de inventario multidimensional y caja por turnos + App Móvil en React Native con despacho por QR + Asistente de IA local on-premise.

100%
Eliminación de Boletas en Papel
Web + APK
Sincronización en Tiempo Real
0 Cloud
IA Local (Ollama + Read-Only SQL)
3 Roles
Vendedor · Encargado · Admin
El caos operativo antes del sistema
  • →El stock avícola se maneja en múltiples dimensiones simultáneas (cajones, maples, docenas, unidades por categoría y granja): llevarlo en planillas o papel generaba quiebres de stock y diferencias de caja todos los días.
  • →Los vendedores en calle tomaban pedidos a mano y los changarines/encargados de galpón despachaban sin validación cruzada, provocando entregas duplicadas o errores de armado.
  • →Gasto enorme en talonarios de papel y demoras en pasar los comprobantes y estados de cuenta corriente a los clientes habituales.
  • →El dueño quería consultar métricas de rentabilidad y ventas en lenguaje natural, pero sin subir información financiera sensible de su negocio a nubes de terceros.
Arquitectura omnicanal pensada para el piso de venta real
  • ✓ERP Web Central (Django 5 + PostgreSQL + Celery/Redis): inventario inteligente con conversión de unidades, alertas de stock crítico, arqueo de caja riguroso por turnos, cuentas corrientes con límite de crédito y liquidación automática de comisiones de vendedores.
  • ✓App Móvil Nativa (React Native + Expo + Zustand): los vendedores arman pedidos en tiempo real desde la calle, envían comprobantes PDF con QR directo al WhatsApp del cliente, y el galpón valida la entrega escaneando el código QR o palabra clave de despacho.
  • ✓Asistente de IA 100% Local (Ollama + Qwen 2.5 + LangChain Text-to-SQL): corre dentro del servidor local en Docker sin mandar un byte afuera. Se conecta a PostgreSQL mediante un rol exclusivo de solo lectura (ai_reader) aplicando el Principio de Menor Privilegio.
  • ✓Infraestructura blindada: servidor local completamente dockerizado y publicado hacia la app móvil mediante Cloudflare Tunnels, sin abrir puertos en el router del cliente.

CAPTURAS REALES DEL SISTEMA WEB Y APP MÓVIL (CLICK PARA AMPLIAR):

PythonDjango 5Django REST FrameworkPostgreSQL 16RedisCeleryReact NativeExpoZustandOllama (Qwen 2.5)LangChainDocker ComposeCloudflare Tunnel

¿Querés ver las reglas de ingeniería detrás de estos sistemas?

DDD, Clean Code, modelado de DB, Redis, Docker y guardianes automáticos contra N+1.

Ir a Cómo Trabajo