Infraestructura y costes
La segunda capa de medición es un puesto de vigilancia del coste y la salud de la infraestructura que hace funcionar el Campus. Una sola pantalla, que se mira una vez por semana, para responder: ¿cuánto nos cuesta el Campus por alumno, y esa cifra está subiendo?
Para quién es esta página
Esta capa es solo de administración. No se refleja al gestor (a diferencia de Rescate o Satisfacción): son cifras agregadas de coste e infraestructura, no de alumnos concretos.
Dónde se ve: en Panel Admin → Analítica, pestaña "Infraestructura y costes".
Qué muestra la pantalla
De arriba abajo:
- Titular: coste por alumno de la última semana, con su variación respecto a la semana anterior (subió/bajó un %).
- Avisos (chips de color) si algo se dispara — ver más abajo.
- Una línea de tendencia de las últimas ~12 semanas.
- Una tabla de desglose por fuente: cuánto se usó, cuánto cuesta en euros y cuánto es por alumno.
- Unos campos para pegar a mano los datos que no podemos leer solos (ver ingesta).
Es una estimación, no la factura
El euro que ves es una estimación hecha con precios de lista, no la contabilidad real. Sirve para ver tendencias ("esto se está encareciendo"), no para cuadrar con el banco.
De dónde salen los números
Los datos llegan de forma híbrida: unos se recogen solos, otros los pega el admin.
Un trabajo programado semanal (los lunes) toma una foto de la semana recién cerrada y la guarda. Lo que puede leer solo:
| Se recoge solo | De dónde |
|---|---|
| Alumnos activos de la semana | De la medición por alumno (cuántos entraron). Es el denominador del coste por alumno. |
| Emails enviados / fallidos | De la propia base de datos del Campus. |
| Almacenamiento de audios | De Cloudflare (donde viven los audios). |
| Tamaño de la base de datos e intentos de login fallidos | De Supabase. |
Y lo que el admin pega a mano cada semana, en los campos de la propia pantalla (porque esos proveedores no dan una API cómoda):
- Ancho de banda de vídeo (VdoCipher).
- Visitas y velocidad de carga (Vercel Analytics).
- Rebotes de email (los que rebotan llegan más tarde, no en el momento del envío).
Lo automático y lo manual no se pisan
La foto del lunes rellena solo lo que sabe leer; deja en blanco el resto. Cuando el admin pega los datos manuales el miércoles, se añaden a esa misma semana sin borrar lo automático — y volver a correr la foto tampoco borra lo que se pegó a mano. Cada fuente escribe lo suyo.
Cómo funciona por dentro (equipo técnico)
Una fila por semana en analytics_infra_snapshots (clave = lunes de la semana; todas las métricas admiten estar vacías). El trabajo es GET /api/cron/infra-snapshot (lunes 05:00, protegido por secreto), con upsert parcial que nunca pisa columnas de otra fuente. Las fuentes automáticas: alumnos activos y emails desde la propia BD; almacenamiento R2 vía la GraphQL Analytics API de Cloudflare (src/lib/analytics/r2-storage.ts); tamaño de BD + logins fallidos vía la Management API de Supabase (supabase-mgmt.ts). Los campos manuales entran por una server action de admin. Cada fuente frágil que falle una semana deja su columna vacía sin romper la foto. Requiere dos tokens en Vercel (CLOUDFLARE_ANALYTICS_API_TOKEN, SUPABASE_MANAGEMENT_API_TOKEN).
Cómo se calcula el coste
Un detalle clave: el coste no se guarda, se calcula al mirar. La foto guarda solo el uso (cuántos GB, cuántos emails…); el euro sale de multiplicar ese uso por una tabla de precios en el momento de abrir la pantalla.
Por qué importa
Si mañana ajustamos un precio en la tabla, todo el histórico se recalcula con el precio nuevo — sin reescribir un solo dato. Los euros de hace tres semanas se muestran con la tarifa corregida automáticamente.
La tabla de precios (v1, estimación con precios de lista, en euros):
| Fuente | Se cobra por | Precio estimado |
|---|---|---|
| Almacenamiento de audios (R2) | GB guardados al mes | ~0,014 €/GB-mes |
| Ancho de banda de vídeo (VdoCipher) | GB servidos en la semana | ~0,092 €/GB |
| Emails enviados | por cada 1.000 emails | ~0,35 €/1.000 |
| Base de datos (Supabase) | plan plano mensual | ~23 €/mes |
| Cómputo (Vercel) | plan plano mensual | ~18,40 €/mes |
- Las tres primeras son por uso: cuanto más se consume, más cuestan (las mensuales se prorratean a la semana).
- Las dos últimas son planas: el plan cuesta lo mismo use lo que use, así que nunca salen "pendientes".
- Una fuente por uso que aún no reportó esa semana aparece como "Pendiente", no como 0 €.
Coste por alumno = suma de todas las partidas de la semana ÷ alumnos activos. Si no hay alumnos activos, el titular queda en blanco (no divide por cero).
Los avisos de tendencia
Los chips de color de la pantalla se encienden cuando algo merece una mirada. Son tres:
- Coste por alumno disparado — subió un 20 % o más respecto a la semana anterior.
- Rebote de email alto — la tasa de rebotes llega al 3 % de lo enviado.
- Coste unitario subiendo — alguna partida por uso creció más rápido que los alumnos (señal de que el coste por alumno de esa línea está empeorando).
Sin correos, de momento
Los avisos viven en la propia pantalla, no se envían por email. Y los umbrales (20 %, 3 %) son ajustables.
Pestañas que aún no están
La pantalla deja hueco para dos pestañas más — Tráfico y Velocidad y errores — que todavía no están activas: dependen de datos manuales que hoy no siempre se pegan, así que saldrían vacías. Se activarán cuando esas fuentes sean fiables.
Resumen: dónde se ve cada cosa
| Quiero ver… | Dónde |
|---|---|
| Cuánto cuesta el Campus por alumno y su tendencia | Admin → Analítica → Infraestructura y costes |
| Pegar los datos manuales de la semana (vídeo, visitas, rebotes) | Los campos al pie de esa misma pantalla |
| Cuántos alumnos entraron (denominador del coste) | Sale de la medición por alumno |