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 |
IDs de producción
Sección titulada «IDs de producción»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í.
Bindings — acceso en código
Sección titulada «Bindings — acceso en código»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.
IMAGES binding
Sección titulada «IMAGES binding»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.
Cloudflare Access
Sección titulada «Cloudflare Access»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.