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.
A companion for discovering sake.
Translation pending
LifestyleTypeScript · HTMLGitHub @yawaragi-devOnlineOwner 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
sake sommelier app
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
A sake companion. Three flagship surfaces: label scan, chat recommender, taste profile. Live: — English preview is live. German edition is intentionally on a coming-soon page until the Impressum (§5 DDG) is in place; see ADR-0008. _Snapshot generated 2026-09-30 from GitHub Issues + merged PRs. Regenerate with pnpm progress. Detail: docs/PROGRESS.md._ Yawaragi-mizu (和らぎ水) is the water drunk between sake sips — a palate reset, not a replacement. This app accompanies and clarifies; it doesn't compete with the sake.Read the full README ↗
A sake companion for people who can't read the label. Point the camera at a bottle, a menu or a shop shelf; Yawaragi tells you what it is, what it tastes like, and — once you have rated a few — which one on the list is for you.
Live: https://yawaragi.dev — English is live. German is on a coming-soon page until the Impressum (§5 DDG) is in place; see ADR-0008.
Yawaragi-mizu (和らぎ水) is the water drunk between sake sips — a palate reset, not a replacement. This app accompanies and clarifies; it doesn't compete with the sake.
For anyone (after the 18+ gate):
With an account (a private beta today, see ADR-0020). Without one, look through a sample collection — made-up tastings of real sakes, read-only:
evals/label-scan-jp/README.md. A quarterly workflow opens an issue asking for the check again.source values from the schema to the screen; anything a model produced wears a "Read by AI" badge with an explanation sheet (ADR-0005).design/; every port is checked against them, and docs/design-questions.md is the running list of what the build asked the designers.Previously named "Kanpai"; renamed to avoid collision with KANPAI London Craft Sake Brewery — see ADR-0004.
src/app/globals.css.@ai-sdk/mcp connecting to our own MCP serverflowchart TD
V[Visitor] --> P["src/proxy.ts<br/>Clerk → next-intl<br/>→ age gate, session cookie"]
P --> Site["(site): landing, Learn,<br/>privacy, imprint"]
P --> App["(app): Home · Scan · Collection · Palate<br/>sake, bottling, search, account"]
App --> ScanAction["lib/scan/scan-action"]
ScanAction --> RateLimit["lib/rate-limit<br/>anonymous session + Upstash"]
ScanAction --> Vision["lib/ai/vision<br/>Haiku 5.5 → Sonnet 5.5 retry"]
ScanAction --> Resolve["lib/sakenowa<br/>resolve-scanned-label"]
App --> ListAction["lib/scan/list-action<br/>menu and shelf"]
ListAction --> ListReader["lib/ai/vision/list-reader<br/>Sonnet 5.5"]
ListAction --> Rank["lib/scan/rank-list<br/>(no model call)"]
Resolve --> DB[("Supabase Postgres<br/>Sakenowa mirror<br/>+ manual curation")]
App --> DB
App --> Gate["lib/auth/maintainer<br/>(private beta allowlist)"]
Gate --> Stores["journal · cellar · own bottlings<br/>lib/taste, lib/collection"]
Stores --> KV[("Upstash Redis<br/>versioned records")]
Backup["/api/cron/backup-collection<br/>daily"] --> KV
Backup --> Bucket[("Supabase Storage<br/>private backups, 30 kept")]
Ingest["/api/cron/ingest<br/>daily"] --> DB
Sakenowa["Sakenowa Data API"] --> Ingest
App --> Suggest["suggest (behind a flag)<br/>AI SDK tool loop"]
Suggest --> MCP["@yawaragi/sakenowa-mcp"]
MCP --> DB
Vision --> Anthropic["Anthropic Claude"]
ListReader --> Anthropic
Suggest --> Anthropic
Anthropic -.-> Langfuse["Langfuse (EU)<br/>traces, no prompts in prod"]
Built: the catalogue mirror and its daily ingest, the scan with every outcome the design specifies, search, the bottle and bottling pages, Learn, and — for the private beta — the journal, Palate, Cellar, own bottlings and menu/shelf ranking. The UI matches design v1.7.1 except where CLAUDE.md says otherwise. Suggestions ("Ask") are built but hidden in v1 for cost and latency (#299).
Before a public launch: opening the journal to everyone (with self-service export and deletion), separate data for production and previews, the remaining vendor DPAs, and the German Impressum. See docs/PRE-GO-LIVE.md.
packageManager field pins it for corepack enable)DOCKER_HOST set) — required by pnpm test:integration / pnpm verify. On Linux, after installing Docker Engine, add your user to the docker group (sudo usermod -aG docker $USER then re-login). Docker Desktop, Colima, OrbStack, and rootless Docker all work; testcontainers auto-detects.pnpm install
cp .env.example .env.local # fill in API keys
docker pull postgres:16-alpine # one-time; the integration runner reuses this image
pnpm dev
| Command | Purpose |
|---|---|
pnpm dev | Next dev server |
pnpm test | Vitest unit suite, single run |
pnpm test:watch | Vitest watch mode |
pnpm test:integration | Vitest integration suite (testcontainers; needs Docker) |
pnpm test:e2e | Playwright |
pnpm test:smoke | Key routes against a production build (run pnpm build first); with SMOKE_BASE_URL=https://yawaragi.dev, against the live site instead (read-only) — CI does that after every production deploy |
pnpm lint | ESLint |
pnpm typecheck | tsc --noEmit |
pnpm migrate | Apply pending SQL files in supabase/migrations/ to MIGRATE_DATABASE_URL |
pnpm ingest | Refresh Sakenowa data into Supabase |
pnpm rate-limit:reset | Reset the anonymous rate limits in Upstash so the next scan starts at 5/5 — every visitor's, not just yours; says how many and asks first (-- --bucket scan or suggest, -- --yes) |
pnpm journal:export | Export a maintainer's collection (journal, cellar, own bottlings) to JSON — GDPR portability + durability backstop. Output holds personal data — gitignored; delete when done |
pnpm journal:restore | Write an export or a daily backup back into Upstash (idempotent; --dry-run validates only) |
pnpm journal:erase | GDPR erasure: a user's journal, cellar, own bottlings and backups (reports only without --yes) |
pnpm db:resync | One-shot: db:reset --yes && migrate && ingest |
pnpm verify | Full chain (lint + typecheck + test + integration + e2e + audits) — needs Docker |
pnpm eval <suite> | Run an eval suite: , , , . See (the label scan runs offline from saved reads with ) |
CLAUDE.md — agent operating instructions, conventions, anti-patternsCONTEXT.md — domain glossary; read before naming variables/typesdocs/adr/ — architecture decision recordsdocs/PRE-GO-LIVE.md — hard gates before any public launchdocs/deploying.md — Vercel deployment, env vars, vendor DPAs, plan-tier auditdocs/NAMING-RESEARCH.md — naming decision rationaleThe MCP server that exposes the Sakenowa-mirrored sake catalogue lives in its own repo at yawaragi-dev/sakenowa-mcp and is consumed by this app as the npm package @yawaragi/sakenowa-mcp. v0.0.1 reserves the npm name; v0.1.0 is in development — six read-only tools over the Sakenowa schema, per the spec doc and issue tree. The server deliberately depends on neither Next.js nor Clerk nor any Yawaragi-specific logic, so anyone with a Sakenowa mirror in Postgres can run it standalone. See docs/adr/0003-mcp-server-extractability.md.
Sake data is sourced from the Sakenowa Data API. "Flavor Chart" is a registered trademark of Sakenowa.
Open-core. Application code is All Rights Reserved; the cross-beverage map (CC BY-NC-SA 4.0), the glossary (CC BY-SA 4.0), and the Zod schemas (MIT) are permissively licensed. See docs/LICENSE-STRATEGY.md and LICENSE.
The MCP server @yawaragi/sakenowa-mcp lives in its own repo and is MIT-licensed.
docs/adr/, 200+ unit test files, 8 integration suites against a real Postgres, 28 Playwright specs (one of them a smoke test against a production build).@yawaragi/sakenowa-mcp.label-scan-jplabel-scan-pairslist-read-jpsuggest-jpevals/<suite>/README.mdLABEL_SCAN_EVAL_OFFLINE=1