menuescolar.es - Gestor de Menús Escolares (2025)
Plataforma SaaS multi-tenant para gestionar calendarios de menús escolares con IA y mostrarlos en una webapp personalizada para cada escuela.

menuescolar.es - Gestor de Menús Escolares (2025)
Una plataforma SaaS para transformar PDFs de menús escolares en calendarios digitales accesibles
El Proyecto
menuescolar.es es una aplicación web que resuelve un problema real: muchas escuelas publican los menús mensuales en formato PDF, lo que dificulta la consulta rápida por parte de las familias.
La solución: una plataforma donde cada escuela puede tener su propia página pública con el menú del día siempre visible y actualizado.
El proceso es sencillo: la escuela sube un PDF del menú mensual, la Inteligencia Artificial (Google Gemini) extrae automáticamente las comidas de cada día, y en segundos queda publicado en formato web accesible desde cualquier dispositivo.
Cómo Funciona
Para las Escuelas (Gestores)
- Registro → Creación de cuenta y organización con URL única (ejemplo:
menuescolar.es/escola-abellerol) - Configuración → Personalización con logo, descripción y preferencias de idioma
- Subida de PDF → Upload del calendario mensual en formato PDF
- Procesamiento IA → Google Gemini analiza el documento y extrae las comidas estructuradas
- Publicación → Los menús quedan disponibles automáticamente en la URL pública
- Compartir → Envío del enlace a familias y personal del centro
Para las Familias (Visitantes)
- Acceso directo → Visita la URL de la escuela (sin necesidad de registro)
- Visualización → Consulta el menú de hoy o navega por el calendario mensual
- Multi-dispositivo → Funciona perfectamente en móvil, tablet y ordenador
- Multi-idioma → Disponible en catalán, castellano, inglés, vasco y gallego
Arquitectura Técnica
Sistema Multi-Tenant
Cada escuela tiene sus datos completamente aislados:
- Una base de datos con relaciones estrictas organización → comidas
- Un solo usuario-propietario por organización (modelo 1:1)
- URLs únicas generadas automáticamente (slugs)
- Logos y configuraciones personalizadas para cada centro
Seguridad y Rendimiento
Autenticación y Autorización:
- JWT tokens gestionados por PocketBase
- Validación de propiedad en cada operación de modificación
- API keys de IA mantenidas en servidor (nunca expuestas al cliente)
- Headers de seguridad con Helmet (CSP, X-Frame-Options, etc.)
Protección de Abuso:
- Rate limiting: 10 peticiones generales cada 15 minutos
- Rate limiting PDFs: máximo 5 subidas por hora
- CORS configurado con origins permitidos
- Validación de formatos y tamaño de ficheros
Optimizaciones:
- Build multi-stage con Docker (imagen ligera)
- Cache de estáticos con hash de Vite (1 año)
- Compilación TypeScript para detección de errores en tiempo de desarrollo
- Lazy loading de componentes React
Procesamiento de IA
El cerebro del sistema es Google Gemini:
- El PDF se convierte a Base64 para transporte seguro
- Se envía a Gemini con un prompt específico para extraer menús
- La IA retorna datos estructurados (fecha + comida)
- Se validan y guardan en la base de datos
- Quedan disponibles inmediatamente en la web pública
Retos Superados
🤖 Precisión de la Extracción
Los PDFs de menús escolares vienen en formatos muy variados (tablas, texto libre, imágenes). Gemini ha demostrado ser lo suficientemente flexible para adaptarse a diferentes layouts y extraer correctamente los datos.
🏢 Aislamiento Multi-Tenant
Asegurar que cada escuela solo vea y modifique sus propios datos requirió:
- Relaciones foráneas estrictas en PocketBase
- Middleware de validación de propiedad en cada endpoint
- Tests exhaustivos de acceso no autorizado
📧 Sistema de Correos
Integración con Resend para enviar:
- Emails de bienvenida
- Verificación de cuentas
- Notificaciones de nuevos menús (futuro)
🌍 Internacionalización
Soporte para 5 idiomas con archivo de traducciones de 94KB que cubre:
- Interfaz completa (botones, mensajes, errores)
- Formatos de fecha adaptados a cada lengua
- Configuración por usuario y por organización
🐳 Despliegue Docker
Dockerfile multi-stage que:
- Stage 1: Compila el frontend React con Vite
- Stage 2: Copia el build y prepara el backend Node.js
- Resultado: Una sola imagen que sirve frontend estático + API
Compatible con Dokploy para despliegues automáticos desde GitHub.
Stack Tecnológico
Frontend
- React 18 con TypeScript
- Vite (build tool ultrarrápido)
- React Router 7 (enrutamiento client-side)
- Tailwind CSS (styling utility-first)
- PocketBase SDK (cliente de autenticación)
- pdfjs-dist (previsualización de PDFs)
Backend
- Node.js 22 & Express
- PocketBase (base de datos SQLite + auth)
- Google Gemini API (extracción IA)
- Resend (servicio de emails transaccionales)
- Multer (gestión de subidas de ficheros)
- Helmet (cabeceras de seguridad)
- Rate Limit (protección anti-abuso)
Infraestructura
- Docker (contenedorización)
- Dokploy (despliegue automático)
- GitHub (control de versiones)
- PocketBase (hosting separado para auth y datos)
Características Principales
Para Gestores de Escuela
- ✅ Registro y creación de organización con URL única
- ✅ Subida de PDFs de menús mensuales
- ✅ Extracción automática de menús con IA
- ✅ Personalización con logo y descripción
- ✅ Configuración de idioma por defecto
- ✅ Validación de email obligatoria
- ✅ Gestión completa de menús (edición, eliminación)
- ✅ Dashboard privado con estadísticas
Para Familias
- ✅ Acceso público sin registro
- ✅ Vista del menú de hoy destacado
- ✅ Calendario mensual navegable
- ✅ Diseño responsive (móvil, tablet, desktop)
- ✅ Cambio de idioma (5 lenguas disponibles)
- ✅ Carga rápida y optimizada
- ✅ URLs amigables para compartir
Funcionalidades del Sistema
- ✅ Multi-tenant con aislamiento de datos
- ✅ Una organización por usuario
- ✅ Slugs únicos autogenerados
- ✅ Sistema de templates (modern/classic/colorful)
- ✅ Detección de menús duplicados (fecha + organización)
- ✅ Validación de formatos PDF
- ✅ Gestión de errores con mensajes claros
- ✅ Logs de servidor para debugging
- ✅ Health check endpoint para monitoring
Roadmap y Mejoras Futuras
Funcionalidades Planificadas
- 🔄 Múltiples menús por organización: Menú basal, celíaco, vegetariano, etc.
- 🔄 Colaboradores: Permitir múltiples usuarios por escuela
- 🔄 Notificaciones email: Alertas automáticas de nuevos menús
- 🔄 Dominios personalizados: menudescuela.escolapios.cat
- 🔄 API pública: Integración con otros sistemas escolares
- 🔄 App móvil: Versiones nativas para iOS y Android
- 🔄 Exportación: Descargar menús en diferentes formatos
- 🔄 Analytics: Estadísticas de uso y visualizaciones
Mejoras Técnicas
- 🔄 Tests automatizados: Cobertura con Jest y React Testing Library
- 🔄 CI/CD pipeline: GitHub Actions para tests y despliegue
- 🔄 Monitoring: Integración con Sentry para tracking de errores
- 🔄 Performance: Lighthouse score 90+ en todas las categorías
- 🔄 SEO: Meta tags dinámicos para cada organización
- 🔄 PWA: Capacidades offline con Service Workers
Documentación Técnica
El proyecto incluye documentación exhaustiva:
- README.md - Guía de inicio rápido y configuración local
- DEPLOYMENT.md - Despliegue a producción con Dokploy
- MULTI_TENANT_SETUP.md - Configuración del esquema multi-tenant
- POCKETBASE_SETUP.md - Instalación e inicialización de PocketBase
- PDF_UPLOAD_IMPLEMENTATION.md - Detalles del procesamiento de PDFs
- TESTING_CHECKLIST.md - Escenarios de testing y casos límite
Estado del Proyecto
Estado actual: ✅ 95% completo y listo para testing
Implementado
- ✅ Arquitectura multi-tenant funcional
- ✅ Sistema de autenticación y autorización
- ✅ CRUD completo de organizaciones
- ✅ Subida y procesamiento de PDFs con IA
- ✅ Interfaz pública para organizaciones
- ✅ Internacionalización 5 idiomas
- ✅ Despliegue Docker automatizado
- ✅ Sistema de emails transaccionales
- ✅ Rate limiting y seguridad
- ✅ Documentación completa
En Pulido
- 🔧 Branding de cabeceras
- 🔧 Refinamiento de rutas entre componentes
- 🔧 Optimización de rendimiento
Prueba la plataforma: https://menuescolar.es
GitHub: Código privado (disponible bajo petición)
Fecha de lanzamiento: Noviembre 2025
Desarrollado por Albert Sarlé
Tecnologías
Logros
- Extracción de menús con IA desde PDFs
- Arquitectura multi-tenant con aislamiento de datos
- Soporte 5 idiomas (CA, ES, EN, EU, GL)
- Sistema de autenticación JWT seguro
- Despliegue automatizado con Docker