Portafolio

Producto personal · nutri.

nutri. — operar una aplicación en producción con un entorno de desarrollo agéntico

Una PWA personal de registro nutricional que diseño, construyo y opero en producción: extracción estructurada con IA, recuperación con citas, un servidor MCP autenticado y registro sin conexión.

PWA en producción · Entorno agéntico · Supabase · Funciones de IA

nutri. es una PWA de registro nutricional de uso diario: React, Supabase, sin equipo de backend ni otra persona que mantenga el código. Esa es la superficie. Lo que merece explicarse es cómo trabajamos un agente de IA y yo sobre el código, y qué controles permiten hacerlo sin un segundo revisor que detecte una integración defectuosa.

Las funciones de IA y su evidencia

Hay cuatro funciones de IA activas en producción. Cada una enlaza a un caso de construcción con su propia evidencia: capturas, resultados de evaluaciones o una verificación contra la base de datos en vivo:

Las convenciones son la base

Cada sesión carga dos archivos normativos: un acuerdo de trabajo (CLAUDE.md) y un archivo permanente de estándares (BIBLIA.md). No son READMEs: codifican invariantes que el agente no puede violar. Cada nutriente se almacena por 100 g, los totales se calculan en vistas SQL y nunca se copian, y existe un límite inferior médico de sodio que no se negocia ni se configura. La calidad del agente depende del contexto que se le obliga a releer; los archivos de convenciones son una pieza central del trabajo en un repositorio agéntico.

Controles estructurales antes que recomendaciones

Una recomendación de «revisa tu rama» no resiste una carrera entre dos sesiones que comparten un checkout. Un hook previo al commit que rechaza cualquier commit a main sí lo hace. Lo mismo ocurre con la corrección: un cambio no está terminado porque se vea bien; está terminado cuando pasan 186 pruebas, lint y build. La compuerta es mecánica, no una promesa.

MCP en ambos sentidos

Los cambios de esquema pasan por el conector MCP de Supabase: el agente escribe una migración incremental y numerada, la aplica al proyecto en vivo y la verifica con una consulta antes de cerrar el trabajo. Se han entregado así más de dos docenas de migraciones; la numeración y la comprobación posterior dejan un rastro auditable.

El mismo patrón cubre la observabilidad: el proyecto de Sentry se configuró por su conector MCP —proyecto, DSN y cambio de CSP enviados desde el agente en una sola sesión— para que los errores de producción regresen al ciclo de trabajo en lugar de quedar en la consola de un usuario.

El conector también funciona en la otra dirección: nutri expone su propio servidor MCP remoto, de modo que Claude opera la aplicación en lenguaje natural contra producción, con seguridad por filas como única capa de autorización y los mismos validadores de dominio que usa la interfaz. La construcción —OAuth 2.1, decisiones sobre las herramientas y verificación sin cambios netos en la base de datos en vivo— tiene su propio caso: Un servidor MCP remoto con RLS como única capa de autorización.

La fiabilidad también deja evidencia

Dos usuarios con teléfonos reales encontraron un error que una demo no muestra: con mala conexión, una misma comida se registraba tres veces porque la interfaz esperaba a la red antes de responder. Ahora las escrituras entran en una cola local y aparecen de inmediato; el UUID de la fila se genera en el cliente, así que repetir un insert choca con la clave primaria en vez de crear un duplicado. El catálogo también queda en caché: la app instalada puede abrirse sin conexión, buscar y registrar alimentos. Escrituras sin conexión y cola idempotente

El producto

La mayor parte exige iniciar sesión, así que estas imágenes muestran pantallas que quien revisa el caso no vería de otro modo.

Pantalla Hoy de nutri.: indicador de calorías, barras de macronutrientes, límite de sodio, agua y comidas registradas
Hoy: objetivos nutricionales, progreso de macronutrientes, agua y comidas del día. La captura muestra una versión anterior de la interfaz.
Datos con IA en nutri.: una descripción de texto convertida en una estimación nutricional estructurada por 100 g con coincidencias USDA
Datos con IA: una descripción se convierte en una estimación estructurada por 100 g con coincidencias USDA. La cascada recurre a siete modelos (Gemini → Groq → Mistral); un valor dudoso se señala y nunca se guarda en silencio.
Panel de nutri. en escritorio: navegación lateral, filtros de período, barra de agua y tarjetas de nutrientes con minigráficas
Panel en escritorio: el mismo producto se adapta desde el teléfono hasta una pantalla amplia. Indicadores por nutriente con minigráficas del período y promedio diario.
Tablas del panel de nutri. en escritorio: alimentos principales por calorías y micronutrientes frente a objetivos con advertencia de sodio
Alimentos que más contribuyen y tabla de micronutrientes frente a objetivos, con el mismo límite inferior de sodio señalado en rojo.

Qué podría trasladarse a un equipo mayor

En una operación individual, esto es una disciplina de trabajo. En un equipo, cada pieza se convierte en una superficie de plataforma: los archivos de convenciones pasan a ser habilidades compartidas, el hook previo al commit se convierte en política de CI, el acceso MCP en infraestructura gobernada y el sistema de evaluaciones en una práctica de medición común. Operar la versión de una sola persona me enseñó dónde están las uniones.

Repositorio: github.com/vryahn/nutri · En vivo: nutri.vryahn.com/about (recorrido público → demo en vivo, sin registro: copia aislada con 35 días de datos que se borran automáticamente)

BR / CONTACTO

Hablemos

Para oportunidades profesionales y conversaciones sobre producto, pagos e IA aplicada.