Cómo he montado este blog
Por qué tengo un blog propio, cómo lo he diseñado y cómo cuento lecturas y aplausos con Astro y Deno KV, sin cookies.
Llevaba tiempo queriendo un sitio propio donde escribir. No por nada en contra de las plataformas, sino porque prefiero tener yo el control: de lo que escribo, de cómo se ve y de dónde se guarda.
La duda no era técnica, sino de forma: ¿la portada tenía que hablar de mí o de lo que escribo?
Menos es más
El diseño lo tenía claro desde el principio: algo minimalista, limpio, sin demasiadas cosas. El “menos es más” llevado hasta el punto de quitar incluso los colores. Todo va en blanco y negro, el color lo ponen las fotos y partes de código.
Con tan pocos elementos, la tipografía hace casi todo el trabajo. Los títulos van en Fraunces, una serif suave que da el toque acogedor. El texto usa Figtree, una sans redonda y muy legible.
Stack
Para la web he usado Astro. No era la excusa para probar algo nuevo: ya lo uso para la mayoría de las landings que hago y es bastante rápido, tanto de desarrollar como de cargar. Genera HTML estático a partir de Markdown, que es justo lo que necesita un blog.
Cada post es un archivo Markdown con unos pocos metadatos al principio:
---
title: Cómo he montado este blog
description: Por qué tengo un blog propio, cómo lo he diseñado y cómo cuento lecturas y aplausos con Astro y Deno KV, sin cookies.
date: 2026-05-16
tags: [Proyectos, Desarrollo]
---
Tailwind se encarga de los estilos y Coolify lo despliega en mi propio servidor en cada push. Escribo, hago commit y en unos segundos está publicado.
Lecturas y aplausos
Quería saber si alguien lee lo que escribo, y que quien lo lea pueda decírmelo sin tener que dejar un comentario. De ahí salen dos detalles: el contador de lecturas junto a la fecha y el corazón que hay al final de cada post.
El blog sigue siendo estático. Lo único que se ejecuta en el servidor son dos pequeños endpoints de Astro que corren en Deno y guardan los números en Deno KV, una base de datos clave-valor.
Para algo así, Deno KV me parece muy buena opción: es ligera y simple. No necesitaba montar una base de datos para guardar dos contadores. En mi servidor es un archivo en un volumen: sin servicios externos ni cuentas en ninguna plataforma.
Algunas reglas para que los números signifiquen algo:
- Una lectura por persona y día. Recargar la página no suma.
- Hasta 10 aplausos. Puedes pulsar el corazón hasta 10 veces por post y día. Cada clic suena una nota más aguda de una escala pentatónica, y el décimo cierra con un pequeño acorde. La idea la vi en otras webs y me gustó. Si te arrepientes, clic derecho quita uno y la escala baja. Los clics se agrupan y se envían juntos.
- Sin guardar IPs. Para distinguir visitantes uso un hash de la IP, el navegador y el día, con una clave secreta. Cambia cada día y no se puede volver atrás para saber quién eras.
Sumar es una operación atómica de Deno KV, así que aunque lleguen muchos aplausos a la vez no se pierde ninguno ni se pasa del límite:
await kv
.atomic()
.check(given)
.sum(['claps', slug], BigInt(allowed))
.set(byKey, (given.value ?? 0) + allowed, { expireIn: DAY })
.commit();
Sin cookies
No hay cookies ni se guarda nada en el localStorage del navegador. Todo se controla en el servidor, con ese hash diario. Por eso tampoco vas a ver ningún banner pidiéndote que aceptes nada nada más entrar.
Si has llegado hasta aquí, ya sabes qué hacer con el corazón de abajo.
· aplausos