Easy-to-manage touch screens
Free, open-source touch screens. Guided USB setup, a drag-and-drop editor and local control. Made for Home Assistant.
Controla tu despensa, compra solo lo que falta y ahorra: inventario, lista de la compra, escaneo de tickets, precios y menús semanales.
Translation pending
LifestyleTypeScript · JavaScriptGitHub @jm-fusterOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
App web instalable para llevar la casa entre varias personas: despensa, lista de la compra compartida, tickets leídos con IA, precios y menús semanales.
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗Fill Good es una app web instalable para llevar la casa entre varias personas: qué hay en la despensa y cuándo caduca, qué falta en la lista de la compra, cuánto costó cada cosa en cada súper y qué se come esta semana. La foto del ticket al salir del súper pone al día la despensa y el historial de precios de una vez.
Está en producción desde julio de 2026. La interfaz está en español y se diseñó primero para el móvil; en escritorio, la barra inferior pasa a ser un panel lateral y las hojas que suben desde abajo, diálogos centrados.
Capturas de la portada pública, con datos de ejemplo. El resto de la app necesita cuenta.
Las lecturas van en Server Components y las escrituras en Server Actions. Toda
consulta a una tabla con household_id filtra además por el hogar activo: la
RLS solo comprueba que eres miembro, y quien está en dos hogares vería las filas
de los dos mezcladas.
El calendario es el de España, corra donde corra el código. El servidor está
en UTC y el móvil en Madrid. Mientras cada uno leyó su propio reloj, entre las
00:00 y las 02:00 las pantallas se contradecían: la interfaz ofrecía «Lo
cocinamos» y la acción respondía que ese día todavía no había pasado. Ahora
todas las fechas salen de src/lib/dates.ts, y npm run check:fechas lo
comprueba en UTC, Madrid y Nueva York, porque en un portátil español el fallo
no existe. Rompiendo la función a propósito, salen 0 fallos en Madrid y 11 en
UTC.
Un export type tumbó toda la IA en producción. En un módulo
"use server", Next.js trata cada exportación como una acción, y un
export type { X }; sin from apunta a algo que TypeScript ya ha borrado. El
módulo muere al evaluarse y se lleva por delante todas las acciones de las
páginas que lo importan. tsc, el lint y next build lo dieron por bueno,
porque el módulo no se evalúa hasta que alguien pulsa un botón. Desde entonces
npm run check:acciones va en el CI.
La lista de la compra es del cliente. Con dos personas cambiándola a la vez,
recargar la ruta en cada cambio daba tirones y resucitaba cosas, como la
respuesta tardía del servidor que devolvía lo que acababas de quitar. El
servidor manda cambios de una fila, las instantáneas completas se funden con las
reglas de list-sync.ts y npm run check:lista reproduce las carreras que
rompían la lista.
Un cambio de modelo se mide antes de hacerlo. npm run compare:menu genera
semanas reales con varios modelos, con el mismo prompt y el schema de
producción, y las puntúa con el código del repo, sin que ningún modelo juzgue a
otro. En agosto de 2026, Gemini 3.6 Flash empató con 3.5 en todo lo que se
podía contar, pero tardó entre 35 y 105 segundos por menú frente a 31–38, y la
Server Action corta a los 60. Se quedó 3.5. De paso salieron tres fallos del
prompt, dos de ellos tapados por un rescate silencioso.
El nombre de una línea de ticket es la clave con la que se reconoce el
producto. Con el peso y el importe dentro, 119 de los 125 nombres aprendidos
de un hogar no podían volver a coincidir nunca. src/lib/receipt-label.ts
recorta lo que añade la báscula y deja el gramaje del nombre comercial
(ESPIRALES 500G se queda, 0,990 kg x 2,29 €/kg se va), y
npm run check:rotulos lo fija con líneas reales de Mercadona, Alipende y
tickets en catalán.
AGENTS.md cuenta el porqué de estas y del resto de reglas, con los fallos que las motivaron.
Cada push a main y cada pull request pasan por tres trabajos de CI: lint y
tipos, comprobaciones de reglas, y build de producción con presupuesto de
bundle.
El lint lleva jsx-a11y en modo estricto y no admite ni un aviso, así que una
regresión de accesibilidad rompe el CI. Lo que el lint no ve de WCAG 2.2 AA (el
foco, el contraste real en los dos temas, los objetivos táctiles de 44 px) se
revisa a mano.
Las comprobaciones check:* ejecutan el TypeScript del repo con Supabase y
Clerk falseados, sin base de datos ni credenciales, y tardan segundos. Cada una
defiende una regla que ni el compilador ni el lint pueden ver:
| Comprobación | Qué defiende |
|---|---|
check:fechas | El calendario español, ejecutado en tres zonas horarias |
check:lista | La lista compartida frente a respuestas tardías y cambios cruzados |
check:guardas | Server Actions reales: no pisan lo ya cocinado ni dan por hecha una escritura que no tocó nada |
check:menu | Lo que sabe la IA antes de planificar y las reglas que reescriben la semana |
check:cocinado | Cuánto se descuenta de la despensa al cocinar, y en qué unidad |
check:cocina | El modo cocinado: por dónde se retoma, qué ofrece al terminar y qué tiempos detecta |
check:repaso | Por qué productos pregunta el repaso semanal de despensa |
check:motivos | El texto que explica por qué se sugiere algo en la lista |
check:rotulos | La clave con la que se reconocen los nombres de los tickets |
check:receta-ia | Que la IA complete cantidades sin renombrar los ingredientes |
check:alexa | El estado de la conversación con Alexa |
check:acciones | Que un módulo "use server" solo exporte acciones |
check:bundle compara con un presupuesto el JavaScript que comparten todas las
rutas y el de cada layout, y check:legal impide desplegar los textos legales
sin los datos del responsable.
Antes de cualquier git push que lance Claude Code, un hook ejecuta el build de
producción con esas comprobaciones y bloquea la subida si falla, porque main
despliega directo a producción.
src/app/ Rutas (App Router); (app)/ es la parte con sesión
src/features/<feature>/ components/, actions.ts, queries.ts y schemas.ts
src/components/ UI compartida; ui/ son los componentes de shadcn
src/lib/ Clientes de Supabase, IA, fechas, medición de uso…
supabase/migrations/ Esquema, políticas de RLS y funciones
scripts/ Las comprobaciones check:* y utilidades
docs/ Skill de Alexa, especificaciones y planes ya cerrados
El repo está publicado para enseñarlo, pero se puede arrancar. Hace falta Node 24 y cuentas gratuitas en Supabase, Clerk y Google AI Studio.
npm ci
cp .env.example .env.local # cada variable lleva su explicación
npx supabase login
npx supabase link --project-ref <tu-proyecto>
npx supabase db push # aplica las migraciones
npm run dev
Clerk se conecta a Supabase como proveedor externo de autenticación (guía de Supabase). Las notificaciones y Alexa son opcionales: sin sus variables quedan apagadas. La skill tiene su propia guía en docs/alexa.
AGENTS.md es la documentación técnica: convenciones, reglas del
sistema de diseño y qué vigila cada comprobación. Es también la guía que lee
Claude Code, con el que se desarrolla el proyecto. En docs/historico/ quedan
los planes ya ejecutados, como registro de cómo se decidió cada cosa.
El repositorio es público para que se pueda leer, pero no tiene licencia de uso: todos los derechos reservados (LICENSE). Sí puedes clonarlo y arrancarlo en tu equipo para evaluarlo o proponer cambios, sin desplegarlo para otros ni redistribuirlo.
Los iconos de producto son de
Fluent Emoji, de Microsoft, con
licencia MIT, salvo 19 dibujados para la app en assets/product-icons/. Sus
avisos de licencia, y los de los componentes de shadcn/ui, están en
THIRD-PARTY-NOTICES.md.