Disponible — full-time o freelance

Octavio Toledo

Desarrollador Full Stack

Desarrollo backend en Java y NestJS para un ERP SaaS en producción, y construyo productos a medida para negocios. Integraciones, datos consistentes y sistemas que siguen andando cuando algo falla.

UbicaciónMendoza, AR · Remoto
GitHubOctavioToledoLinkedInoctaviotoledo

Cómo trabajo

+3
años construyendo software
+5
integraciones en producción
3
productos para clientes

Del problema al producto

Relevamiento directo con el cliente, alcance acotado y entregas iterativas.

Diseño para fallas

Idempotencia, bloqueos ante concurrencia y verificación manual en vez de reintentar a ciegas. Las reglas de negocio se cubren con tests antes de producción.

Software que el cliente puede mantener

Precios, menús y textos editables sin tocar código, y documentación técnica de cada módulo.

IA como herramienta diaria

Claude Code y Gemini para acelerar la implementación y automatizar lo repetitivo, siempre con revisión propia.

Experiencia profesional

Aranni Brands — Powip

ERP SaaS · microserviciosSeptiembre 2025 — Actualidad
Full Stack Developer (Freelance) · foco backend

PowipSystem, un ERP SaaS para e-commerce en Latinoamérica con arquitectura de microservicios.

  • Desarrollo y mantengo módulos del ERP (ventas, clientes, stock y administración) con Spring Boot y NestJS.
  • Construyo el centro de integraciones: couriers, e-commerce, pagos y facturación electrónica.
  • Participo en decisiones de arquitectura y análisis funcional con el equipo, y resuelvo incidencias en producción. Frontend en Next.js cuando la feature lo necesita.
JavaSpring BootNestJSRabbitMQPostgreSQLDockerNext.jsTypeScript

Independiente

Proyectos para clientesJulio 2026 — Actualidad
Desarrollador Freelance

Productos a medida para negocios de Mendoza, de punta a punta: relevamiento con el cliente, diseño, desarrollo y puesta en producción.

  • Sistema de gestión para gimnasio
    En implementación

    Reemplaza el papel y el Excel para ~200 socios. Cobros con log de auditoría inmutable (quién, cuándo, cómo, comprobante).

  • Bodega Guerrero
    En producción

    Catálogo de vinos con pedido por cajas (por vino o mixtas) enviado por WhatsApp.

  • Verto's
    En producción

    Menú, carrito y pedido por WhatsApp para un local de panchos, con estado abierto/cerrado en vivo.

NestJSReactTypeScriptPostgreSQLSupabaseVercelCloudflare

Independiente

Clases particulares2023 — Actualidad
Profesor de programación

Clases uno a uno para estudiantes y personas en transición hacia el desarrollo de software.

  • Enseñanza de fundamentos de programación, Java y desarrollo web orientado a proyectos.
  • Material adaptado a cada alumno, priorizando código real desde la primera clase.
JavaJavaScriptSQL

Proyectos

03 proyectos
www.powip.lat01 / 03
Powip: Landing pública de Powip

Landing pública de Powip

Powip

Destacado

Trabajo principal · Aranni Brands · Full Stack Developer (Freelance)

ERP SaaS para e-commerce contraentrega en Latinoamérica: centraliza los pedidos de todos los canales de venta, los conecta con couriers y gestiona cobranza, stock y facturación. Arquitectura de microservicios con mensajería asíncrona.

  • Módulos de negocio del ERP —ventas, clientes, stock y administración— con Spring Boot y NestJS.
  • Centro de integraciones: couriers, Shopify, Mercado Pago y facturación electrónica (SUNAT) en un único servicio, con un módulo por proveedor y credenciales aisladas por empresa.
  • API Gateway con validación stateless de JWT (RS256 + JWKS) y eventos por RabbitMQ con cola de mensajes muertos.
JavaSpring BootSpring Cloud GatewayNestJSRabbitMQPostgreSQLDockerNext.js
bodega-guerrero.octatoledo7.workers.dev01 / 04
Bodega Guerrero: Inicio

Inicio

Bodega Guerrero

Freelance · bodega de Luján de Cuyo, Mendoza

Catálogo de vinos con pedido por cajas de 6 (por vino o mixtas) que se envía armado por WhatsApp. Sitio estático, sin backend ni cobro online.

  • Reglas de venta configurables: tamaño de caja, paso de la caja mixta y descuento por caja, validadas en todo el flujo y cubiertas por tests.
  • Armado de cajas mixtas con sugerencias según vinos destacados; el pedido persiste en el navegador y se descarta solo si deja de cumplir las reglas.
  • Catálogo y textos editables desde dos archivos, para que la bodega cambie precios sin tocar componentes. Deploy continuo en Cloudflare.
ReactTypeScriptViteTailwindCSSVitestCloudflare
vertos.vercel.app01 / 04
Verto's: Inicio con estado abierto/cerrado

Inicio con estado abierto/cerrado

Verto's

Freelance · emprendimiento familiar en San Martín, Mendoza

Landing con menú, carrito y pedido por WhatsApp para un local de panchos a la masa. Mobile-first, con estética de cartel retro.

  • Estado abierto/cerrado calculado en vivo según horarios y zona horaria, incluso con turnos que cruzan la medianoche.
  • Carrito con React Context + useReducer persistido en localStorage; el pedido se arma como mensaje listo para enviar.
  • Menú y datos del negocio en JSON editables por la familia. Lighthouse mobile 95/100/100/100.
ReactTypeScriptViteTailwindCSSVitestVercel

Problemas que resolví

Casos reales del ERP en producción donde trabajo. Sin nombres de proveedores, por confidencialidad.

Stock que no cuadraba

Problema
Las ventas importadas no descontaban stock, y dos ventas simultáneas de la misma variante corrompían el inventario.
Qué hice
Encontré la causa midiendo contra producción, corregí la ingesta y agregué bloqueos e idempotencia.
Resultado
Cada venta descuenta stock y la concurrencia ya no rompe el inventario.
PostgreSQLConcurrenciaTypeORM
Ver detalle técnico
  • La clave que enganchaba cada venta con su producto cubría menos del 10% de los casos reales; el resto se descartaba en silencio.
  • Corregí el mapeo que perdía la variante, el sync de stock que pisaba reservas activas y las mermas que no descontaban stock físico.
  • Bloqueo pesimista en las operaciones de inventario e idempotencia en webhooks y creación de ventas.
  • Rediseñé la resolución de productos entre cinco microservicios: nueva clave de matching, bandeja de reconciliación por empresa para casos ambiguos y despliegue por fases en modo sombra para no romper la ingesta.

Timeouts sin envíos duplicados

Problema
Algunos proveedores no permiten consultar lo que acabás de crear: si la llamada da timeout, no sabés si la operación ocurrió.
Qué hice
Diseñé una reserva previa en base de datos para que solo un proceso pueda ejecutar cada operación.
Resultado
Un timeout nunca genera un pedido duplicado: queda en verificación manual en vez de reintentarse a ciegas.
IdempotenciaPostgreSQLNestJS
Ver detalle técnico
  • Índice único + INSERT que ignora conflictos: solo el proceso que gana el insert ejecuta la acción.
  • Si la operación falla después, la reserva se revierte; si da timeout, pasa a verificación manual.
  • El mismo patrón cubre creación de pedidos, webhooks entrantes e importaciones.

Eventos desordenados y mensajes perdidos

Problema
Los webhooks llegaban duplicados y fuera de orden, y un consumidor descartaba mensajes ante cualquier error.
Qué hice
Modelé el ciclo de vida del pedido como una máquina de estados que solo avanza y agregué reintentos con cola de mensajes muertos.
Resultado
Un evento viejo ya no retrocede un pedido y ningún error hace perder mensajes en silencio.
RabbitMQEvent-drivenDLQ
Ver detalle técnico
  • Guarda por timestamp: un webhook más viejo que el último estado aplicado se ignora. La cancelación es la única transición terminal que siempre se aplica.
  • El payload del webhook no es fuente de verdad: al recibirlo se re-consulta la API del proveedor y se emiten los valores reales.
  • El descarte ante error se reemplazó por reintentos con dead-letter queue; si el proveedor externo se cae, la venta sigue funcionando.

Integraciones que el cliente activa solo

Problema
Publicar el catálogo en una plataforma externa y transcribir sus pedidos se hacía a mano, y cada alta necesitaba al equipo.
Qué hice
Construí un conector bidireccional con alta self-service y credenciales aisladas por empresa.
Resultado
Las empresas conectan la integración solas y sus pedidos entran al ERP en tiempo real.
NestJSWebhooksMulti-tenancy
Ver detalle técnico
  • Sincronización idempotente de productos, variantes, precios e imágenes: se puede correr las veces que haga falta sin duplicar nada.
  • Ingesta de pedidos por webhooks, por eventos y sin tocar el núcleo de ventas.
  • Cada empresa carga y verifica su propia credencial; el fallback global está desactivado por defecto para que dos clientes no puedan cruzarse.

Stack técnico

uso diario

Backend

JavaSpring BootSpring SecuritySpring Cloud GatewayNestJSREST APIsJWT

Frontend

ReactNext.jsTypeScriptTailwindCSSshadcn/uiVitePWA

Datos

PostgreSQLMySQLMongoDBSupabaseJPA/HibernateTypeORM

Arquitectura y mensajería

MicroserviciosEvent-drivenRabbitMQArquitectura hexagonalMVCDDDSOLIDMulti-tenancyIdempotencia

Testing y calidad

VitestJUnitJestPostmanSwagger/OpenAPI

Infra, herramientas e IA

DockerGit/GitHubVercelCloudflareRailwayClaude CodeGeminiIntegración de LLMs

Resumen rápido

DisponibilidadInmediata — full-time o freelance
RolFull Stack Developer, foco backend Java
ModalidadRemoto (GMT-3), o híbrido/presencial en Mendoza. Abierto a conversar una mudanza.
Experiencia+3 años desarrollando software; desde 2025 en un ERP SaaS en producción
FormaciónTécnico Universitario en Programación — UTN
IdiomasEspañol nativo · Inglés avanzado (fluido en reuniones)
Stack principalJava · Spring Boot · NestJS · React / Next.js · PostgreSQL
Conóceme mejor →

Contacto

¿Tenés una búsqueda o un proyecto? Escribime por mail o desde el formulario; respondo en 24–48 h.