Skip to content
The future is nowEl futuro es hoy

Full Stack Engineer building systems that scale.Ingeniero Full Stack construyendo sistemas que escalan.

4+ years shipping production software — from conversational AI agents and multi-platform bots to Shopify integrations and cloud infrastructure on AWS. Currently at DailyBot.4+ años entregando software en producción — desde agentes de IA conversacionales y bots multi-plataforma hasta integraciones Shopify e infraestructura en AWS. Actualmente en DailyBot.

4+
Years in the industryAños en la industria
3
Tech companiesEmpresas tech
1,200+
Production commitsCommits en producción

AboutSobre mí

End-to-end engineer with a backend-first mindset.Ingeniero end-to-end con mentalidad backend-first.

Portrait of Oscar Marín at his desk, in front of a laptop, with software engineering books in the background.

Full stack engineer focused on backend systems, cloud infrastructure, and real-world integrations. I work full-time at DailyBot — a global SaaS product — while pursuing my Systems Engineering degree at Universidad del Quindío. I enjoy building end-to-end: from the database to the UI to the bot message that lands in your Slack.Ingeniero full stack con enfoque en sistemas backend, infraestructura cloud e integraciones reales. Trabajo a tiempo completo en DailyBot — un producto SaaS global — mientras curso Ingeniería en Sistemas en la Universidad del Quindío. Disfruto construir de punta a punta: desde la base de datos hasta la interfaz y el mensaje del bot que llega a tu Slack.

StackStack

BackendBackend
PythonDjangoDRFCeleryNode.js
FrontendFrontend
Vue 3ReactNext.jsAngular
CloudCloud
AWS LambdaEC2S3RDSDynamoDBCloudWatch
DevOpsDevOps
GitHub ActionsAWS CodePipelineDocker
AIIA
OpenAI GPT-4oClaudeMCPLangGraph
DatabasesBases de datos
PostgreSQLMySQLMongoDBRedis
ToolsHerramientas
ShopifyJiraLinearDirectusAzureMake

EducationEducación

  • Universidad del QuindíoUniversidad del Quindío

    Systems & Computing EngineeringIngeniería en Sistemas y Computación

    2023 — Present2023 — Presente

  • SENASENA

    Software Analysis & Development (Tech.)Análisis y Desarrollo de Software (Tecnólogo)

    20222022

WorkProyectos

Selected projects from production codebases.Proyectos seleccionados desde código en producción.

A few real systems I designed, shipped and operate today. Each one solved a concrete problem — not a demo.Algunos sistemas reales que diseñé, lancé y opero hoy. Cada uno resolvió un problema concreto — no un demo.

Filter projectsFiltrar proyectos

4 shownvisibles

ProductionProducción DailyBot

Conversational AI AgentAgente de IA conversacional

Designed and implemented an async conversational agent with tool-calling, MCP integration, and anti-hallucination guards. The HTTP endpoint returns 202 immediately while a Celery task resolves the agent plan and delivers results through a side channel.Diseñé e implementé un agente conversacional asíncrono con tool-calling, integración MCP y guards anti-alucinación. El endpoint HTTP responde 202 de inmediato mientras una tarea Celery resuelve el plan del agente y entrega el resultado por un canal lateral.

HighlightHighlight

Solved race conditions in async closures, exponential backoff on MCP server connections, and hallucination guards that prevent raw JSON or stub tool results from reaching the user.Resolví race conditions en closures async, agregué exponential backoff en conexiones MCP y construí guards que evitan que JSON crudo o resultados stub lleguen al usuario.

PythonDjangoCeleryOpenAIClaudeMCPLangGraphAWS
ProductionProducción DailyBot

Conversational AI AgentAgente de IA conversacional

Designed and implemented an async conversational agent with tool-calling, MCP integration, and anti-hallucination guards. The HTTP endpoint returns 202 immediately while a Celery task resolves the agent plan and delivers results through a side channel.Diseñé e implementé un agente conversacional asíncrono con tool-calling, integración MCP y guards anti-alucinación. El endpoint HTTP responde 202 de inmediato mientras una tarea Celery resuelve el plan del agente y entrega el resultado por un canal lateral.

The agent runs on a 202-Accepted contract: the HTTP request returns immediately with a job handle and a Celery worker resolves the LLM plan, calls tools, and pushes the answer through the bot's existing message channel. That decoupling lets long-running tool chains (CRM lookups, MCP server roundtrips) finish without holding an HTTP socket open. A unified abstraction sits in front of OpenAI GPT-4o and Anthropic Claude so swapping providers is a config change.El agente corre sobre un contrato 202-Accepted: la petición HTTP responde de inmediato con un handle del job y un worker Celery resuelve el plan del LLM, llama herramientas y empuja la respuesta por el canal de mensajes del bot. Ese desacople permite que cadenas largas de tool-calling (consultas a CRM, roundtrips a servidores MCP) terminen sin mantener un socket HTTP abierto. Una abstracción unificada sobre OpenAI GPT-4o y Anthropic Claude hace que cambiar de proveedor sea cuestión de configuración.

HighlightHighlight

Solved race conditions in async closures, exponential backoff on MCP server connections, and hallucination guards that prevent raw JSON or stub tool results from reaching the user.Resolví race conditions en closures async, agregué exponential backoff en conexiones MCP y construí guards que evitan que JSON crudo o resultados stub lleguen al usuario.

Key outcomesResultados clave

  • Designed a 202-Accepted contract that decouples agent latency from request lifetime, freeing the HTTP layer for long tool chains. Diseñé un contrato 202-Accepted que desacopla la latencia del agente del ciclo de vida de la petición y libera la capa HTTP para tool chains largos.
  • Built guard rails that detect raw JSON, stub tool results, and hallucinated function calls before they ever reach the user. Construí guards que detectan JSON crudo, resultados stub de herramientas y llamadas alucinadas antes de que lleguen al usuario.
  • Implemented exponential backoff with jitter on MCP server reconnects to absorb transient failures without surfacing them in the chat. Implementé exponential backoff con jitter en los reconectes a servidores MCP para absorber fallas transitorias sin exponerlas en el chat.
  • Resolved race conditions in async closures shared across Celery worker contexts that produced intermittent state corruption. Resolví race conditions en closures async compartidos entre contextos de workers Celery que generaban corrupción intermitente de estado.
  • Unified GPT-4o and Claude behind a single tool-calling interface so the runtime model is a configuration choice, not a rewrite. Unifiqué GPT-4o y Claude detrás de una sola interfaz de tool-calling: el modelo de runtime es una decisión de configuración, no un rewrite.

Tech stackStack

PythonDjangoCeleryOpenAIClaudeMCPLangGraphAWS
ProductionProducción DailyBot

Integration Resilience — Linear & JiraResiliencia de integraciones — Linear y Jira

Built the complete OAuth2 refresh flow for Linear, webhook deduplication, soft-disable on token failure for Jira, and a three-state connection detection system visible in the UI. Worked across backend (Django), frontend (Vue 3), and bot layer (Lambda).Construí el flujo completo de OAuth2 refresh para Linear, deduplicación de webhooks, soft-disable ante fallo de token en Jira y un sistema de detección de tres estados de conexión visible en la UI. Trabajé en backend (Django), frontend (Vue 3) y capa del bot (Lambda).

HighlightHighlight

Fixed an O(n²) webhook cleanup bottleneck and resolved a Redis OOM production incident by enforcing explicit TTLs and version-stamp cache invalidation.Corregí un cuello de botella O(n²) en limpieza de webhooks y resolví un incidente OOM en Redis en producción con TTLs explícitos e invalidación por version-stamp.

PythonDjangoOAuth2WebhooksRedisVue 3GraphQLREST
ProductionProducción DailyBot

Integration Resilience — Linear & JiraResiliencia de integraciones — Linear y Jira

Built the complete OAuth2 refresh flow for Linear, webhook deduplication, soft-disable on token failure for Jira, and a three-state connection detection system visible in the UI. Worked across backend (Django), frontend (Vue 3), and bot layer (Lambda).Construí el flujo completo de OAuth2 refresh para Linear, deduplicación de webhooks, soft-disable ante fallo de token en Jira y un sistema de detección de tres estados de conexión visible en la UI. Trabajé en backend (Django), frontend (Vue 3) y capa del bot (Lambda).

Integrations like Linear and Jira fail in subtle ways — expired tokens, replayed webhooks, partial outages on the vendor side. The work spanned the full stack: a Django backend with token rotation, a Vue 3 panel that surfaces connection health in three states (connected, degraded, disconnected), and a Lambda bot layer that consumes the same events. The Redis cache layer was rebuilt around version-stamped keys so a single SET invalidates everything stale instead of scanning thousands of entries.Integraciones como Linear y Jira fallan de formas sutiles — tokens expirados, webhooks duplicados, caídas parciales del proveedor. El trabajo abarcó toda la pila: un backend en Django con rotación de tokens, un panel Vue 3 que muestra la salud de la conexión en tres estados (conectado, degradado, desconectado) y una capa de bot en Lambda que consume los mismos eventos. La capa de cache en Redis se reconstruyó alrededor de claves con version-stamp: un solo SET invalida todo lo viejo en vez de escanear miles de entradas.

HighlightHighlight

Fixed an O(n²) webhook cleanup bottleneck and resolved a Redis OOM production incident by enforcing explicit TTLs and version-stamp cache invalidation.Corregí un cuello de botella O(n²) en limpieza de webhooks y resolví un incidente OOM en Redis en producción con TTLs explícitos e invalidación por version-stamp.

Key outcomesResultados clave

  • Shipped the full OAuth2 refresh and rotation flow for Linear's GraphQL API, including retry-on-401 and rotation-on-403. Entregué el flujo completo de OAuth2 refresh y rotación para la API GraphQL de Linear, con retry-on-401 y rotación-on-403.
  • Designed a webhook deduplication layer in Redis that survives replay attacks and out-of-order delivery from both vendors. Diseñé una capa de deduplicación de webhooks en Redis que sobrevive a replays y entregas fuera de orden de ambos proveedores.
  • Implemented a soft-disable pattern for Jira: on token failure the integration stays connected but pauses syncs and surfaces the state in the UI. Implementé un patrón de soft-disable para Jira: ante fallo de token la integración queda conectada pero pausa los syncs y muestra el estado en la UI.
  • Replaced an O(n²) webhook cleanup that was timing out for orgs with 10K+ tickets with a single indexed query. Reemplacé una limpieza de webhooks O(n²) que hacía timeout en orgs con 10K+ tickets por una única consulta indexada.
  • Resolved a Redis OOM production incident by enforcing explicit TTLs everywhere and switching invalidation to version-stamped keys. Resolví un incidente OOM en Redis en producción aplicando TTLs explícitos y migrando la invalidación a claves con version-stamp.
  • Brought a three-state connection detector (connected / degraded / disconnected) into the Vue 3 panel so customers can self-diagnose without a support ticket. Llevé el detector de conexión en tres estados (conectado / degradado / desconectado) al panel Vue 3 para que el cliente se diagnostique sin abrir ticket.

Tech stackStack

PythonDjangoOAuth2WebhooksRedisVue 3GraphQLREST
ProductionProducción DailyBot

Multi-platform Bot — Discord, Teams, SlackBot multi-plataforma — Discord, Teams, Slack

Implemented native Discord modal V2 components, MS Teams Adaptive Cards with full localization, and end-to-end kudos cards across 6 chat platforms (Slack, Teams, Discord, Google Chat, Telegram, Alexa). All features shipped in EN/ES/PT.Implementé modales nativos V2 de Discord, Adaptive Cards de MS Teams con localización completa, y tarjetas de kudos de punta a punta en 6 plataformas de chat (Slack, Teams, Discord, Google Chat, Telegram, Alexa). Todo en EN/ES/PT.

HighlightHighlight

Enforced Discord's 5-component limit, handled modal value arrays, and built a full AdaptiveCardService for Teams onboarding with analytics tracking.Apliqué el límite de 5 componentes de Discord, manejé arrays de valores en modales y construí un AdaptiveCardService completo para el onboarding de Teams con tracking analítico.

TypeScriptAWS LambdaDynamoDBSNSServerless FrameworkNode.js
ProductionProducción DailyBot

Multi-platform Bot — Discord, Teams, SlackBot multi-plataforma — Discord, Teams, Slack

Implemented native Discord modal V2 components, MS Teams Adaptive Cards with full localization, and end-to-end kudos cards across 6 chat platforms (Slack, Teams, Discord, Google Chat, Telegram, Alexa). All features shipped in EN/ES/PT.Implementé modales nativos V2 de Discord, Adaptive Cards de MS Teams con localización completa, y tarjetas de kudos de punta a punta en 6 plataformas de chat (Slack, Teams, Discord, Google Chat, Telegram, Alexa). Todo en EN/ES/PT.

Six chat platforms, three languages, one shared business logic core. Each platform exposes a different rendering primitive (Discord modals V2, Teams Adaptive Cards, Slack Block Kit, Google Chat cards) so the bot speaks each one natively while the underlying domain stays unified. The whole stack runs serverless on AWS Lambda with DynamoDB for state and SNS for fan-out, so a single business event produces six platform-specific renders without coupling them.Seis plataformas de chat, tres idiomas, un mismo núcleo de lógica de negocio. Cada plataforma expone una primitiva de render diferente (modales V2 de Discord, Adaptive Cards de Teams, Block Kit de Slack, cards de Google Chat) y el bot habla cada una de forma nativa mientras el dominio subyacente queda unificado. Todo el stack corre serverless sobre AWS Lambda con DynamoDB para estado y SNS para fan-out, así que un solo evento de negocio produce seis renders distintos sin acoplarlos.

HighlightHighlight

Enforced Discord's 5-component limit, handled modal value arrays, and built a full AdaptiveCardService for Teams onboarding with analytics tracking.Apliqué el límite de 5 componentes de Discord, manejé arrays de valores en modales y construí un AdaptiveCardService completo para el onboarding de Teams con tracking analítico.

Key outcomesResultados clave

  • Implemented native Discord modal V2 with full multi-value support and the platform's strict 5-component constraint. Implementé modales V2 nativos de Discord con soporte completo de multi-value y el límite estricto de 5 componentes de la plataforma.
  • Built MS Teams Adaptive Cards localized to EN/ES/PT and an AdaptiveCardService that powers onboarding with built-in analytics. Construí Adaptive Cards de MS Teams localizadas en EN/ES/PT y un AdaptiveCardService que potencia el onboarding con analítica integrada.
  • Shipped end-to-end kudos cards on 6 chat platforms (Slack, Teams, Discord, Google Chat, Telegram, Alexa) with platform-specific UI primitives. Entregué kudos cards de punta a punta en 6 plataformas (Slack, Teams, Discord, Google Chat, Telegram, Alexa) usando las primitivas de UI de cada una.
  • Designed an SNS fan-out so a single business event renders six platform-specific payloads without coupling the senders. Diseñé un fan-out por SNS para que un solo evento de negocio rinda seis payloads sin acoplar a los emisores.
  • Kept the deployable shape under the Lambda cold-start budget by trimming the Serverless Framework package per function. Mantuve el bundle deployable dentro del presupuesto de cold-start de Lambda recortando el package de Serverless Framework por función.

Tech stackStack

TypeScriptAWS LambdaDynamoDBSNSServerless FrameworkNode.js
Client workCliente OffBeat.Lab

Shopify Custom DevelopmentDesarrollo Shopify a medida

Built custom Liquid components and Shopify API integrations for clients including Rubyrose, Café Quindío, and Media Maratón Quindío. Went beyond templates by creating components from the base theme, extending storefronts with Node.js services, and automating workflows with Make. Led a full-code project on Angular + Directus + Azure.Desarrollé componentes Liquid a medida e integraciones con la API de Shopify para clientes como Rubyrose, Café Quindío y Media Maratón Quindío. Fui más allá de las plantillas creando componentes desde el tema base, extendiendo tiendas con servicios en Node.js y automatizando flujos con Make. Lideré un proyecto full-code en Angular + Directus + Azure.

HighlightHighlight

First team member to work directly with Shopify's base theme code, enabling custom client solutions beyond off-the-shelf templates.Primer miembro del equipo en trabajar directamente con el código base del tema de Shopify, habilitando soluciones a medida más allá de las plantillas estándar.

ShopifyLiquidNode.jsAngularDirectusAzureMake
Client workCliente OffBeat.Lab

Shopify Custom DevelopmentDesarrollo Shopify a medida

Built custom Liquid components and Shopify API integrations for clients including Rubyrose, Café Quindío, and Media Maratón Quindío. Went beyond templates by creating components from the base theme, extending storefronts with Node.js services, and automating workflows with Make. Led a full-code project on Angular + Directus + Azure.Desarrollé componentes Liquid a medida e integraciones con la API de Shopify para clientes como Rubyrose, Café Quindío y Media Maratón Quindío. Fui más allá de las plantillas creando componentes desde el tema base, extendiendo tiendas con servicios en Node.js y automatizando flujos con Make. Lideré un proyecto full-code en Angular + Directus + Azure.

Most Shopify agencies stop at the visual editor. Here the brief was the opposite — clients with operations that templates couldn't model: custom checkout flows, third-party stock sync, on-the-fly bilingual catalogs. The work spanned Liquid at the theme level, Node.js services that extended the Storefront API, and Make scenarios that wired Shopify into clients' fulfillment software. The Media Maratón Quindío project was a full-code build (Angular SPA + Directus headless CMS + Azure) shipped end-to-end.La mayoría de agencias Shopify se quedan en el editor visual. Aquí el brief era el opuesto — clientes con operaciones que las plantillas no podían modelar: checkouts a medida, sync de stock con terceros, catálogos bilingües al vuelo. El trabajo abarcó Liquid a nivel de tema, servicios Node.js que extendían la Storefront API y escenarios en Make que conectaban Shopify con el software de fulfillment de los clientes. El proyecto Media Maratón Quindío fue un build full-code (SPA Angular + CMS headless Directus + Azure) entregado end-to-end.

HighlightHighlight

First team member to work directly with Shopify's base theme code, enabling custom client solutions beyond off-the-shelf templates.Primer miembro del equipo en trabajar directamente con el código base del tema de Shopify, habilitando soluciones a medida más allá de las plantillas estándar.

Key outcomesResultados clave

  • First on the team to work directly with Shopify's base theme source — opened the door to client work that templates could not deliver. Primero del equipo en trabajar directamente con el código base del tema de Shopify — abrió la puerta a trabajos que las plantillas no podían cubrir.
  • Built custom Liquid components for Rubyrose, Café Quindío and other clients, each tied to specific operational needs. Construí componentes Liquid a medida para Rubyrose, Café Quindío y otros clientes, cada uno atado a una necesidad operacional concreta.
  • Extended storefronts with Node.js services on top of the Shopify API where the platform's primitives were not enough. Extendí tiendas con servicios Node.js sobre la API de Shopify donde las primitivas de la plataforma se quedaban cortas.
  • Automated client workflows with Make (Integromat) so order events flowed into accounting, inventory, and fulfillment without manual relays. Automaticé flujos de clientes con Make (Integromat) para que los eventos de orden fluyeran a contabilidad, inventario y fulfillment sin relevos manuales.
  • Led the Media Maratón Quindío project end-to-end on Angular + Directus + Azure: data model, frontend, headless CMS, and deploy. Lideré el proyecto Media Maratón Quindío de punta a punta sobre Angular + Directus + Azure: modelo de datos, frontend, CMS headless y deploy.

Tech stackStack

ShopifyLiquidNode.jsAngularDirectusAzureMake

ExperienceExperiencia

Three companies, four years, one through-line: shipping.Tres empresas, cuatro años, una constante: entregar.

From version control modernization to AI agents in production — a chronological view of where I've contributed.Desde modernizar control de versiones hasta agentes de IA en producción — vista cronológica de dónde he contribuido.

  1. DailyBot Full Stack DeveloperFull Stack Developer

    November 2024 — PresentNoviembre 2024 — Presente

    Backend (Django + Celery), frontend (Vue 3), and serverless bot layer (AWS Lambda + TypeScript). Top-15 contributor across 3 core repositories (~1,200+ commits). Built AI agents, integration resilience systems, multi-platform bots, and billing infrastructure.Backend (Django + Celery), frontend (Vue 3) y capa serverless del bot (AWS Lambda + TypeScript). Top-15 contributor en 3 repositorios principales (~1,200+ commits). Construí agentes de IA, sistemas de resiliencia de integraciones, bots multi-plataforma e infraestructura de billing.

    PythonVue 3TypeScriptAWSDjangoCeleryOpenAI
  2. OffBeat.Lab Full Stack DeveloperFull Stack Developer

    October 2023 — November 2024Octubre 2023 — Noviembre 2024

    Custom Shopify development for multiple clients. Built Liquid components, extended storefronts with Shopify API + Node.js, and automated workflows with Make. Led a full-code project built on Angular, Directus, and Azure.Desarrollo Shopify a medida para múltiples clientes. Creé componentes en Liquid, extendí tiendas con Shopify API + Node.js y automaticé flujos con Make. Lideré un proyecto full-code en Angular, Directus y Azure.

    ShopifyLiquidNode.jsAngularDirectusAzureMake
  3. Heinsohn Business Technology ProgrammerProgramador

    July 2022 — October 2023Julio 2022 — Octubre 2023

    Version control management for an enterprise software team working in Delphi. Migrated the entire codebase from Visual SourceSafe to GitLab and trained the team on Git workflows — modernizing the development process from the ground up.Gestión de control de versiones para un equipo de software empresarial en Delphi. Migré toda la base de código de Visual SourceSafe a GitLab y capacité al equipo en flujos de trabajo con Git — modernizando el proceso de desarrollo desde cero.

    GitGitLabVersion control

ContactContacto

Open to remote opportunities worldwide. Let's talk.Abierto a oportunidades remotas en todo el mundo. Hablemos.

If you're hiring, collaborating on something interesting, or just want to chat about systems and integrations — drop me a line.Si estás contratando, colaborando en algo interesante o solo quieres charlar sobre sistemas e integraciones — escríbeme.

Send a messageEnvíame un mensaje

Tell me a bit about your project, role, or idea — I usually reply within 24 hours.Cuéntame un poco sobre tu proyecto, vacante o idea — usualmente respondo en menos de 24 horas.

Your details only land in my inbox — no marketing, no third parties.Tus datos solo llegan a mi bandeja de entrada — sin marketing, sin terceros.

Or reach me directlyO escríbeme directamente

LocationUbicación
Colombia — Remote friendlyColombia — Remote friendly