{"posts":[{"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":"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 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-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-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, 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: 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: 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":"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-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":"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":"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":"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":"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"}]}