* notes / all writing
Notes, rants, receipts.
Frontend, animation, the occasional war story. Long-form when it earns it; one-liners when it doesn't.
- Jun 15, 2025
the stack behind this site
— A tour of the choices that make akzu.dev what it is — Next.js 16, Bun, SQLite + Redis on Dokploy, and a riso-print aesthetic that fights the AI-slop look.#meta2 min - May 20, 2026
Splines y easings: la matemática del cursor con cola
— El cursor con cola dasheada de este sitio termina apoyado en una spline de Catmull-Rom convertida a Béziers cúbicas y un easing con rebote. Tres ecuaciones que llevaba años queriendo entender.#matemáticas10 min - May 16, 2026
IPC y XPC en Swift: cómo construí un MCP para mi editor de vídeo
— Comunicación entre procesos en macOS: del NSXPCConnection a un servidor MCP que expone acciones de edición de vídeo a Claude.#swift6 min - Feb 25, 2026
Dokploy: cómo alojar múltiples proyectos en un mismo servidor
— Cómo pasé mis proyectos de DigitalOcean a un VPS con Dokploy: Docker Swarm por debajo, Traefik enrutando todo, y lo que aprendí para que un solo servidor aguante varias aplicaciones.#devops7 min - Feb 15, 2026
De web a Electron
— Cómo empaqueté una aplicación web madura en Electron sin reescribirla: arquitectura de procesos, IPC seguro vía contextBridge, firma y notarización en macOS y el inevitable shock del tamaño del bundle.#electron8 min - Feb 10, 2026
Anthropic SDK
— Recorrido práctico por el SDK de Anthropic en TypeScript: Messages API, streaming, tool use y prompt caching como ciudadano de primera clase.#anthropic7 min - Jan 8, 2026
WebAssembly: para qué sirve realmente (y para qué no)
— Un repaso honesto a WASM tras varios experimentos: cuándo compensa, cuándo es puro fetichismo y por qué la frontera JS-WASM cuesta más cara de lo que parece.#webassembly5 min - Nov 20, 2025
Arduino y el compilador tipo C
— Un fin de semana con el ATmega32u4 de un Arduino Leonardo: del LDR al PWM, del PWM al MOSFET, y oír un relé chasquear porque un puñado de bytes lo ordenaron.#arduino7 min - Nov 4, 2025
Cómo Zig fue bifurcado por Bun y por qué importa
— Bun no usa Zig upstream: mantiene su propio fork del compilador. Investigué qué cambios introduce, por qué la inestabilidad pre-1.0 de Zig lo hace casi inevitable y qué paralelismos guarda con el ecosistema de JavaScriptCore.#bun7 min - Oct 16, 2025
Un solo archivo para configurar mi Mac
— Cómo reduje el ritual de estrenar un MacBook a un solo comando: Homebrew, Brewfile, defaults write, mas-cli, oh-my-zsh y stow orquestados desde un script idempotente.#dotfiles6 min - Oct 14, 2025
An isometric shooter in HTML: math, canvas and tile maps
— Construí un shooter isométrico en HTML5 Canvas: proyección, conversión de coordenadas, mapa de tiles, ordenación por profundidad y disparos pooled. Lo que aprendí cuando las matemáticas encajaron.#canvas6 min - Oct 6, 2025
Git: trucos y atajos que mejoran tu día (incluido `rarara`)
— Comandos, alias y patrones de git que uso a diario: add -p, commit --fixup, rarara, worktree, reflog y los errores que solo se aprenden al perder un commit y recuperarlo.#git8 min - Sep 29, 2025
Git rebase vs merge
— Una explicación honesta de qué hace cada comando a nivel de grafo de commits, cuándo conviene cada estrategia, la regla de oro que casi nadie respeta y la conversación de equipo que acabó decidiendo nuestra política.#git8 min - Sep 9, 2025
GNU Stow 🤫
— Cómo migré mi configuración personal a GNU Stow, qué pierdo, qué gano y por qué los enlaces simbólicos siguen siendo la mejor abstracción para los dotfiles.#dotfiles6 min - Aug 18, 2025
Manejo de errores real en Express: una jerarquía de clases que funciona
— Cómo limpié años de try/catch desperdigados en mis controladores con una jerarquía de clases de error, un middleware central y la disciplina de distinguir errores operativos de errores de programación.#express9 min - Aug 10, 2025
Afinando mi Nuphy: el viaje con los switches morados
— Lubricado de estabilizadores, films, espuma y un keymap propio en QMK: lo que aprendí afinando un Nuphy Air75 con switches tactiles morados hasta dejarlo a mi gusto.#teclado6 min - Jun 18, 2025
CloudFront y las cookies: por qué necesitas una lista explícita
— Una investigación a fondo sobre por qué CloudFront descarta cookies por defecto, cómo configurar listas blancas con Cache Policy y Origin Request Policy, y la trampa de cacheabilidad que aprendí a la mala.#aws6 min - Apr 9, 2025
React Native en producción
— Lo que descubrí al llevar una app de React Native al App Store y a Play: Expo o bare, JSI, FlatList, OTA y los pequeños desencantos que nadie cuenta.#react-native6 min - Apr 7, 2025
Detectar lengua de señas con Python
— Detección de lengua de señas con MediaPipe: vectores de landmarks, normalización al origen de la muñeca, modelado temporal y una mirada honesta a los límites de un dataset pequeño.#python8 min - Mar 27, 2025
Microservicios con Docker para un blog: auth, posts y autores por separado
— Desmonté un blog en tres servicios independientes orquestados con docker-compose. Funciona; ahora cuento si valió la pena partir algo que cabía en un monolito.#microservicios6 min - Mar 18, 2025
De ESLint a Ultracite con Biome
— Del tándem ESLint + Prettier a Biome configurado con la receta opinada de Ultracite, midiendo tiempos y dolores en un monorepo Next.js.#biome7 min - Feb 23, 2025
AWS Rekognition + S3
— Una arquitectura serverless para identificar asistentes en un evento: S3 como almacenamiento, Rekognition como motor biométrico y un puñado de lecciones sobre umbrales de confianza y privacidad.#aws7 min - Jan 25, 2025
JWT, permisos y Redis: cómo gestionar revocación a escala
— Una arquitectura híbrida que conserva la apatridia del JWT sin renunciar a revocar sesiones en milisegundos: denylist en Redis, caché de permisos por usuario y refresh tokens con rotación.#jwt7 min - Jan 14, 2025
Domain-Driven Design: lo que de verdad cambia cuando lo aplicas
— Un balance honesto tras varios años aplicando DDD: el proyecto donde fue puro sobre-diseño, el que salvó al equipo, y los conceptos (agregados, lenguaje ubicuo, capas) que de verdad mueven la aguja.#ddd10 min - Jan 4, 2025
Cómo me inventé un lenguaje en Rust: JS con sintaxis más ligera
— Un experimento en construcción de lenguajes: lexer con logos, parser Pratt hecho a mano, AST tipado y un intérprete tree-walking que ejecuta una variante de JavaScript donde 'fun' sustituye a 'function'.#rust9 min - Nov 25, 2024
Next.js App Router: sitemaps y el caso del <Head> que rompía la hidratación
— Generación dinámica de sitemaps con app/sitemap.ts y la migración de next/head a la Metadata API, con un error de hidratación real como guía.#next.js6 min - Sep 16, 2024
Love2D y Lua: un ping-pong desde cero
— Mi primer juego completo en LÖVE: bucle principal, física con delta-time, colisiones AABB y la elegancia desconcertante de Lua.#love2d7 min - Jul 13, 2024
Anillos de protección en el procesador: el origen del kernel mode
— Los anillos de privilegio en x86: cómo funciona un syscall, por qué el hipervisor es ring -1 y qué es el System Management Mode (ring -2).#sistemas-operativos7 min - Feb 7, 2024
El LSP de TypeScript: cómo tu editor entiende el código
— Un viaje técnico por el Language Server Protocol aplicado a TypeScript: tsserver, JSON-RPC sobre stdio, sincronización incremental y las trampas que descubrí configurándolo en Neovim desde cero.#typescript8 min - Jan 5, 2024
Aprender Vim con dolor de muñeca: expectativas realistas
— Empecé con Vim por dolor de muñeca y curiosidad. Cuento sin adornos la curva de aprendizaje, lo que ayuda y lo que no, y por qué Vim solo no resuelve la ergonomía.#vim8 min - Nov 1, 2023
Contribuir a Video.js: mi código en el reproductor de medio internet
— Mis pull requests en Video.js como alexrqs: la arquitectura de componentes, el sistema de plugins, la etiqueta del open source y la emoción de ver tu código en un reproductor que usa medio mundo.#open-source7 min - Sep 15, 2023
Socket.IO: salas y sincronización de movimiento para un videojuego
— Cómo orquesté un multijugador en tiempo real con Socket.IO: salas, frecuencia de tick, interpolación cliente y la trampa del broadcast por evento.#socket.io8 min - Sep 12, 2023
BullMQ y las colas: cuando un trabajo no debe vivir en tu request handler
— Reflexión técnica sobre el diseño de sistemas asíncronos con BullMQ: ciclo de vida de los trabajos, reintentos exponenciales, scheduling, observabilidad y un episodio doloroso de concurrencia descontrolada.#bullmq7 min