Easy-to-manage touch screens
무료 오픈소스 터치스크린으로 USB 설정 가이드, 드래그‑드롭 편집기, 로컬 제어를 제공하며 Home Assistant용으로 제작되었습니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
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.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.
여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗