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.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
Loading the full README. The saved excerpt is shown below.
A private log of the wines you've had and what you made of them. Photograph the
label, tap how much you liked it, add a note. Later, in the shop, search it.
Built for one person. There are no accounts, no social feed, and no ratings from
anyone else — the whole point is that it records your opinion, not a consensus
that clusters everything between three and four stars.Read the full README ↗A private log of the wines you've had and what you made of them. Photograph the label, tap how much you liked it, add a note. Later, in the shop, search it.
Built for one person. There are no accounts, no social feed, and no ratings from anyone else — the whole point is that it records your opinion, not a consensus that clusters everything between three and four stars.
Deliberately not here yet: preference profiles and recommendations. Those want a few dozen logged bottles to be any good — see Where this goes next.
You need a Neon database, an Anthropic API key, and a Vercel account. All three have free tiers that comfortably cover personal use.
npm install
cp .env.example .env.local
Fill in .env.local:
| Variable | Where it comes from |
|---|---|
DATABASE_URL | Neon dashboard → your project → Connection string (pooled) |
ANTHROPIC_API_KEY | console.anthropic.com → API keys |
APP_PASSCODE | You choose it. It's what unlocks the app on your phone. |
AUTH_SECRET | node -e "console.log(require('crypto').randomBytes(32).toString('hex'))" |
npm run db:init
Safe to re-run; it only creates what's missing.
npm run dev
Push to GitHub, import the repo in Vercel, and add the same four environment variables under Settings → Environment Variables. Deploy.
Then on your phone, open the Vercel URL, enter your passcode, and add it to your home screen — Share → Add to Home Screen on iOS, or ⋮ → Install app on Android. HTTPS is required for the camera, which Vercel gives you by default.
| Piece | Choice | Why |
|---|---|---|
| Framework | Next.js (App Router) | One deployable for pages and API; first-class on Vercel |
| Database | Neon Postgres over HTTP | No connection pool to manage from serverless functions |
| Label reading | Claude vision, server-side | Handles supermarket own-label bottles that catalogues don't have |
| Grape notes | Claude, cached in Postgres | No wine-encyclopedia API to sign up for, and a grape doesn't change |
| Bottle lookup | Claude web search, cached | Supermarket bottles aren't in any wine database, but they are on the web |
| Photos | Base64 in Postgres | One less service to wire up; photos are ~150 KB after downscaling |
| Auth | One passcode, signed cookie | It's a single-user app on a public URL |
| Styling | Tailwind v4 | — |
| Type | Fraunces + Schibsted Grotesk | Both OFL, self-hosted at build, so no runtime call to Google |
On the type. Fraunces (Undercase Type) for wine names and notes, Schibsted
Grotesk (Schibsted's newsroom grotesque) for everything else — chosen partly
because neither is the serif-plus-Inter combination every other product ships.
Fraunces carries an optical-size axis, so font-optical-sizing: auto lets the
browser thin the strokes for a 40px masthead and thicken them for a 17px card
title, from one font file. Two classes select the cut: .serif-display adds a
little of the WONK axis for character in headings, .serif-text drops it for
running text. Around 116 KB of font on first load, cached for a year after.
This is the beginning of the README. Read the rest at the original. Read the full README ↗