Episodio 007 — La web viva
Serie: bitácora de ingeniería — caprini.dev
Slug: 007-la-web-viva
Resumen: el progress tracker (projects/001-progress-tracker/tracker.mjs) sigue siendo un backend ligero: llama a la API de GitLab y vuelca datos en consola (y el bloque para X). En este episodio añadimos un segundo destino de esos mismos hechos: un archivo src/content/last-activity.json que el sitio importa en build como si fuera un latido del repositorio visible en el Hero de la Home.
Por qué JSON estático y no una base de datos
- El blog es estático: Astro genera HTML a partir del contenido en disco.
- Persistir “último commit” en Postgres/SQLite añadiría hosting, migraciones y superficie de fallo sin beneficio para este caso.
- El contrato es deliberadamente simple: un archivo versionado o regenerado tras ejecutar el tracker; la Home lee mensaje, fecha ISO y enlace al commit.
Flujo end-to-end
- Tracker (Node): tras obtener el último commit de
main, construye un payload con título de mensaje,committedAt(ISO de GitLab),dateHuman(texto amigable conIntl.DateTimeFormaten és-AR), SHA, URL ytrackerRunAt`. - Escritura:
writeFilehaciasrc/content/last-activity.jsonen la raíz del monorepo (ruta resuelta desde__dirnamedel script). - Astro:
src/pages/index.astroimporta ese JSON y muestra una franja tipo badge: Última actividad, mensaje truncado si hace falta, y tiempo relativo (Intl.RelativeTimeFormat, és`) calculado en momento de build para que “hace X” siga teniendo sentido al publicar de nuevo.
Lecciones breves
- Separación: la API sigue siendo la fuente en runtime del script; el JSON es la foto que el blog consume.
- Humano vs máquina: guardamos ISO para lógica y una cadena
dateHumanpara lectura; el relativo en la UI evita depender solo de la última ejecución del tracker. - Sin DB: si el archivo no se ha generado aún, la Home muestra un mensaje de invitación a ejecutar el tracker.
Próximo paso lógico
Automatizar (CI o hook) la ejecución del tracker antes del build de producción, o documentar en SPEC-001 el orden “tracker → build → deploy” para que el latido no quede desfasado respecto a GitLab.