SafeByte es una aplicacion web orientada a seguridad alimentaria para usuarios con alergias o intolerancias.
Fecha de referencia de esta documentacion: 2026-03-09.
El proyecto nace para cubrir un flujo muy concreto:
- El usuario se registra/inicia sesion.
- Guarda sus alergenos personales.
- Consulta recetas y recomendaciones filtradas por seguridad.
- Usa un asistente IA (IANutri) para reformular peticiones, proponer menus seguros y guiar cocina paso a paso.
El foco no es solo "recomendar comida", sino reducir riesgo de ingesta insegura por contaminacion cruzada, ingredientes conflictivos o decisiones improvisadas.
- Se usa
net8.0con un unico backend que sirve vistas y APIs. - Motivo: unificar desarrollo full stack en un solo runtime C#, simplificar despliegue y minimizar complejidad de integracion.
- Impacto: menos piezas operativas; a cambio, frontend no esta desacoplado como SPA moderna.
- UI server-rendered con Razor (
Views/Home/*.cshtml) y logica cliente enwwwroot/src/ventanas/*.js. - Motivo: velocidad de implementacion para equipo academico, curva de aprendizaje baja y cero toolchain frontend obligatorio.
- Impacto: desarrollo rapido; a cambio, mas JS imperative y menos componentizacion.
- Persistencia principal en coleccion
usersy subcoleccionianutriHistory. - Motivo: base gestionada, esquema flexible y buen encaje para documentos JSON de historial IA.
- Impacto: operacion simple; a cambio, sin transacciones complejas relacionales ni joins nativos.
IANutriServiceconsume endpoint compatible chat-completions.- Motivo: coste/control para entorno de pruebas y compatibilidad con fallback de modelos.
- Impacto: flexibilidad multi proveedor; a cambio, se depende de disponibilidad externa para IANutri.
- Se incluye
Dockerfile,.dockerignoreyrender.yaml. - Motivo: despliegue reproducible y sencillo en proveedor gratuito para demos.
- Impacto: onboarding rapido de infraestructura; a cambio, limits de free tier (cold starts, recursos).
Implementado y operativo:
- Autenticacion basica por email/password (
/api/Auth/Register,/api/Auth/Login). - Persistencia de alergenos por usuario en Firestore (
/api/Allergens/User). - Home con:
- scanner de codigo de barras,
- historial local de escaneos,
- configuracion de usuario.
- Pagina de comidas con filtro por alergenos y favoritos por usuario.
- Modulo IANutri completo:
- reformulacion de peticion,
- generacion de sugerencias,
- asistente de cocina,
- historial remoto por usuario.
- Menu de usuario en navbar (esquina superior derecha) que usa
usernameyemailde sesion local. - Endurecimiento del scanner movil:
- lectura unica por intento,
- timeout,
- liberacion de camara al terminar/cambiar pestaña/salir,
- prevencion de loops de decodificacion.
- Presentacion:
Views/Home/*.cshtmlViews/Shared/_AppNavbar.cshtmlwwwroot/src/css/*.css
- Logica cliente:
wwwroot/src/ventanas/index.js(auth)wwwroot/src/ventanas/Home.js(home + alergenos + historial local)wwwroot/src/ventanas/comida.js(recetas + favoritos + filtro)wwwroot/src/ventanas/ianutri.js(flujo IA completo)wwwroot/src/ventanas/navbar.js(menu de usuario)
- API/control:
Controllers/AuthController.csControllers/AllergensController.csControllers/IANutriController.csControllers/HomeController.cs
- Dominio/servicios:
Services/AllergenCatalog.csServices/PasswordHasher.csServices/IANutriService.csServices/IANutriOptions.cs
- Datos:
- Firestore (
users/{email}) users/{email}/ianutriHistory/{historyId}
Program.cs concentra decisiones clave:
- Soporte de puerto dinamico por
PORT(cloud friendly). - Inicializacion Firestore por
FIREBASE_CREDENTIALSo ADC fallback. - CORS por
CORS_ALLOWED_ORIGINSen produccion. - Registro DI de
IIANutriServiceconHttpClient. - Seed opcional solo en desarrollo (
Firestore:SeedOnStartup).
- Documento de usuario identificado por email normalizado.
- Por que: evita indice adicional y simplifica lecturas directas.
- Coste: dependencia fuerte de email como identidad tecnica.
- Sesion cliente en
localStorage(sb_user).
- Por que: implementacion rapida sin infraestructura de auth server-side.
- Coste: no hay sesion robusta basada en token firmado.
- Catalogo cerrado de alergenos.
- Por que: consistencia de UX, validacion estricta y filtros previsibles.
- Coste: menor flexibilidad para alergenos no contemplados.
- Prompting estricto + saneo defensivo en IANutri.
- Por que: los modelos pueden romper formato o mezclar metadatos.
- Coste: mayor complejidad de codigo de parsing y fallback.
- Fallback de modelos y de contenido IA.
- Por que: resiliencia ante
unknown_model, salida vacia o JSON roto. - Coste: comportamiento menos determinista entre proveedores.
- Historial IA en subcoleccion por usuario.
- Por que: escalado natural por usuario y consultas sencillas por fecha.
- Coste: no hay analitica global sin pipelines adicionales.
- Scanner en Home con ZXing y limpieza explicita de recursos.
- Por que: evitar freeze por streams abiertos o decodificacion continua.
- Coste: logica de UI mas manual.
- Seguridad de credenciales:
- hashing actual con SHA-256 simple (
PasswordHasher) sin salt/cost adaptativo. - recomendado: migrar a Argon2id o PBKDF2 robusto con versionado de hash.
- Autenticacion/autorizacion:
- no hay JWT ni Firebase Auth ni cookies seguras de servidor.
- varios endpoints aceptan
emaildel cliente.
- Frontend:
- parte de UI depende de JS inline y archivos grandes (
Comidas.cshtml). - recomendado: modularizacion por componentes y separacion de datos.
- Observabilidad:
- sin trazas distribuidas ni metricas de negocio.
- recomendado: structured logging, correlation ids, health/readiness mas ricos.
dotnet restore
dotnet build
dotnet runURL local por launchSettings:
http://localhost:5188
FIRESTORE__PROJECTIDFIREBASE_CREDENTIALSGITHUB_MODELS_API_KEYoGITHUB_TOKENCORS_ALLOWED_ORIGINS(en produccion)
IANUTRI_API_KEYOPENAI_API_KEY(si cambiasIANutri:BaseUrla OpenAI)
- Crear servicio Docker en Render.
- Confirmar
Dockerfileen raiz. - Configurar variables requeridas.
- Health check path:
/. - Verificar flujos
Auth,AllergensyIANutritras deploy.
- Indice general:
docs/00-indice.md - Setup local y entorno:
docs/01-setup.md - Arquitectura y flujos de sistema:
docs/02-estructura-y-flujos.md - Dominio de alergenos y persistencia:
docs/03-alergenos-mvc-y-persistencia.md - Arquitectura IANutri E2E:
docs/04-ianutri-arquitectura-y-flujo-e2e.md - Pendientes y roadmap tecnico:
docs/05-pendientes-despliegue-cloud.md - Checklist operativo Render:
docs/06-render-checklist.md - Guia de despliegue cloud:
DEPLOY.md