Qué Mal Poema
Publicación poética diaria, totalmente automatizada.
Resumen
Qué Mal Poema es una plataforma de publicación poética diaria. Cada día sale una entrada con un poema original mío, un poema citado de otro autor y un análisis en prosa. Desde diciembre de 2025 lleva más de 160 entradas publicadas sin interrupción.
A primera vista es un sitio sencillo y limpio. Detrás hay un sistema de publicación completo, automatizado de principio a fin, que construí solo. El objetivo era poder concentrarme al cien por cien en escribir, y delegar por completo la publicación y la actualización del sitio a la automatización.
El problema
Quería publicar poesía a diario para cultivar mi pasión por la escritura y mejorar mi escritura creativa y analítica. Pero la constancia diaria choca con la fricción: dar formato, subir archivos, actualizar índices, desplegar el sitio. Si cada publicación me costaba tiempo y atención, el proyecto no sobreviviría.
La solución no era escribir menos, sino eliminar por completo el trabajo manual de publicación.
La solución
El flujo de trabajo que diseñé es el corazón del proyecto: del iPad al sitio publicado, sin tocar nada más.
- Escribo en iA Writer en mi iPad, en texto plano.
- Ejecuto un atajo (Shortcut) de iOS/iPadOS. Eso es todo lo que hago.
- El atajo envía el texto (POST) a una app web de Google Apps Script, que parsea el contenido y lo escribe en el tab correcto de Google Docs.
- Una GitHub Action extrae el contenido vía la API de Google Docs (autenticación con service account), genera los archivos de texto fuente y construye los metadatos.
- OpenAI genera automáticamente las etiquetas (keywords) de cada entrada.
- La acción hace commit, despliega el sitio estático en GitHub Pages y me notifica por Telegram que la entrada está publicada.
Arquitectura
✍️ iA Writer (iPad)
│ texto plano
▼
📲 iOS Shortcut ──POST──▶ ☁️ Apps Script (doPost)
│
▼
📄 Google Docs
│ Docs API · service account
▼
⚙️ GitHub Action ──▶ 🐍 Python ──▶ 🤖 OpenAI
│ parse · validate (keywords)
│ SHA-256 · merge │
│ ▼
│ 🌐 GitHub Pages
▼
🔔 Telegram: "publicado ✅" El único paso manual es ejecutar el atajo. Todo lo demás es automático.
Stack técnico
| Capa | Tecnología |
|---|---|
| Entrada / escritura | iA Writer, Atajos de iOS/iPadOS |
| Puente de captura | Google Apps Script (web app doPost), gestionado con clasp |
| Contenido | Google Docs API (auth service-account) |
| Procesamiento | Python (parseo, validación, fingerprints SHA-256, merge) |
| IA | OpenAI API (generación de keywords) |
| CI/CD | GitHub Actions (6 workflows) |
| Notificaciones | Telegram Bot API |
| Frontend | JavaScript vanilla, HTML, CSS (estático) |
| Hosting | GitHub Pages |
Retos técnicos resueltos
Renderizado tipográfico del poema
Los poemas necesitan sangrías precisas. Implementé un sistema de anclas (|) que mide la posición en píxeles con un canvas a partir de la fuente real renderizada, para alinear versos al píxel exacto, además de líneas alineadas a la derecha.
Detección de ediciones
Cada poema tiene un fingerprint SHA-256 sobre el texto normalizado, lo que permite detectar cuándo edito un texto en Google Docs y re-publicar solo lo que cambió.
Idempotencia y fiabilidad
Separé metadatos (en archivo.json) del texto de los poemas, con un flujo de pending → merge y validación previa, para que las publicaciones automáticas sean seguras y repetibles.
Gestión de secretos en CI
Las credenciales del service account se inyectan de forma segura en las Actions (escritas vía Python para evitar problemas de saltos de línea), sin exponer nada en el repositorio.
Resultados
- +160 entradas publicadas de forma continua desde diciembre de 2025.
- Cero trabajo manual de publicación: escribir y pulsar un atajo es todo el proceso.
- Un sitio sencillo de cara al público que esconde un pipeline completo: integraciones de API, automatización CI/CD y orquestación entre múltiples servicios.
Qué demuestra este proyecto
Construí solo un sistema de extremo a extremo —desde la captura en el móvil hasta el despliegue en producción— integrando varias APIs y servicios. Pero, sobre todo, nació de un problema real y personal: usé la tecnología al servicio de una práctica creativa, automatizando lo aburrido para proteger lo que importa, escribir.