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)

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)

  1. Registro → Creación de cuenta y organización con URL única (ejemplo: menuescolar.es/escola-abellerol)
  2. Configuración → Personalización con logo, descripción y preferencias de idioma
  3. Subida de PDF → Upload del calendario mensual en formato PDF
  4. Procesamiento IA → Google Gemini analiza el documento y extrae las comidas estructuradas
  5. Publicación → Los menús quedan disponibles automáticamente en la URL pública
  6. Compartir → Envío del enlace a familias y personal del centro

Para las Familias (Visitantes)

  1. Acceso directo → Visita la URL de la escuela (sin necesidad de registro)
  2. Visualización → Consulta el menú de hoy o navega por el calendario mensual
  3. Multi-dispositivo → Funciona perfectamente en móvil, tablet y ordenador
  4. 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:

  1. El PDF se convierte a Base64 para transporte seguro
  2. Se envía a Gemini con un prompt específico para extraer menús
  3. La IA retorna datos estructurados (fecha + comida)
  4. Se validan y guardan en la base de datos
  5. 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:

  1. Stage 1: Compila el frontend React con Vite
  2. Stage 2: Copia el build y prepara el backend Node.js
  3. 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

React 18 & TypeScriptNode.js & ExpressPocketBase (Auth & Database)Google Gemini AITailwind CSSViteDockerResend (Email)Multi-tenant ArchitectureInternationalization (i18n)

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