
NutrAI - Plataforma de Nutricion Inteligente
Resumen Ejecutivo
NutrAI es una plataforma de salud y nutricion que utiliza Inteligencia Artificial para generar planes de alimentacion personalizados, realizar seguimiento biometrico y ofrecer asesoria nutricional en tiempo real mediante un chat conversacional. El proyecto abarca desde la logica de dominio hasta el despliegue automatizado zero-downtime en un cluster Kubernetes sobre AWS, implementando un pipeline hibrido de CI/CD con GitLab CI + Jenkins + SonarQube.
Situacion
Las aplicaciones de nutricion existentes en el mercado ofrecen planes genericos que no se adaptan al perfil metabolico del usuario, o dependen de un unico proveedor de IA sin tolerancia a fallos. Ademas, la mayoria de proyectos academicos de desarrollo web carecen de un ciclo DevOps real: sin infraestructura como codigo, sin quality gates, sin despliegue orquestado. El reto era construir un producto funcional que demostrara competencia tanto en desarrollo de software como en ingenieria de infraestructura cloud.
Objetivo
Disenar e implementar una plataforma de nutricion inteligente con arquitectura limpia que integrara multiples proveedores de IA con fallback automatico, desplegada sobre infraestructura AWS completamente aprovisionada con Terraform y orquestada en Kubernetes, protegida por un pipeline de CI/CD hibrido que garantizara calidad de codigo y seguridad antes de cada despliegue a produccion.
Arquitectura y Desarrollo
Backend - Arquitectura Hexagonal (Node.js / Express)
El servidor sigue una Arquitectura Hexagonal estricta con separacion de capas:
| Capa | Contenido |
|---|---|
| Domain | 4 entidades puras (User, Meal, Recipe, NutritionPlan) con logica de negocio embebida: calculo de IMC, BMR via Harris-Benedict, TDEE, macronutrientes |
| Application | 19 casos de uso organizados en 5 modulos: auth (register, login, forgot/reset password), user (profile CRUD, admin roles, bloqueo), meal (CRUD de comidas), recipe (CRUD de recetas), nutrition (generacion de planes IA, chat conversacional) |
| Infrastructure | Adaptadores de DB (MongoDB/Mongoose), 3 adaptadores de IA polimorficos (OpenAI, Gemini, Ollama), controladores HTTP (Express), middlewares de seguridad (JWT, Helmet, rate limiting, sanitizacion NoSQL, validacion Joi) |
| Container | Inyeccion de dependencias manual que ensambla repositorios, adaptadores y casos de uso |
Sistema de IA Multi-Proveedor
El componente diferenciador del proyecto es la capa de IA con polimorfismo de adaptadores:
- OpenAI (GPT) - Proveedor por defecto para maxima precision
- Google Gemini (gemini-1.5-flash) - Alternativa de alta velocidad
- Ollama (gemma3, llama3.1, qwen2.5) - Soporte local y cloud para privacidad total
Cada adaptador implementa la misma interfaz y se inyecta en los casos de uso via el contenedor de DI. Si el proveedor cloud falla, el sistema conmuta automaticamente a un motor de nutricion local basado en formulas cientificas (Harris-Benedict), garantizando 100% de disponibilidad.
API REST - 18 Endpoints Protegidos
| Grupo | Endpoints | Seguridad |
|---|---|---|
| Auth | register, login, forgot-password, reset-password | Rate limiting estricto, validacion Joi |
| User | get/update profile | JWT obligatorio |
| Admin | listar usuarios, cambiar rol, bloquear usuario | JWT + middleware requireAdmin |
| Meals | CRUD completo (add, list, update, delete) | JWT obligatorio |
| Recipes | CRUD (add, list, delete) | JWT obligatorio |
| Plans | get plan, generate plan (via IA) | JWT obligatorio |
| AI Chat | chat conversacional con contexto nutricional | JWT + rate limiting especifico para IA |
| Health | health check | Publico |
Frontend - SPA (React 19 + Vite + Tailwind CSS)
La interfaz es una Single Page Application con 15 vistas funcionales:
- Landing Page publica con presentacion del producto
- Dashboard con resumen de macros, hidratacion y perfil medico
- Registro de comidas con CRUD interactivo
- Plan nutricional generado por IA con renderizado Markdown (react-markdown + remark-gfm)
- Chat con IA - asistente conversacional nutricional contextualizado con el perfil del usuario
- Estadisticas con graficas Recharts de seguimiento
- Recetas personalizadas con gestion completa
- Panel de administracion con control de usuarios, roles y bloqueo
- Perfil y configuracion con datos biometricos
- Flujo de recuperacion de contrasena con Nodemailer (Gmail/Outlook/SMTP)
Rutas protegidas con wrappers ProtectedRoute y AdminRoute basados en el contexto de autenticacion.
Infraestructura Cloud (AWS + Terraform)
Toda la infraestructura esta aprovisionada como codigo con Terraform (5 modulos independientes) en la region us-east-1:
| Modulo Terraform | Servicio AWS | Proposito |
|---|---|---|
| vpc | VPC, Subnets, NAT, Security Groups | Red privada con CIDR 10.0.0.0/16, 2 AZs, subredes publicas/privadas |
| ecr | Elastic Container Registry | 2 repositorios Docker (backend-prod, frontend-prod) con escaneo automatico |
| eks | Elastic Kubernetes Service | Cluster K8s v1.30 multi-AZ con node groups gestionados |
| ec2-sonar | EC2 | Instancia dedicada para SonarQube |
| iam | IAM Roles | Roles de cluster, nodos y service accounts |
Orquestacion Kubernetes
Los manifiestos K8s despliegan la aplicacion con:
- Deployments separados para backend (Express) y frontend (Nginx Alpine)
- HPA (Horizontal Pod Autoscaler) para escalado automatico
- ALB Ingress Controller con enrutamiento basado en rutas (
/api/*hacia backend,/*hacia frontend) - Secrets gestionados desde Terraform (MongoDB URI, JWT Secret, API Keys)
- Dockerfiles multi-stage optimizados para produccion
Pipeline CI/CD Hibrido
El ciclo de vida de cada cambio esta protegido por un flujo de dos etapas:
GitLab CI (Integracion Continua - Validacion)
| Stage | Jobs |
|---|---|
| validate | Linting backend (ESLint), linting frontend, validacion de Dockerfiles (Hadolint), validacion de Terraform |
| test | Tests unitarios backend (Jest), tests unitarios frontend (Vitest) con reportes JUnit y cobertura |
| security | Auditoria de dependencias (npm audit), escaneo de secretos (TruffleHog) |
| trigger | Disparo automatico del pipeline Jenkins en ramas main/develop |
Jenkins (Entrega Continua - Despliegue)
| Stage | Accion |
|---|---|
| Install | npm ci en paralelo (backend + frontend) |
| Unit Tests | Jest + Vitest con cobertura LCOV en paralelo |
| Integration Tests | Supertest con MongoDB en memoria |
| SonarQube | Analisis estatico en paralelo (backend + frontend) con quality gate estricto (min 80% cobertura) |
| Quality Gate | waitForQualityGate abortPipeline: true - bloquea despliegue si no pasa |
| Build & Push ECR | Docker build multi-stage + push a ECR (solo rama main) |
| Deploy to EKS | Rolling update zero-downtime con auto-rollback en caso de fallo |
Estrategia de Testing
| Nivel | Herramienta | Alcance |
|---|---|---|
| Unitarios backend | Jest | Logica de negocio, entidades, casos de uso |
| Integracion backend | Supertest + mongodb-memory-server | Flujos completos de API con base de datos en memoria |
| Unitarios frontend | Vitest + Testing Library | Componentes React y logica de UI |
| E2E | Playwright | Flujos de autenticacion y nutricion completos |
| Calidad estatica | SonarQube | Deuda tecnica, code smells, vulnerabilidades |
| Seguridad | TruffleHog + Hadolint + npm audit | Secretos expuestos, Dockerfiles, dependencias |
Stack Tecnologico
| Capa | Tecnologias |
|---|---|
| Backend | Node.js 20, Express, Mongoose, JWT, Bcrypt, Helmet, Joi, Nodemailer |
| Frontend | React 19, Vite, Tailwind CSS, React Router 7, Recharts, Lucide, react-markdown |
| Base de datos | MongoDB (Atlas en produccion) |
| IA | OpenAI API, Google Gemini API, Ollama (cloud + local) |
| Infraestructura | AWS (VPC, EKS, ECR, EC2, ALB, NAT), Terraform 1.8+, Helm |
| CI/CD | GitLab CI, Jenkins (Groovy), SonarQube |
| Contenedores | Docker (multi-stage), Kubernetes, Nginx |
| Testing | Jest, Vitest, Supertest, Playwright, Testing Library |
Resultados
- Plataforma funcional con 15 vistas, 18 endpoints y 3 proveedores de IA intercambiables
- Arquitectura Hexagonal con 19 casos de uso y contenedor de inyeccion de dependencias manual
- Fallback inteligente de IA: si el proveedor cloud falla, conmuta a motor local Harris-Benedict sin interrupcion
- Infraestructura como codigo con 5 modulos Terraform que aprovisionan VPC, EKS, ECR, EC2 y IAM
- Pipeline hibrido CI/CD con 7 stages en Jenkins y 4 stages en GitLab CI, incluyendo quality gate SonarQube
- Despliegue zero-downtime en Kubernetes con auto-rollback automatico en caso de fallo
- Costo estimado de produccion: ~$300/mes (optimizable con instancias Spot)
- Seguridad en capas: JWT + Helmet + rate limiting + sanitizacion NoSQL + validacion Joi + TruffleHog + Hadolint
Classified Evidence