Tecnofilm
Tecnofilm es una web pública desarrollada en Astro y desplegada en Cloudflare Workers, dentro de la cuenta Cloudflare del cliente. Este activo incluye panel administrativo, catálogo persistido en Cloudflare KV, medios en Cloudflare R2 y formularios públicos integrados con Resend y Turnstile.
Resumen del activo
Sección titulada «Resumen del activo»| Campo | Valor |
|---|---|
| Estado | Producción |
| FQDN | tecnofilm.pe |
| URL producción | https://tecnofilm.pe |
| URL desarrollo | https://tecnofilm-www.tecnofilm.workers.dev/ |
| Último despliegue | 16 de mayo de 2026, 05:06 a. m. |
| Repositorio | https://github.com/iz-soporte/tecnofilm-www.git |
| Stack | Astro / TypeScript / Cloudflare Workers |
| Versión de Astro | Última estable |
| Plataforma | Cloudflare Workers |
| Cuenta Cloudflare | Cliente |
| Publicación | Wrangler CLI |
| Salida del build | dist |
| Proyecto / Worker | tecnofilm-www |
| Modo Astro | output: server |
| Adapter | @astrojs/cloudflare |
| Catálogo | Cloudflare KV PRODUCTS_KV |
| Medios | Cloudflare R2 PRODUCTS_BUCKET |
| Bucket R2 | tecnofilm-media |
| Formularios | POST /api/forms |
| Antispam | Cloudflare Turnstile |
| Email transaccional | Resend |
| Criticidad | Media |
| Clasificación de datos | Público + datos enviados por formularios |
Alcance Interzone
Sección titulada «Alcance Interzone»Interzone mantiene el código y el despliegue técnico de la web.
La infraestructura Cloudflare pertenece al cliente, por lo que cambios en DNS, Workers, KV, R2, secretos o dominios deben coordinarse con los accesos del cliente.
El alcance operativo incluye:
- mantenimiento del código Astro;
- despliegue mediante Wrangler CLI;
- soporte del panel administrativo;
- validación de catálogo y medios;
- validación de formularios públicos;
- coordinación de secretos y recursos Cloudflare con el cliente.
Arquitectura
Sección titulada «Arquitectura»Visitante ↓tecnofilm.pe ↓Cloudflare Workers ↓Astro server output + static assets ├─ Catálogo desde PRODUCTS_KV ├─ Imágenes y archivos desde PRODUCTS_BUCKET / R2 ├─ Formularios públicos vía POST /api/forms └─ Panel admin protegido por sesiónComponentes principales
Sección titulada «Componentes principales»| Componente | Descripción |
|---|---|
| Sitio público | Páginas comerciales, catálogo, detalle de productos, contacto y trabaja con nosotros. |
| Panel admin | Administración privada de productos, categorías y medios. |
| Catálogo | Persistido en Cloudflare KV mediante el binding PRODUCTS_KV. |
| Medios | Imágenes y archivos almacenados en Cloudflare R2 mediante PRODUCTS_BUCKET. |
| Formularios | Endpoint único POST /api/forms para contacto, productos y CV. |
| Envío transaccional mediante Resend. | |
| Antispam | Validación mediante Cloudflare Turnstile. |
Rutas relevantes
Sección titulada «Rutas relevantes»| Ruta | Uso |
|---|---|
/ | Home |
/nosotros | Información institucional |
/productos | Catálogo de productos |
/productos/[slug] | Detalle de producto |
/contacto | Formulario de contacto |
/trabaja-con-nosotros | Formulario de envío de CV |
/admin | Login administrativo |
/admin/dashboard | Panel privado |
/admin/productos | Gestión de productos |
/admin/categorias | Gestión de categorías |
/admin/media | Subida y listado de medios en R2 |
/cdn/<carpeta>/<archivo> | Acceso público a archivos publicados desde R2 |
Datos y almacenamiento
Sección titulada «Datos y almacenamiento»| Dato | Ubicación |
|---|---|
| Catálogo de productos | Cloudflare KV PRODUCTS_KV |
| Respaldo local de catálogo | src/content/products.json |
| Imágenes de productos | Cloudflare R2 PRODUCTS_BUCKET |
| Archivos CV | R2, carpeta cv/ |
| URLs públicas de medios | /cdn/<carpeta>/<archivo> |
| Sesión admin | Cookie firmada con ADMIN_SESSION_SECRET |
Formularios
Sección titulada «Formularios»Los formularios públicos usan un único endpoint:
POST /api/formsEl campo oculto type define el destino lógico:
| Type | Uso | Destino |
|---|---|---|
contact | Contacto general | CONTACT_TO_EMAIL |
product | Consulta o solicitud de producto | ORDER_TO_EMAIL |
cv | Trabaja con nosotros | CV_TO_EMAIL |
El CV no se adjunta al email. Se guarda en R2 dentro de cv/ y el correo enviado a RRHH incluye el enlace público generado.
Configuración Cloudflare
Sección titulada «Configuración Cloudflare»astro.config.mjs
Sección titulada «astro.config.mjs»| Configuración | Valor |
|---|---|
site | https://tecnofilm.pe |
output | server |
| Adapter | @astrojs/cloudflare |
| Session KV | PRODUCTS_KV |
| Image service | passthrough |
wrangler.jsonc
Sección titulada «wrangler.jsonc»| Configuración | Valor |
|---|---|
| Worker | tecnofilm-www |
| Main | @astrojs/cloudflare/entrypoints/server |
| Assets binding | ASSETS |
| Assets directory | ./dist |
| KV binding | PRODUCTS_KV |
| R2 binding | PRODUCTS_BUCKET |
| Bucket | tecnofilm-media |
| Observability | Habilitada |
Secretos y variables
Sección titulada «Secretos y variables»Secretos administrativos
Sección titulada «Secretos administrativos»npx wrangler secret put ADMIN_USERnpx wrangler secret put ADMIN_PASSWORDnpx wrangler secret put ADMIN_SESSION_SECRETSecretos de formularios
Sección titulada «Secretos de formularios»npx wrangler secret put RESEND_API_KEYnpx wrangler secret put EMAIL_FROMnpx wrangler secret put CONTACT_TO_EMAILnpx wrangler secret put ORDER_TO_EMAILnpx wrangler secret put CV_TO_EMAILnpx wrangler secret put TURNSTILE_SECRET_KEYnpx wrangler secret put PUBLIC_SITE_URLVariable pública Turnstile
Sección titulada «Variable pública Turnstile»PUBLIC_TURNSTILE_SITE_KEYNo se deben versionar .dev.vars, contraseñas, API keys ni secretos de Cloudflare.
Desarrollo local
Sección titulada «Desarrollo local»Astro local
Sección titulada «Astro local»npm installnpm run devAbrir:
http://localhost:4321/adminWorker local con bindings
Sección titulada «Worker local con bindings»npx wrangler devAbrir:
http://localhost:8787/adminUsar Wrangler cuando se necesite probar comportamiento cercano al runtime real de Cloudflare Workers, especialmente KV y R2.
Despliegue
Sección titulada «Despliegue»El despliegue se realiza con:
npm run deployEse comando ejecuta:
astro build && wrangler deployFlujo operativo
Sección titulada «Flujo operativo»| Paso | Acción |
|---|---|
| 1 | Validar cambios en local. |
| 2 | Ejecutar build. |
| 3 | Publicar con Wrangler en la cuenta Cloudflare del cliente. |
| 4 | Validar home, productos y detalle de producto. |
| 5 | Validar login de admin. |
| 6 | Validar carga de imágenes en R2 si aplica. |
| 7 | Validar publicación de catálogo en KV. |
| 8 | Validar formularios públicos. |
Seguridad y operación
Sección titulada «Seguridad y operación»| Control | Revisión |
|---|---|
| Admin | Credenciales configuradas como secretos de Cloudflare. |
| Sesión | Cookie firmada con ADMIN_SESSION_SECRET. |
| Catálogo | KV protegido por acceso del Worker. |
| R2 | Subida de archivos solo desde admin autenticado. |
| Formularios | Turnstile configurado cuando aplique. |
| Resend API Key como secreto. | |
| Archivos locales | .dev.vars no debe subirse al repositorio. |
| Cliente | Cloudflare, DNS, KV, R2 y secretos dependen de la cuenta del cliente. |
Checklist post-despliegue
Sección titulada «Checklist post-despliegue»| Validación | Estado esperado |
|---|---|
| Home carga correctamente | OK |
/productos carga catálogo | OK |
| Detalle de producto carga por slug | OK |
/admin permite login | OK |
| Productos se pueden editar | OK |
| Cambios se publican en KV | OK |
| Imágenes se suben y listan desde R2 | OK |
/cdn/<key> sirve archivos | OK |
| Formulario de contacto envía correo | OK |
| Formulario de producto envía correo | OK |
| CV se guarda en R2 y se envía enlace | OK |
| Turnstile valida correctamente si está activo | OK |
| No hay errores visibles en consola | OK |
Pendientes
Sección titulada «Pendientes»| Pendiente | Prioridad |
|---|---|
| Confirmar repositorio oficial del proyecto | Alta |
| Confirmar responsables del acceso Cloudflare del cliente | Alta |
| Confirmar si Turnstile está activo en producción | Media |
| Confirmar política de respaldo/exportación de KV | Media |
| Confirmar política de retención de archivos en R2 | Media |
| Confirmar monitoreo y alertas en Cloudflare | Media |
| Confirmar límites/tamaño máximo de archivos CV | Media |