Ir al contenido

Stack y bindings

Capa Tecnología
Frontend Astro 7, SSR (output: "server"), @astrojs/cloudflare 14.x
CMS EmDash v0.23.0 (emdash, @emdash-cms/cloudflare)
Base de datos D1 — binding lemma-db
Storage R2 — tps-media (public: media.tuperiodico.soy), tps-audio
Sesiones KV — SESSION
Caché de páginas KV — TPS_CACHE
Estilos Tailwind CSS v4 (plugin Vite)
Deploy CI automático GitHub → Cloudflare Workers

Los IDs de recursos (D1, KV, cuenta, audience de Access) están en wrangler.toml y en el dashboard de Cloudflare — no se replican aquí.

Astro.locals.runtime.env fue eliminado en Astro v6. Siempre usar:

import { env } from "cloudflare:workers"; // módulos normales
// o en middleware (import dinámico):
const { env: cfEnv } = await import('cloudflare:workers');

El middleware siempre debe tener un try/catch global — un error sin capturar tumba el sitio entero.

El adapter @astrojs/cloudflare 14.x auto-añade "images":{"binding":"IMAGES"} al wrangler.json generado en cada build. Puede facturar Image Transformations aunque estén desactivadas a nivel de zona. Pendiente investigar cómo desactivarlo sin perder funcionalidad.

El admin de EmDash (/_emdash/) está protegido con Cloudflare Access Zero Trust. El JWT se valida en @emdash-cms/cloudflare con el audience tag de arriba.