CleanFrame
삼성 The Frame용 개인 홈 화면, 포크와 맞춤을 위한 시작점
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
RESTAURANT APP THAT LETS USERS INPUT THEIR FAVOURITE BURGER
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A craving list and tasting journal. Write down the burgers you want, then devour them with a 1–5 rating and a note. Every day, 今日汉堡 (today's burger) picks one for you from what it has learned about your taste.
Originally a 2019 bootcamp assignment (Express, MySQL, Handlebars and a hand-made ORM), rebuilt in 2026.
The original taught the basic CRUD loop: form → route → SQL → HTML. This version keeps that loop and uses it to teach three things the other projects in this set don't:
How the card is made, in three steps you can read in src/taste/:
bacon +1, salty −1. A keyword tagger (English and Chinese) runs instantly; if a model is connected it re-reads the text in the background and its validated tags replace the keyword ones.count + 2 keeps a tag near zero until it has a few examples (the idea behind ridge regularisation). Weights like smoky +0.8, salty −0.9 are the whole model.The card is written to feel good, using four small ideas from psychology:
| On the card | Example | Why it works |
|---|---|---|
| A memory, in your own words | 💭 You gave Smoked brisket smash 5/5 "great char". This one is smoky too. | Being remembered feels personal; a generic "you might like" does not. |
| A sensory preview | Picture it: crispy, lacy edges, cheese melting over the side and a deep smoky char. | Imagining the first bite is part of the pleasure (anticipation, or savouring). |
| One new thing | ✨ Something new for you: your first plant-based pick. | Novelty inside something familiar is exciting rather than risky. |
| A promise | 👌 Easy on the salt: you've said "too salty" twice. | Removing a known worry beats warning about it. |
A model, if configured, only rewrites the sensory preview. Until it answers, or if it fails, a template preview stands in, and the card says which wrote it.
| No JavaScript at all | An AI agent logs a burger |
|---|---|
Plain <form>s and redirects, so it works everywhere. htmx only makes it smoother. | Real MCP calls against a local server, then the same journal in the browser. |
corepack enable
pnpm install
pnpm dev # http://localhost:8787, with a local D1 database
| Command | What it does |
|---|---|
pnpm test | Worker tests inside the real Workers runtime (workerd) with a local D1, once without a model and once with a scripted fake model |
pnpm e2e | Playwright: desktop and phone, JavaScript on and off, axe accessibility scans in both themes |
pnpm validate | Lint, types, tests, build, e2e, knip |
pnpm gifs | Re-records the GIFs above from the live app (needs ffmpeg) |
flowchart LR
B[Browser<br/>forms + htmx] -->|POST /burgers ...| H
A[AI agent<br/>MCP client] -->|POST /mcp/key| H
subgraph Worker
H[Hono routes] --> V[Zod rules<br/>domain.ts]
V --> Q[SQL<br/>db.ts]
end
Q --> D[(D1<br/>burgers)]
Read the code in this order; it is about 600 lines in total:
여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗