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.
Scan packaged food, track expiry, and get Indian recipes that use what is about to spoil.
LifestyleTypeScript · PLpgSQLGitHub @npshetty25OnlineOwner 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
Loading the full README. The saved excerpt is shown below.
A pantry tracker that helps reduce household food waste: scan groceries in,
see what's about to expire, and get a recipe to use it up before it spoils.
Open http://localhost:3000.
Copy .env.local.example to .env.local and fill in:
Run both files in the Supabase SQL Editor, in order:
1. db/supabase-schema.sql — base tables
2. db/supabase-schema-additions.sql — households, shopping list, scan
history, ingredient text, item outcomes, household leaderboardRead the full README ↗A pantry tracker for Indian households that cuts food waste: scan a barcode or a receipt, see what is about to expire, and get a recipe that uses it up first. Pantries can be shared across a household with row-level security enforcing who sees what.
Live: https://nutri-trusto.vercel.app · installable as a PWA
Screenshot rendered from synthetic pantry data in a test browser, not a real account. There is no demo GIF yet.
flowchart LR
UI[Next.js PWA] -->|anon key + RLS| PG[(Supabase Postgres)]
UI -->|bearer token| API[/api routes/]
API --> GEM[Gemini]
API --> OFF[Open Food Facts]
API -.-> ML[FastAPI category model]
The dotted edge is optional. Full diagram, trust boundaries and request flows: docs/ARCHITECTURE.md.
| Tests & CI | Vitest unit/component/API-route tests, RLS policies run against real Postgres (PGlite), Playwright browser journeys on phone and desktop and a pytest job for the model service. All on every push: workflow |
| RLS & the 42P17 fix | db/rls.test.ts proves the policies and includes a negative control that does raise 42P17. It also guards the fix for a cross-household write issue the tests found (db/supabase-schema-household-guard.sql) |
| Responsive & PWA | Before/after measurements in docs/audit/PHASE1_RESULTS.md; a browser test fails the build if a tap target drops below 44px |
| Load test | docs/perf/LOAD_TEST.md — labelled synthetic, with its limits stated |
| ML model | ml/README.md — dataset, licence, metrics against the existing keyword rules, calibration, known misses |
| Audit | docs/audit/PHASE0_AUDIT.md |
gemini-2.5-flash) — receipt, label and expiry OCR; recipes; chatnpm install
cp .env.local.example .env.local # fill in Supabase and Gemini values
npm run dev # http://localhost:3000
| Variable | Used for |
|---|---|
NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY | Supabase project (public values) |
GEMINI_API_KEY | Scanning, recipes and chat (server only) |
ML_SERVICE_URL | (optional) category model service; unset → keyword rules |
NEXT_PUBLIC_GOOGLE_SIGNIN | (optional) 1 shows "Continue with Google" once it is set up in Supabase |
OFF_USER_ID, OFF_PASSWORD | (optional) contribute barcodes to Open Food Facts |
Run in the Supabase SQL editor, in order: db/supabase-schema.sql,
db/supabase-schema-additions.sql, db/supabase-schema-hardening.sql,
db/supabase-schema-household-guard.sql. All are
idempotent. There is no migration ledger; the repo cannot tell you which have
been applied to a given project.
Feature migrations follow; each says at its top what must run before it, and
the app checks for each column and keeps working without it. The newest,
db/supabase-schema-printed-date.sql, keeps the date printed on a pack, so one
added after its date reads "10 days ago" rather than "today".
"Forgot password?" emails a Supabase recovery link that returns to
/reset-password. Two settings in the Supabase dashboard make it work for
everyone:
https://<your-domain>/reset-password. Without it Supabase sends the link to
the Site URL instead; the app still forwards it to /reset-password.A morning push message ("Use these today: Curd, Spinach") for devices that opted in under Notification Preferences. It is off until you set it up, and nothing else changes in the meantime:
db/supabase-schema-push.sql in the Supabase SQL editor.npx web-push generate-vapid-keys prints a public and a private key.NEXT_PUBLIC_VAPID_PUBLIC_KEY, VAPID_PRIVATE_KEY,
VAPID_SUBJECT (a mailto: address), SUPABASE_SERVICE_ROLE_KEY and
CRON_SECRET, then redeploy. The service role key bypasses row-level
security: it belongs in Vercel only, never in git or a NEXT_PUBLIC_ name.vercel.json calls /api/cron/push-reminders once a day at 8:00 am India time.
On an iPhone, push works only for the app added to the Home Screen (iOS 16.4+).
npm run lint && npm run typecheck
npm test # unit, component, API-route and RLS tests
npm run test:coverage
npm run test:e2e # builds, then runs Playwright (phone + desktop + PWA)
pytest ml/service # model service
src/app/page.tsx is ~2,900 lines; it is covered by browser tests, not unit tests.src/ — high where logic lives
(lib, API routes), near zero on the big page component.src/app/ routes, layout, API routes (/api/health, /api/categorize, …)
src/components/ UI components
src/lib/ matchers, shelf-life data, auth, rate limit, upload validation
db/ SQL migrations; db/proposed/ holds reviewed-but-unapplied ones
e2e/ Playwright specs and the fake backend they run against
ml/ data fetch, training, evaluation, service, committed model
perf/ Locust load test and stub
docs/ architecture, ADRs, audits, perf report
FEATURE_IDEAS.md tracks planned and shipped features; CHANGELOG.md records
every change to shelf-life data with the reason.