Especificación · S-PLAN
Infraestructura tecnológica
S-PLAN es una aplicación de cliente: el servidor solo entrega archivos estáticos y resuelve rutas limpias. Todo el trabajo con datos ocurre en el navegador contra Firebase. Entender eso explica casi todas sus virtudes y todos sus límites.
Arquitectura
Componentes
| Pieza | Detalle |
|---|---|
| Servidor de aplicación | Node.js con Express, escuchando en 127.0.0.1:3102. Sirve public/ como estático y define las rutas limpias. |
| Gestión de proceso | PM2, proceso s-plan. |
| Proxy y TLS | Nginx en planitone.co, con location ^~ /s-plan/ hacia el puerto 3102. |
| Base de datos | Firebase Realtime Database del proyecto sigunitropico, prefijo S-PLAN/. |
| Almacenamiento | Firebase Storage, bucket sigunitropico.appspot.com, prefijo PlanItOne/S-PLAN/evidencias/. |
| Autenticación | Firebase Auth con Google Sign-In, compartida con toda la suite PlanItOne. |
| Frontend | HTML y JavaScript sin framework ni build: Firebase SDK 9.x por módulos ES, plantilla Argon sobre Bootstrap 5, Chart.js, SheetJS (Excel) y SweetAlert2. |
Lo que implica no tener backend de datos
A favor
- Los cambios se ven en tiempo real, sin recargar ni desplegar.
- No hay una capa de API que mantener sincronizada con el modelo.
- Publicar una corrección es copiar un archivo estático.
En contra
- La seguridad real depende de las reglas de la base, no del código de la página.
- Ocultar un botón por rol es una comodidad visual, no un control de acceso.
- La lógica de cálculo vive en el navegador: dos pestañas con versiones distintas pueden escribir distinto.
Consecuencia práctica: el avance de una meta se recalcula y se persiste
cuando alguien abre esa meta. Por eso los índices agregados existen —para que los tableros no dependan de
que alguien haya visitado cada ficha—. Ver Cálculo del avance.
Despliegue y operación
- Publicar: editar los archivos de
public/. No hay compilación; el navegador toma la versión nueva al recargar. - Reiniciar: solo hace falta si se toca
server.js(rutas o configuración del servidor). - Salud:
/s-plan/healthrespondeok. - Respaldos: la carpeta
backups/del proyecto guarda copias fechadas de las páginas y de los subárboles de la base antes de intervenciones grandes. Es la convención esperada antes de cualquier migración de datos.
Dependencias externas
Todo lo de terceros se carga por CDN: Firebase SDK, Bootstrap y su plantilla, Chart.js, SheetJS, SweetAlert2 y Font Awesome. La aplicación no funciona sin conexión a internet, aunque el servidor esté disponible.
Riesgo conocido: las versiones de las librerías se fijan en cada archivo HTML
por separado. Conviven versiones distintas del SDK de Firebase entre páginas (9.1.2 y 9.22.2, por ejemplo). Al añadir
un módulo compartido, hay que reutilizar la instancia ya inicializada en vez de crear otra.
Relacionado: Autenticación · Permisos · Rutas de acceso.