Blog personal construido con Hugo y el tema PaperMod, desplegado en Cloudflare Pages.
- Tema PaperMod personalizado
- Generación automática de imágenes Open Graph con resvg (sin Chrome)
- Soporte para CSS personalizado
- Optimizado para SEO
- Build ultrarrápido con Bun (~28s en CI)
Ejecuta este comando una sola vez después de clonar el repositorio:
bun run setupEste comando:
- Instala todas las dependencias
Nota: El proyecto usa Bun para ejecución directa de TypeScript (sin paso de compilación).
Para desarrollo diario:
bun run blog:devPara construir el sitio (genera OG images + Hugo build):
bun run blog:buildPara generar solo las imágenes Open Graph:
bun run generate-ogPara build de CI (usado por Cloudflare Pages):
bun run ci:buildEl blog usa dos tipos de imágenes:
- Imágenes editoriales: van en
assets/imgy se referencian como/img/nombre.webpdesde los posts. - Imágenes Open Graph: se generan en
static/images/ogdurante el build y se publican como/images/og/slug-del-post.png.
El sistema genera automáticamente imágenes Open Graph (OG) para compartir en redes sociales usando resvg.
- Build local y CI:
bun run blog:buildybun run ci:buildgeneran las imágenes antes de ejecutar Hugo. - Manual:
bun run generate-oggenera solo las imágenes faltantes o modificadas. - Sin mutar posts: el generador no edita frontmatter; solo lee
titleydescription. - Fallback automático: si un post no define
cover.image, los metadatos sociales usan/images/og/<nombre-del-archivo>.png.
Cada post debe incluir en su frontmatter:
+++
title = "Título del Post"
description = "Descripción para redes sociales"
+++- Imágenes de 1200x630px con fondo negro
- No requiere Chrome/Chromium
- Caché local ignorado por git (
.og-cache.json) - No agrega ni modifica
cover.image
Usa cover.image solo cuando quieras una imagen social o portada específica:
[cover]
image = "/img/mi-portada.webp"
hidden = trueLas plantillas de las imágenes OG se pueden personalizar editando:
- La lógica de generación en
scripts/generate-og-images.ts
El blog se despliega automáticamente en Cloudflare Pages cuando se hace push a la rama main.
- Build command:
bun install && bun run ci:build - Build output directory:
public - Variable:
SKIP_DEPENDENCY_INSTALL=true
- Bun ejecuta TypeScript directamente (sin paso de compilación
tsc) - resvg genera imágenes sin necesidad de navegador
.og-cache.jsonqueda local para evitar trabajo repetido durante desarrollo
MIT