Buenos Aires, ArgentinaEn la oficina

Construyo con arquitectura honesta.

Diez años convirtiendo ideas en software listo para producción. Soy desarrollador y me importa el producto y la arquitectura — no me considero experto en ninguno de los dos, pero me interesan de verdad. TypeScript, backends serverless y motores de workflow, con foco en código mantenible e impacto real.

Apuntes desde la construcción.

Notas sobre ingeniería de IA, datos, plataforma, arquitectura de software y SEO/AEO — deep-dives prácticos desde aplicaciones en producción.

Read Autohostear agent skills en tu sitio web
Ingeniería de IA8 min
Autohostear agent skills en tu sitio web

Tu sitio puede alojar skills instalables para IA — no hace falta GitHub. Lo monté con Next.js en una app en producción; lo más delicado fue alinear el redirect a www para que npx skills add funcione, y dar al agente contexto persistente del producto en lugar de respuestas genéricas.

Leer nota
Read .agents: reglas y skills centralizados para cualquier editor de IA
Ingeniería de IA10 min
.agents: reglas y skills centralizados para cualquier editor de IA

Cuando cada dev usa un editor de IA distinto, las rules se desincronizan entre .cursor, .agent y .claude. Centralizamos todo en .agents/ con symlinks y escondimos el cableado en VS Code para que el repo no distraiga.

Leer nota
Read Git Auditor: hooks nativos con shell para auditoría de equipo
Ingeniería de plataforma10 min
Git Auditor: hooks nativos con shell para auditoría de equipo

Cuando un equipo crece, los estilos de commit se dispersan y el lint llega tarde. Git Auditor usa hooks shell versionados en .githooks/ para aplicar una base común acordada — en local, antes de la CI.

Leer nota

Lo que uso y lo que me parece interesante.

Skills, herramientas, docs y enlaces que uso en mi flujo — y otras cosas que voy encontrando y vale la pena compartir.

indexados04
Reposlportals/portal_labs

Portal Labs

Más de 40 componentes e interacciones UI premium para Flutter, sin dependencias — knobs, carruseles, inputs morfológicos, gestos con física. Dart/Flutter puro.

Docsconventionalcommits.org

Especificación Conventional Commits

Especificación oficial v1.0.0 para mensajes de commit legibles por humanos y máquinas. Define tipos feat/fix, scopes opcionales, breaking changes y footers — la referencia detrás de SemVer automatizado y changelogs.

Enlaceswebpro-nl/knip

Knip

Detectá y eliminá dependencias, exports y archivos sin usar en proyectos JavaScript y TypeScript. 150+ plugins para Next.js, ESLint, Storybook, Vitest y más — mantiene el codebase limpio sin adivinar.

Reposxyflow/xyflow

React Flow / xyflow

Monorepo open source de React Flow y Svelte Flow — librerías para UIs basadas en nodos: workflows, editores visuales y diagramas. MIT, listas para usar y muy personalizables.

Con qué trabajo.

Herramientas y tecnologías que uso a diario en proyectos y artículos. Un stack práctico, moldeado con años construyendo — no un muro de logos, sino un mapa de lo que realmente uso. Pasá el cursor para ver el patrón detrás.

01

Backend y Cloud

De microservicios Slim a edge Deno, notificaciones multi-canal, Postgres RLS.

  • Aislamiento multi-tenant con Row Level Security.

    loc: 01.01sec: BA1
    create policy tenant_isolation on docs
      using (org_id = auth.org());
  • Edge Functions en Deno — Postgres RPC-only, serverless autenticado.

    loc: 02.01sec: BA2
    import { serve } from 'https://deno.land/std/http/server.ts';
    await supabase.rpc('enqueue_job', { payload });
  • Push, email, SMS, WhatsApp — microservicios marketplace a plataformas de workflows.

    loc: 03.01sec: BA3
    // lio-api-serv-mailings · lio-api-serv-notifications
    $mailingService->send($template, $user);
  • Ambientes efímeros por branch.

    loc: 04.01sec: BA4
    dokku apps:create review-$BRANCH
  • Flujos de pago, webhooks y migraciones Firebase→relacional.

    loc: 05.01sec: BA5
    const event = stripe.webhooks.constructEvent(
      body, sig, process.env.STRIPE_SECRET
    );
  • Data loaders, scripts cron, generación de assets estáticos.

    loc: 06.01sec: BA6
    docs = loader.fetch_clickup(space_id)
    chunks = splitter.split_documents(docs)
  • 15+ microservicios Slim 4 — patrón Repository/Provider, años en producción.

    loc: 07.01sec: BA7
    $app->get('/notifications', [HeaderController::class, 'list']);
    // Repository · Provider · PDO
  • vhosts, mod_rewrite, MariaDB/MySQL — servidores configurados desde cero.

    loc: 08.01sec: BA8
    <VirtualHost *:80>
      DocumentRoot /var/www/app/public
    </VirtualHost>
pasá para inspeccionar
02

Frontend e Interactivo

UI RSC-first, motion, i18n, templates email — grado producción.

  • React 19 Server Components + Server Actions.

    loc: 01.02sec: FR1
    async function Page() {
      const data = await query();
      return <View data={data} />;
    }
  • SPAs marketplace y paneles admin — lio-app-* con ~1k usuarios concurrentes.

    loc: 02.02sec: FR2
    export default defineNuxtConfig({
      ssr: true,
      nitro: { preset: 'node-server' },
    });
  • Design systems tokenizados desde cero.

    loc: 03.02sec: FR3
    <Button variant="ghost" size="sm" />
  • Validación en runtime que matchea tipos TS.

    loc: 04.02sec: FR4
    const form = useForm({ validators: { onChange: schema } });
  • UI scroll-driven con guards reduced-motion — identidad del sitio, no decoración.

    loc: 05.02sec: FR5
    gsap.fromTo(el,
      { autoAlpha: 0, y: 16 },
      { scrollTrigger: { trigger: el } }
    );
  • Routing ES/EN completo, copy CMS y alternates SEO desde un solo codebase.

    loc: 06.02sec: FR6
    const t = await getTranslations({ locale, namespace: 'hero' });
    return <h1>{t('title')}</h1>;
  • Templates responsivos + microservicio mailings — Outlook, Gmail, clientes principales.

    loc: 07.02sec: FR7
    <!--[if mso]>
    <table role="presentation" width="600">
    <![endif]-->
    <td style="padding:16px;">
pasá para inspeccionar
03

Arquitectura de Sistemas

DDD, event-driven, refactors legacy, patrones que escalan.

  • Código organizado por feature y dominio.

    loc: 01.03sec: AR1
    modules/
      billing/
      workflows/
      notifications/
  • Triggers, colas, procesamiento en tiempo real.

    loc: 02.03sec: AR2
    emit('job.completed', { id, result });
  • Tipos de error explícitos, sin throws silenciosos.

    loc: 03.03sec: AR3
    type Result<T> =
      | { ok: true; value: T }
      | { ok: false; error: E };
  • Descomposición lio-api-serv-* — bridge, mailings, envíos, notifications.

    loc: 04.03sec: AR4
    // lio-api-serv-bridge
    // lio-api-serv-mailings
    // lio-api-serv-notifications
  • Acceso a BD solo vía funciones Postgres con aislamiento por tenant.

    loc: 05.03sec: AR5
    create function get_jobs(p_org uuid)
      returns setof jobs
      language sql security definer;
  • Recuperación de codebases complejos, descomposición de monolitos.

    loc: 06.03sec: AR6
    // before: 1 deploy · 1 DB
    // after:  api | worker | bridge
pasá para inspeccionar
04focus

Orquestación con IA

Orquestación de workflows, pipelines RAG, IA aplicada en producción.

  • Búsqueda semántica sobre conocimiento interno.

    loc: 01.04sec: AI1
    const docs = await retriever.invoke(question);
    return llm.stream({ docs, question });
  • Orquestación multi-paso, reintentos, scheduling.

    loc: 02.04sec: AI2
    step.retry({ attempts: 5, backoff: 'expo' });
  • Agentes IA como parte del ciclo de build.

    loc: 03.04sec: AI3
    await agent.run({ tools, plan, verify: true });
  • Embeddings + pgvector para discovery.

    loc: 04.04sec: AI4
    select 1 - (embedding <=> $1) as score
    order by score desc;
  • Pipeline ClickUp → vectores para base de conocimiento interna.

    loc: 05.04sec: AI5
    pages = clickup.get_pages(space_id)
    vectors = embedder.encode(pages)
  • QA anclado en docs de la empresa con respuestas streaming.

    loc: 06.04sec: AI6
    const chain = createRetrievalChain({ retriever, llm });
    return chain.stream({ input: question });
pasá para inspeccionar
05

Plataforma y DevOps

Pipelines CI/CD, envs efímeros, infra desde cero, SDKs de plataforma.

  • Workflow formal de contribución: branches, releases, hotfixes.

    loc: 01.05sec: PL1
    on:
      pull_request:
        branches: [main]
    jobs:
      preview:
        runs-on: ubuntu-latest
  • Ambientes preview por branch con auto-destrucción.

    loc: 02.05sec: PL2
    dokku apps:destroy review-$BRANCH --force
  • vhosts Apache, balanceadores, Docker — escalado de ~50 a ~1k usuarios concurrentes.

    loc: 03.05sec: PL3
    # apache vhost + docker compose + lb
    # ~50 → ~1000 concurrent users
  • Deploy edge, Serverless Functions, preview URLs.

    loc: 04.05sec: PL4
    export const runtime = 'edge';
    export async function GET() { ... }
  • Paquetes NPM habilitando integraciones seamless de plataforma.

    loc: 05.05sec: PL5
    import { FlywheelClient } from '@flywheel/sdk';
    await client.workflows.trigger(id);
  • Ingesta programada, reportes diarios, cron con GitHub Actions.

    loc: 06.05sec: PL6
    on:
      schedule:
        - cron: '0 6 * * *'
  • Monorepos multi-app con paquetes compartidos de UI, API y config.

    loc: 07.05sec: PL7
    pnpm dev --filter yapo
    // apps/* · packages/ui · packages/api
pasá para inspeccionar
06

Liderazgo e Integraciones

Mentoría, docs, CMS, SEO/AEO, agent skills open source.

  • Code reviews, estándares de ingeniería, retros de equipo.

    loc: 01.06sec: LE1
    // starter template · lint rules · PR checklist
  • Docs de API, guías de onboarding, diagramas de arquitectura.

    loc: 02.06sec: LE2
    ## Quick start
    pnpm install && pnpm dev
    ## Architecture
    modules/ → features/
  • Plataforma empresarial integrada con Salesforce CRM.

    loc: 03.06sec: LE3
    const account = await salesforce
      .sobject('Account')
      .retrieve(id);
  • CMS headless en múltiples productos y equipos.

    loc: 04.06sec: LE4
    *[_type == "note" && locale == $locale]
      | order(publishedAt desc)
  • MVP de gráficos estilo periódico desde refactor legacy complejo.

    loc: 05.06sec: LE5
    const scale = d3.scaleLinear()
      .domain([0, max]).range([0, width]);
  • Starters frontend y backend — lint rules, estructura de carpetas, checklists PR para onboarding del equipo.

    loc: 06.06sec: LE6
    pnpm create @flywheel/starter
    // eslint · tsconfig · folder conventions · CI
  • sitemap.xml, JSON-LD, llms.txt — discovery crawl y contenido legible para IA.

    loc: 07.06sec: LE7
    export default function sitemap(): MetadataRoute.Sitemap {
      return routes.map(/* ... */);
    }
  • 15+ agent skills reutilizables — tooling, SEO, GSAP, publicados para la comunidad.

    loc: 08.06sec: LE8
    npx skills add github.com/EnderPuentes/ai-agent-skills --skill gsap
pasá para inspeccionar

integridad del código · patrones prácticos · contexto de producto primero

construyendo con agentes, guiado por criterio

IA como herramienta de precisión que acelera la entrega — siempre con criterio de ingeniería, no automatización ciega.

pipeline de orquestación
01

ingest

interpretar intención, mapear restricciones, seleccionar habilidades

agent: architect
02

plan

descomponer en tareas, resolver dependencias, definir orden

agent: planner
03

execute

generar código, aplicar patrones, respetar arquitectura existente

agent: engineer
04

review

análisis estático, conformidad de patrones, auditoría anti-cliché

agent: reviewer
05

validate

verificar tipos, lint, tests, validar límites de integración

agent: validator
06

deploy

commit, push, monitorear CI, confirmar salud en producción

agent: deployer
// standbydebuggerdiagnosticar + parchargrillmecuestionar supuestos

Diez años, en secuencia.

2016 — 2017

CoffeeCode

Cofundador & Frontend Developer

Cofundé un pequeño estudio entregando sitios responsivos y campañas de email marketing compatibles con los principales clientes de correo — mi primer paso del frontend freelance hacia construir productos de punta a punta.

Primer ownership end-to-end de producto

WordPressHTMLBootstrapjQueryJavaScript

2017 — 2019

Synapsis CI

Frontend → Full Stack Developer

Evolucioné de sitios frontend responsivos a ownership full stack: mantuve un CMS custom en CodeIgniter, entregué un page builder multi-dominio con configuración visual centralizada y replicación de contenido entre dominios, y operé GSuite más servicios de hosting como proveedor.

De frontend a full stack en 18 meses

PHPMySQLCodeIgniterBootstrapjQuerySCSSApachecPanel

2019 — 2022

Libre Opción

Software Developer

Casi tres años en un solo producto marketplace de e-commerce: migré un monolito con problemas de rendimiento a microservicios (API central, servidor de importación, runner de tareas, puentes de pagos/envíos/notificaciones), reconstruí UI/UX desde cero y escalé de ~50 a ~1.000 usuarios concurrentes sobre infraestructura que construí desde cero.

~20× más usuarios concurrentes

Nuxt.jsPHPLaravelPythonMariaDBApacheDocker

2022 — 2024

Aerolab

Software Developer

Trabajé con equipos multidisciplinarios en el desarrollo e integración de varios productos: plataforma empresarial con Salesforce, MVP de visualización D3.js desde un refactor legacy, CMS universitario con i18n en Strapi y calculadora de fondos mutuos con ingesta automatizada vía GitHub Actions y Sanity. Lideré algunos desarrollos con equipos internos y externos, más CI/CD formal con ambientes efímeros por branch y workflows de contribución.

Entrega del equipo sin perder estabilidad

Next.jsTypeScriptSalesforceStrapiSanityD3.jsDockerPostgreSQLGitHub Actions

2025 — Present

Flywheel Studio

Backend Developer / Platform Engineer

Lidero un producto de orquestación de flujos y notificaciones mientras amplío el rol hacia el equipo: construí la automatización push/email casi en solitario durante ~11 meses (Next.js 16 RSC, backend Supabase RPC-only, motor async modular), entregué SDKs NPM y una corrección Firebase→relacional — y hoy mentoreo developers, defino starters de código, establezco buenas prácticas de ingeniería y facilito retros para el equipo de desarrollo.

Producto activo · mentoría, starters y retros al equipo

TypeScriptPythonNext.js 16SupabasePostgreSQLFirebaseSanityStripe

2026 — ∞

What's Next

Arquitecto de Software

Enfocado en liderazgo de arquitectura de software — abierto a roles donde convergen sistemas event-driven, IA aplicada y diseño de plataformas limpio. Actualmente finalizando Ingeniería de Sistemas con mención en Sistemas Computacionales.

Abierto a roles de arquitectura de software y plataforma

ArchitectureSystem DesignAI ToolingCloud NativeOpen Source
Endev
</> // about.me

Antes de contactarme, esto es quien soy

Si llegaste hasta acá, ya viste cómo pienso y qué construyo. Soy desarrollador de software y estoy culminando la carrera de Ingeniería de Sistemas, con más de una década entregando productos reales — enfocado en producto y arquitectura, aprendiendo siempre en ambos.

Mi enfoque: pensar primero en el producto, después elegir la arquitectura que encaje. Código mantenible, performante y honesto — sin over-engineering ni abstracciones por abstracción — solo sistemas que resuelven problemas reales.

  • Full-stack
  • Enfoque producto
  • Clean code advocate

Conectemos

Abierto a nuevos proyectos, desafíos técnicos y colaboraciones con impacto — seas recruiter, founder o colega engineer.

Disponiblebuenos aires
Hora local--:--
EstadoOnline

Suele responder rápido

o escribime directamente

Nombre

Email

Mensaje

Tu información es privada y nunca se comparte.