Saltar al contenido
openplate

La aplicación

openplate registra alimentos y, si quieres, estima los macronutrientes de un plato a partir de una foto. Busca un alimento o escanea un plato, y la entrada irá a tu diario del día. En tu propia instalación no hay pantalla de registro: abre la aplicación y empieza a registrar. En la instancia alojada, inicias sesión primero.

El diario muestra un día cada vez: las comidas que registraste, lo que restan del límite diario y lo que queda de él.

Estas pantallas muestran datos de ejemplo, no un diario real.

El diario de openplate en un teléfono. Los carbohidratos netos se registran frente al límite diario. Las calorías, las proteínas, las grasas y la fibra se muestran frente a sus objetivos.

Sin intermediarios ni tiendas de aplicaciones

openplate es una aplicación web (una PWA) que instalas directamente desde el navegador, ya sea en un teléfono o en un ordenador. No hay ninguna tienda de aplicaciones. Nadie necesita una cuenta de Apple o de Google, y ninguna revisión ni comisión de tienda se interpone entre una versión y tu dispositivo. La institución que aloja openplate lo sirve desde su propio dominio, y cualquier actualización llega a cada dispositivo la próxima vez que se abre la app.

Los recordatorios son opcionales. Si decides activarlos, se envían mediante el servicio push del fabricante de tu navegador, exactamente como cualquier notificación web.

Qué guarda en el dispositivo

Todo lo que un usuario posee (registros de comida, pesos, alimentos personales, objetivos y la configuración de IA) se escribe en el IndexedDB del navegador dentro del dispositivo donde se introdujo (app/lib/local-store/). Se almacena allí en claro, porque es tu dispositivo, y nunca sale de él salvo en dos formas que tú eliges: una exportación en JSON que descargas o un blob de sincronización cifrado.

El servidor de la app es un único contenedor sin estado. Sin base de datos, sin ORM, sin migraciones y sin ningún secreto necesario para arrancar. Puede contener exactamente un secreto opcional, la clave del operador para la base de datos de alimentos, descrita más abajo. Destruir el contenedor no hace perder nada. No es tacañería, es toda la promesa: consulta ADR-0006.

Qué sale del dispositivo

Una foto del plato se lee en el navegador y se envía directamente al endpoint compatible con OpenAI que hayas configurado. El servidor de openplate nunca interviene en esa petición. No se sube aquí, no se escribe en disco, no se registra. Solo se guardan los números resultantes en el almacén local del dispositivo; la foto se queda en el dispositivo que la tomó, excluida tanto de las exportaciones en JSON como de las cargas útiles de sincronización.

Ese endpoint es un proveedor en la nube que pagas (la opción BYOK) o tu propio contenedor openplate-inference. En la opción autohospedada, el modelo nombra los alimentos del plato y estima los gramos, y después los macronutrientes se buscan, no se inventan: los carbohidratos, las proteínas, las grasas y las kcal se resuelven por nombre contra la fuente de alimentos configurada, por defecto un extracto integrado de USDA FoodData Central (8.041 alimentos genéricos incluidos dentro de la imagen, sin llamadas de red, de dominio público). El modelo de lenguaje nunca genera un valor de macronutrientes.

Como el navegador realiza esa llamada, el endpoint debe ser una dirección que un navegador pueda alcanzar. Un nombre de host de compose como http://inference:8300/v1 no funcionará, aunque los dos contenedores puedan comunicarse entre sí de esa forma. Usa la dirección LAN del host, un nombre de tailnet o un nombre de host en tu proxy inverso.