{"posts":[{"slug":"postgres-orm-query-builders","pair":"postgres-orm","title":"SQL, query builders y ORMs: Knex, Prisma, Drizzle y compañía","description":"No compares todas las herramientas como si fueran lo mismo. Decide cuánta abstracción necesitas y cuánto control sobre SQL quieres conservar.","author":"Daniel Murillo","publishedAt":"2026-10-28","lang":"es","kind":"arquitectura","keywords":["postgres","orm","prisma","drizzle","knex","kysely","typeorm","sql"]},{"slug":"testing-apis-contrato-e2e-carga","pair":"api-testing","title":"Cómo probar una API: contrato, E2E y carga","description":"La meta no es tener muchas pruebas, sino evidencia rápida de que la API cumple su contrato bajo condiciones relevantes.","author":"Daniel Murillo","publishedAt":"2026-10-28","lang":"es","kind":"arquitectura","keywords":["testing","api","contrato","e2e","k6","vitest","openapi","carga"]},{"slug":"autenticacion-cookies-jwt-oauth","pair":"auth-cookies","title":"Autenticación: por qué preferir cookies (y qué hacer si no puedes)","description":"Si controlas la web, sesión en cookie HttpOnly suele mitigar mejor el robo por XSS que un JWT en localStorage. Cuándo no alcanza y cómo resolverlo.","author":"Daniel Murillo","publishedAt":"2026-10-28","lang":"es","kind":"arquitectura","keywords":["autenticacion","cookies","jwt","oauth","csrf","xss","sesiones","bff"]},{"slug":"serie-runtimes-04-comparativa","pair":"runtimes-04-compare","title":"Node.js vs Bun vs Deno en 2026: una decisión de arquitectura","description":"El mejor runtime es el que cumple tus requisitos con el equilibrio correcto de rendimiento, compatibilidad, seguridad y costo operativo.","author":"Daniel Murillo","publishedAt":"2026-10-28","lang":"es","kind":"arquitectura","keywords":["nodejs","bun","deno","runtime","arquitectura","benchmarks","decision"]},{"slug":"serie-runtimes-03-deno","pair":"runtimes-03-deno","title":"Deno en 2026: seguridad, TypeScript y una nueva forma de ejecutar JavaScript","description":"Deno tiene sentido cuando permisos, APIs web y tooling integrado resuelven necesidades reales. La compatibilidad con Node ha avanzado, pero hay que verificarla.","author":"Daniel Murillo","publishedAt":"2026-10-28","lang":"es","kind":"arquitectura","keywords":["deno","runtime","typescript","permisos","seguridad","hono"]},{"slug":"contenedores-docker-12-factor","pair":"containers-12factor","title":"Contenedores y Twelve-Factor: de tu máquina a producción","description":"Un contenedor hace más reproducible el entorno; no convierte solo la app en un servicio seguro, escalable y fácil de operar.","author":"Daniel Murillo","publishedAt":"2026-10-28","lang":"es","kind":"arquitectura","keywords":["docker","contenedores","twelve-factor","kubernetes","produccion","healthcheck"]},{"slug":"nodejs-bun-deno-decision-arquitectura","pair":"runtime-decision","title":"Node.js vs Bun vs Deno: cómo elegir un runtime para backend en 2026","description":"No elijas solo por requests/s. Ecosistema, compatibilidad, operación y el rendimiento de tu aplicación real.","author":"Daniel Murillo","publishedAt":"2026-10-28","lang":"es","kind":"arquitectura","keywords":["nodejs","bun","deno","runtime","backend","typescript","arquitectura"]},{"slug":"observabilidad-logs-metricas-tracing","pair":"observability","title":"Observabilidad: logs, métricas, tracing y OpenTelemetry","description":"Los logs cuentan eventos, las métricas muestran tendencias y los traces siguen una petición. Instrumenta para investigar lo que no anticipaste.","author":"Daniel Murillo","publishedAt":"2026-10-28","lang":"es","kind":"arquitectura","keywords":["observabilidad","opentelemetry","logs","metricas","tracing","prometheus","slo"]},{"slug":"containers-docker-12-factor","pair":"containers-12factor","title":"Containers and Twelve-Factor: from your machine to production","description":"A container makes the environment more reproducible; it does not by itself turn the app into a secure, scalable, easy-to-operate service.","author":"Daniel Murillo","publishedAt":"2026-10-28","lang":"en","kind":"arquitectura","keywords":["docker","containers","twelve-factor","devops","production","healthcheck"]},{"slug":"postgres-orm-query-builders","pair":"postgres-orm","title":"SQL, query builders, and ORMs: Knex, Prisma, Drizzle, and company","description":"Do not compare every tool as if they were the same thing. Decide how much abstraction you need and how much control over SQL you want to keep.","author":"Daniel Murillo","publishedAt":"2026-10-28","lang":"en","kind":"arquitectura","keywords":["postgres","orm","prisma","drizzle","knex","kysely","typeorm","sql"]},{"slug":"nodejs-bun-deno-architecture-decision","pair":"runtime-decision","title":"Node.js vs Bun vs Deno: how to choose a backend runtime in 2026","description":"Do not choose only by requests/s. Ecosystem, compatibility, operations, and the performance of your real application.","author":"Daniel Murillo","publishedAt":"2026-10-28","lang":"en","kind":"arquitectura","keywords":["nodejs","bun","deno","runtime","backend","typescript","architecture"]},{"slug":"authentication-cookies-jwt-oauth","pair":"auth-cookies","title":"Authentication: why prefer cookies (and what to do if you cannot)","description":"If you control the web app, an HttpOnly cookie session usually mitigates XSS token theft better than a JWT in localStorage. When that is not enough and how to fix it.","author":"Daniel Murillo","publishedAt":"2026-10-28","lang":"en","kind":"arquitectura","keywords":["authentication","cookies","jwt","oauth","csrf","xss","sessions","bff"]},{"slug":"runtimes-series-03-deno","pair":"runtimes-03-deno","title":"Deno in 2026: security, TypeScript, and a new way to run JavaScript","description":"Deno makes sense when permissions, web APIs, and integrated tooling solve real needs. Node compatibility has advanced, but you must verify it.","author":"Daniel Murillo","publishedAt":"2026-10-28","lang":"en","kind":"arquitectura","keywords":["deno","runtime","typescript","permissions","security","hono"]},{"slug":"runtimes-series-04-comparison","pair":"runtimes-04-compare","title":"Node.js vs Bun vs Deno in 2026: an architecture decision","description":"The best runtime is the one that meets your requirements with the right balance of performance, compatibility, security, and operational cost.","author":"Daniel Murillo","publishedAt":"2026-10-28","lang":"en","kind":"arquitectura","keywords":["nodejs","bun","deno","runtime","architecture","benchmarks","decision"]},{"slug":"observability-logs-metrics-tracing","pair":"observability","title":"Observability: logs, metrics, tracing, and OpenTelemetry","description":"Logs recount events, metrics show trends, and traces follow a request. Instrument so you can investigate what you did not anticipate.","author":"Daniel Murillo","publishedAt":"2026-10-28","lang":"en","kind":"arquitectura","keywords":["observability","opentelemetry","logs","metrics","tracing","prometheus","slo"]},{"slug":"api-testing-contract-e2e-load","pair":"api-testing","title":"How to test an API: contract, E2E, and load","description":"The goal is not to have many tests, but fast evidence that the API meets its contract under relevant conditions.","author":"Daniel Murillo","publishedAt":"2026-10-28","lang":"en","kind":"arquitectura","keywords":["testing","api","contract","e2e","k6","vitest","openapi","load"]},{"slug":"deploys-monorepos-soluciones","pair":"monorepo-deploys","title":"Deploys en monorepos: problemas comunes y cómo resolverlos","description":"Un monorepo no obliga a desplegar todo junto. Cómo detectar impacto, construir artefactos y publicar solo lo necesario.","author":"Daniel Murillo","publishedAt":"2026-10-27","lang":"es","kind":"arquitectura","keywords":["monorepo","deploy","ci","cd","docker","nx","pnpm","turborepo"]},{"slug":"ia-para-programar-flujo-de-trabajo","pair":"ai-dev-workflow","title":"IA para desarrollar software: no hay una mejor herramienta, hay un mejor encaje","description":"Elige por tarea y flujo de trabajo. Asistentes, diseño, agentes de código e imágenes no compiten por el mismo ranking.","author":"Daniel Murillo","publishedAt":"2026-10-27","lang":"es","kind":"programacion","keywords":["ia","cursor","copilot","prompting","stitch","v0","flujo-de-trabajo"]},{"slug":"serie-runtimes-02-bun","pair":"runtimes-02-bun","title":"Bun en 2026: ¿realmente es más rápido que Node.js?","description":"Bun merece evaluarse por runtime y tooling. Una ventaja en benchmarks solo importa si sobrevive a tu código, dependencias y entorno real.","author":"Daniel Murillo","publishedAt":"2026-10-27","lang":"es","kind":"arquitectura","keywords":["bun","nodejs","runtime","javascriptcore","typescript","benchmarks"]},{"slug":"notificaciones-push-arquitectura-completa","pair":"push-notifications","title":"Cómo funcionan las notificaciones push: VAPID, FCM, APNs y multiplataforma","description":"Push no es una conexión directa al móvil. Tokens, topics, VAPID, FCM, APNs, Web Push y qué cambia con Capacitor, React Native o Flutter.","author":"Daniel Murillo","publishedAt":"2026-10-27","lang":"es","kind":"arquitectura","keywords":["push","fcm","apns","vapid","web-push","notificaciones","capacitor","flutter"]},{"slug":"serie-runtimes-01-nodejs","pair":"runtimes-01-nodejs","title":"Node.js en 2026: por qué sigue siendo una apuesta sólida para backend","description":"Madurez, ecosistema y operación. Node no necesita ganar todos los benchmarks para ser una gran decisión de arquitectura.","author":"Daniel Murillo","publishedAt":"2026-10-27","lang":"es","kind":"arquitectura","keywords":["nodejs","runtime","backend","typescript","event-loop","arquitectura"]},{"slug":"runtimes-series-02-bun","pair":"runtimes-02-bun","title":"Bun in 2026: is it really faster than Node.js?","description":"Bun deserves evaluation for its runtime and tooling. A benchmark advantage only matters if it survives your code, dependencies, and real environment.","author":"Daniel Murillo","publishedAt":"2026-10-27","lang":"en","kind":"arquitectura","keywords":["bun","nodejs","runtime","javascriptcore","typescript","benchmarks"]},{"slug":"push-notifications-full-architecture","pair":"push-notifications","title":"How push notifications work: VAPID, FCM, APNs, and cross-platform","description":"Push is not a direct connection to the phone. Tokens, topics, VAPID, FCM, APNs, Web Push, and what changes with Capacitor, React Native, or Flutter.","author":"Daniel Murillo","publishedAt":"2026-10-27","lang":"en","kind":"arquitectura","keywords":["push","fcm","apns","vapid","web-push","notifications","capacitor","flutter"]},{"slug":"ai-for-software-development","pair":"ai-dev-workflow","title":"AI for software development: there is no best tool, there is a best fit","description":"Choose by task and workflow. Assistants, design, coding agents, and images do not compete for the same ranking.","author":"Daniel Murillo","publishedAt":"2026-10-27","lang":"en","kind":"programacion","keywords":["ai","cursor","copilot","prompting","stitch","v0","workflow"]},{"slug":"monorepo-deploys","pair":"monorepo-deploys","title":"Deploys in monorepos: common problems and how to solve them","description":"A monorepo does not force you to deploy everything together. How to detect impact, build artifacts, and publish only what you need.","author":"Daniel Murillo","publishedAt":"2026-10-27","lang":"en","kind":"arquitectura","keywords":["monorepo","deploy","ci","cd","docker","nx","pnpm","turborepo"]},{"slug":"runtimes-series-01-nodejs","pair":"runtimes-01-nodejs","title":"Node.js in 2026: why it is still a solid backend bet","description":"Maturity, ecosystem, and operations. Node does not need to win every benchmark to be a strong architecture decision.","author":"Daniel Murillo","publishedAt":"2026-10-27","lang":"en","kind":"arquitectura","keywords":["nodejs","runtime","backend","typescript","event-loop","architecture"]},{"slug":"monorepo-bun-pnpm-nx","pair":"monorepo-tools","title":"Monorepo: Bun Workspaces vs pnpm Workspaces vs Nx","description":"Bun y pnpm gestionan paquetes; Nx orquesta tareas. Cómo elegir sin confundir capas ni añadir complejidad de más.","author":"Daniel Murillo","publishedAt":"2026-10-26","lang":"es","kind":"arquitectura","keywords":["monorepo","bun","pnpm","nx","workspaces","ci"]},{"slug":"monorepo-bun-pnpm-nx","pair":"monorepo-tools","title":"Monorepo: Bun Workspaces vs pnpm Workspaces vs Nx","description":"Bun and pnpm manage packages; Nx orchestrates tasks. How to choose without mixing layers or adding unnecessary complexity.","author":"Daniel Murillo","publishedAt":"2026-10-26","lang":"en","kind":"arquitectura","keywords":["monorepo","bun","pnpm","nx","workspaces","ci"]},{"slug":"benchmarks-y-arquitectura","pair":"benchmarks-architecture","title":"¿Qué hace lenta una API? Benchmarks y decisiones de arquitectura","description":"No existe un protocolo universalmente más rápido. Cómo medir la operación completa y elegir REST, GraphQL, gRPC o eventos con datos.","author":"Daniel Murillo","publishedAt":"2026-10-25","lang":"es","kind":"arquitectura","keywords":["benchmarks","api","rendimiento","rest","graphql","grpc","arquitectura"]},{"slug":"benchmarks-and-architecture","pair":"benchmarks-architecture","title":"What makes an API slow? Benchmarks and architecture decisions","description":"There is no universally faster protocol. How to measure the full operation and choose REST, GraphQL, gRPC, or events with data.","author":"Daniel Murillo","publishedAt":"2026-10-25","lang":"en","kind":"arquitectura","keywords":["benchmarks","api","performance","rest","graphql","grpc","architecture"]},{"slug":"cache-y-compresion","pair":"cache-compression","title":"Caché y compresión: optimizar antes de escalar","description":"La caché evita trabajo repetido; la compresión reduce bytes. Cómo aplicarlas con seguridad en REST, GraphQL, gRPC y tiempo real.","author":"Daniel Murillo","publishedAt":"2026-10-24","lang":"es","kind":"arquitectura","keywords":["cache","compresion","gzip","brotli","redis","http","rendimiento"]},{"slug":"cache-and-compression","pair":"cache-compression","title":"Cache and compression: optimize before you scale","description":"Cache avoids repeated work; compression reduces bytes. How to apply them safely in REST, GraphQL, gRPC, and real time.","author":"Daniel Murillo","publishedAt":"2026-10-24","lang":"en","kind":"arquitectura","keywords":["cache","compression","gzip","brotli","redis","http","performance"]},{"slug":"websockets-sse-webhooks","pair":"websockets-sse-webhooks","title":"WebSockets, SSE y Webhooks: comunicación más allá de REST","description":"No toda app necesita un canal bidireccional permanente. Cuándo usar WebSockets, SSE o Webhooks según quién inicia el evento.","author":"Daniel Murillo","publishedAt":"2026-10-23","lang":"es","kind":"arquitectura","keywords":["websockets","sse","webhooks","tiempo-real","mqtt","api"]},{"slug":"websockets-sse-webhooks","pair":"websockets-sse-webhooks","title":"WebSockets, SSE, and Webhooks: communication beyond REST","description":"Not every app needs a permanent bidirectional channel. When to use WebSockets, SSE, or Webhooks depending on who initiates the event.","author":"Daniel Murillo","publishedAt":"2026-10-23","lang":"en","kind":"arquitectura","keywords":["websockets","sse","webhooks","real-time","mqtt","api"]},{"slug":"grpc-vs-rest","pair":"grpc-vs-rest","title":"gRPC vs REST: comunicación entre microservicios","description":"gRPC no es REST más rápido. Contratos, streaming y cuándo conviene entre servicios internos frente a una API pública.","author":"Daniel Murillo","publishedAt":"2026-10-22","lang":"es","kind":"arquitectura","keywords":["grpc","rest","microservicios","protobuf","streaming","http2"]},{"slug":"grpc-vs-rest","pair":"grpc-vs-rest","title":"gRPC vs REST: communication between microservices","description":"gRPC is not faster REST. Contracts, streaming, and when it fits internal services versus a public API.","author":"Daniel Murillo","publishedAt":"2026-10-22","lang":"en","kind":"arquitectura","keywords":["grpc","rest","microservices","protobuf","streaming","http2"]},{"slug":"rest-vs-graphql","pair":"rest-vs-graphql","title":"REST vs GraphQL: cuándo necesitas flexibilidad","description":"GraphQL no reemplaza REST en todos los casos. Cuándo la flexibilidad de consulta aporta valor y qué coste operativo implica.","author":"Daniel Murillo","publishedAt":"2026-10-21","lang":"es","kind":"arquitectura","keywords":["rest","graphql","api","n+1","cache","resolvers"]},{"slug":"rest-vs-graphql","pair":"rest-vs-graphql","title":"REST vs GraphQL: when you need flexibility","description":"GraphQL does not replace REST in every case. When query flexibility adds value and what operational cost it implies.","author":"Daniel Murillo","publishedAt":"2026-10-21","lang":"en","kind":"arquitectura","keywords":["rest","graphql","api","n+1","cache","resolvers"]},{"slug":"optimizacion-de-apis-rest","pair":"rest-api-optimization","title":"REST: cómo diseñar y optimizar una API","description":"REST no vuelve rápida a una API por sí solo. Cómo diseñar endpoints, caché, compresión y conexiones antes de cambiar de protocolo.","author":"Daniel Murillo","publishedAt":"2026-10-20","lang":"es","kind":"arquitectura","keywords":["rest","http","api","cache","compresion","optimizacion"]},{"slug":"optimizing-rest-apis","pair":"rest-api-optimization","title":"REST: how to design and optimize an API","description":"REST does not make an API fast by itself. How to design endpoints, cache, compression, and connections before changing protocol.","author":"Daniel Murillo","publishedAt":"2026-10-20","lang":"en","kind":"arquitectura","keywords":["rest","http","api","cache","compression","optimization"]},{"slug":"nestjs-spring-fastapi-comparativa","pair":"nestjs-spring-fastapi","title":"NestJS, Spring Boot y FastAPI: ¿importa tanto el lenguaje en 2026?","description":"Tres stacks distintos, ideas parecidas. Qué sí y qué no se puede concluir de la sintaxis, la arquitectura y los benchmarks públicos.","author":"Daniel Murillo","publishedAt":"2026-10-19","lang":"es","kind":"arquitectura","keywords":["nestjs","spring-boot","fastapi","arquitectura","benchmarks","api"]},{"slug":"decision-arquitectura-frontend","pair":"frontend-architecture","title":"Decisión de arquitectura frontend: React, Angular, Vue y el rendimiento","description":"Cómo elegir framework, renderizado y estrategia mobile sin confundir popularidad con encaje. Una guía por escenario para 2026.","author":"Daniel Murillo","publishedAt":"2026-10-19","lang":"es","kind":"arquitectura","keywords":["frontend","react","angular","vue","nextjs","astro","arquitectura","ssr","mobile"]},{"slug":"nestjs-spring-fastapi-comparison","pair":"nestjs-spring-fastapi","title":"NestJS, Spring Boot, and FastAPI: does the language matter that much in 2026?","description":"Three different stacks, similar ideas. What you can and cannot conclude from syntax, architecture, and public benchmarks.","author":"Daniel Murillo","publishedAt":"2026-10-19","lang":"en","kind":"arquitectura","keywords":["nestjs","spring-boot","fastapi","architecture","benchmarks","api"]},{"slug":"frontend-architecture-decision","pair":"frontend-architecture","title":"Frontend architecture decision: React, Angular, Vue, and performance","description":"How to choose a framework, rendering strategy, and mobile approach without confusing popularity with fit. A scenario-based guide for 2026.","author":"Daniel Murillo","publishedAt":"2026-10-19","lang":"en","kind":"arquitectura","keywords":["frontend","react","angular","vue","nextjs","astro","architecture","ssr","mobile"]},{"slug":"este-blog-vive-en-next","pair":"blog-on-next","title":"Este blog vive en Next.js","description":"Las páginas y la API de artículos salen del mismo proyecto. Nest ya no está en medio.","author":"Daniel Murillo","publishedAt":"2026-10-14","lang":"es","kind":"nota","keywords":["nextjs","api","blog"]},{"slug":"this-blog-runs-on-next","pair":"blog-on-next","title":"This blog runs on Next.js","description":"The pages and the articles API come from the same project. Nest is no longer in the middle.","author":"Daniel Murillo","publishedAt":"2026-10-14","lang":"en","kind":"nota","keywords":["nextjs","api","blog"]},{"slug":"como-publicar-un-articulo","pair":"how-to-publish","title":"Cómo publicar un artículo","description":"Un archivo Markdown en content/posts/es basta para que aparezca en el sitio y en la API.","author":"Daniel Murillo","publishedAt":"2026-10-13","lang":"es","kind":"nota","keywords":["markdown","contenido","video"]},{"slug":"how-to-publish-an-article","pair":"how-to-publish","title":"How to publish an article","description":"A Markdown file in content/posts/en is enough for it to appear on the site and in the API.","author":"Daniel Murillo","publishedAt":"2026-10-13","lang":"en","kind":"nota","keywords":["markdown","content","video"]},{"slug":"leer-articulos-desde-otro-servicio","pair":"read-posts-api","title":"Leer los artículos desde otro servicio","description":"La lista y el detalle viven en /api/posts. El cuerpo llega en Markdown, no en HTML.","author":"Daniel Murillo","publishedAt":"2026-10-12","lang":"es","kind":"programacion","keywords":["api","json","markdown"]},{"slug":"read-articles-from-another-service","pair":"read-posts-api","title":"Read articles from another service","description":"The list and detail live at /api/posts. The body arrives as Markdown, not HTML.","author":"Daniel Murillo","publishedAt":"2026-10-12","lang":"en","kind":"programacion","keywords":["api","json","markdown"]},{"slug":"una-entrada-dos-lecturas","pair":"one-entry-two-reads","title":"Una entrada, dos lecturas","description":"El archivo de la nota alimenta la página y la API. La arquitectura cabe en un dibujo.","author":"Daniel Murillo","publishedAt":"2026-10-11","lang":"es","kind":"arquitectura","keywords":["arquitectura","markdown","api"],"image":"/media/lectura-compartida.svg"},{"slug":"one-entry-two-readings","pair":"one-entry-two-reads","title":"One entry, two readings","description":"The note’s file feeds the page and the API. The architecture fits in one drawing.","author":"Daniel Murillo","publishedAt":"2026-10-11","lang":"en","kind":"arquitectura","keywords":["architecture","markdown","api"],"image":"/media/lectura-compartida.svg"}]}