Easy-to-manage touch screens
무료 오픈소스 터치스크린으로 USB 설정 가이드, 드래그‑드롭 편집기, 로컬 제어를 제공하며 Home Assistant용으로 제작되었습니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
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 leaderboardREADME 전문 보기 ↗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.