Episodio 005 — Primeras líneas de lógica (Astro → Node)
Serie: bitácora de ingeniería — caprini.dev
Slug: 005-primeras-lineas-de-logica
Resumen: el blog sigue siendo Astro en la raíz, pero SPEC-001 no tiene por vivir dentro de src/: el progress tracker arranca como proyecto hermano en projects/001-progress-tracker/, con Node.js, dotenv y el SDK oficial @gitbeaker/rest para hablar con GitLab sin mezclar dependencias con el build estático.
El salto de mentalidad
Astro resuelve contenido, rutas y estética Synthcode / Neo-Dev (ver BRANDING.md). La herramienta de flujo resuelve integración: leer el último commit de caprini-blog en la rama main y, más adelante, formatear un bloque copiable para X. Separar carpetas evita ensuciar el Content Layer y deja claro qué es “sitio público” y qué es “CLI / scripts”.
Reto: API de GitLab y secretos
- Token (
GITLAB_TOKEN) — PAT de GitLab con alcanceread_api(mínimo para listar commits vía API). No lo pegues en issues ni en commits; rota si se filtra. - Proyecto (
PROJECT_ID) — GitLab acepta ID numérico o path con namespace (caprini/caprini-blog). El ID fiable está en Settings → General → Project ID. La URL del proyecto muestra el path; el número no siempre es obvio en la barra de direcciones, por eso conviene mirar Ajustes. .env— Copia desde.env.example, rellena valores reales y mantén.envfuera de Git (ignorado en la raíz del repo). El script carga primero../../.env(raíz del monorepo) y luego.envlocal en la carpeta del tracker, para que puedas centralizar secretos o aislarlos por herramienta.
Qué quedó hecho en esta fase
- Carpeta
projects/001-progress-tracker/conpackage.json,tracker.mjsy dependencias dotenv + @gitbeaker/rest. - Comando: desde esa carpeta, ñpm start
imprime el **mensaje completo** del último commit de la rama configurada (main` por defecto). - Plantilla
.env.exampledocumentada; errores 401/404 con mensajes orientativos en stderr y código de salida ≠ 0.
Próximo paso lógico
Cerrar el MVP de SPEC-001: fecha legible, enlace al repo y bloque visual copiable; tests del formateador con mocks de respuesta API (sin red en CI).