Chad Vocab: Vocabulary practice with local Gemma!
Chad Vocab: Vocabulary practice with local Gemma!
Hacktoberfest Weekend Challenge: Build for a Friend Submission 🤝 Hacktoberfest 周末挑战:为朋友而建的提交作品 🤝
This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend. 这是 Hacktoberfest 周末挑战“为朋友而建”的参赛作品。
What I Built 我构建了什么
Chad Vocab is a self-hosted vocabulary trainer I built for Chad, a friend who is learning Polish. He is able to enter his own language pairs, or photograph a text book page, which gets converted into a vocabulary deck. He can make other language pairs and other decks, if needed. In this demo, he gets English cues and answers in Polish — by typing or speaking. Near-miss answers are graded by an open-weight Gemma model running locally through LM Studio. Spoken answers go through optional ElevenLabs Scribe when he pastes his own API key, otherwise open Whisper via Scriberr. He can also photograph a textbook page; Gemma vision proposes pairs, and he reviews them before anything hits the deck. It does not have to be big. It has to matter to him: a private practice loop that keeps his speech and photos on a household laptop, not a cloud AI subscription. Chad Vocab 是我为正在学习波兰语的朋友 Chad 构建的一款自托管词汇训练器。他可以输入自己的语言对,或者拍摄教科书页面,这些内容会被转换为词汇卡组。如有需要,他还可以创建其他语言对和卡组。在这个演示中,他会收到英语提示并用波兰语回答——通过打字或语音。对于拼写接近的答案,由通过 LM Studio 本地运行的开源权重 Gemma 模型进行评分。语音回答可以通过他粘贴自己的 API 密钥使用可选的 ElevenLabs Scribe,否则则通过 Scriberr 使用开源的 Whisper。他还可以拍摄教科书页面;Gemma Vision 会提出词汇对建议,他在导入卡组前进行审核。它不需要规模宏大,但必须对他有意义:这是一个私密的练习闭环,将他的语音和照片保留在家庭笔记本电脑上,而不是依赖云端 AI 订阅。
Demo 演示
Live app: https://vocab.slotify.work/ 在线应用:https://vocab.slotify.work/
Demo login (registration is closed on the public tunnel): 演示登录(公共隧道已关闭注册): Username: chad 用户名:chad Password: mXz1cvwHZZgg 密码:mXz1cvwHZZgg
The app runs on my machine behind a Cloudflare Tunnel to vocab.slotify.work, so it is only reachable while the host is awake for judging. LM Studio and Scriberr stay on localhost and are not exposed. LM Studio and any Open Whisper endpoint could potentially be used. 该应用运行在我的机器上,通过 Cloudflare Tunnel 映射到 vocab.slotify.work,因此仅在主机开启以供评审时可访问。LM Studio 和 Scriberr 保留在本地主机上,不会暴露。LM Studio 和任何 Open Whisper 端点理论上都可以使用。
Quick path for judges: log in as chad → practice an English cue in Polish → try a close-but-wrong spelling and watch Gemma accept or correct → open Deck to see the starter list, add/remove words, scan a vocab page or generate audio. 评审快速通道: 以 chad 身份登录 → 用波兰语练习英语提示 → 尝试输入拼写接近但错误的答案,观察 Gemma 如何接受或纠正 → 打开卡组查看初始列表、添加/删除单词、扫描词汇页面或生成音频。
Video Demo 视频演示
Code: aldorr / chad-vocab 代码:aldorr / chad-vocab
Open-source Polish vocab trainer for Chad — local Gemma + Whisper 为 Chad 开发的开源波兰语词汇训练器 — 本地 Gemma + Whisper
Chad Vocab: Open-source, self-hosted vocabulary trainer built for Chad while he learns Polish from English cues. Chad Vocab:开源、自托管的词汇训练器,专为 Chad 在学习波兰语时使用英语提示而构建。
- English → Polish (or any language pair you set) 英语 → 波兰语(或任何你设置的语言对)
- Type or speak — spoken answers go through local Scriberr (Whisper) 打字或语音 — 语音回答通过本地 Scriberr (Whisper) 处理
- Fuzzy grading — LM Studio + an open model such as Gemma accepts near-misses 模糊评分 — LM Studio + 诸如 Gemma 之类的开源模型可接受拼写接近的答案
- Photo → deck — Gemma vision reads a textbook page; you review before import 照片 → 卡组 — Gemma Vision 读取教科书页面;导入前由你审核
- Optional accents — ElevenLabs TTS / Scribe per account (bring your own API key) 可选口音 — 每个账户可使用 ElevenLabs TTS / Scribe(需自带 API 密钥)
- Mastery queue — needs-practice first; learned cards rare; last 5 mixed with review 掌握队列 — 优先练习未掌握内容;已学卡片出现频率低;最后 5 张卡片与复习内容混合
Live demo (while the host machine is awake): https://vocab.slotify.work/ 在线演示(主机开启时):https://vocab.slotify.work/
MIT licensed. Self-host forever — a later hosted free/paid offering (if any) does not close the source. MIT 许可。永久自托管 — 未来即使有免费/付费托管服务,也不会闭源。
Quick start 快速开始
Requirements: 要求:
- Node.js 20+
- Scriberr running locally (Homebrew:
brew tap rishikanthc/scriberr && brew install scriberr) Scriberr 本地运行 (Homebrew:brew tap rishikanthc/scriberr && brew install scriberr) - LM Studio with an open model loaded (Gemma recommended) and the local server started LM Studio 加载开源模型(推荐 Gemma)并启动本地服务器
Repo: https://github.com/aldorr/chad-vocab 仓库: https://github.com/aldorr/chad-vocab
Stack: Vite + React UI, Hono API, SQLite. MIT license. 技术栈: Vite + React UI, Hono API, SQLite。MIT 许可。
How I Built It 我是如何构建的
Open-source AI is not a bolt-on — it is the grading and photo path: 开源 AI 不是附加组件,它是评分和照片处理的核心路径:
- Gemma via LM Studio — fuzzy answer grading and textbook photo OCR (server/src/lib/lmstudio.ts). Without a vision-capable Gemma load, photo import does not work. 通过 LM Studio 使用 Gemma — 模糊答案评分和教科书照片 OCR (server/src/lib/lmstudio.ts)。如果没有加载具备视觉能力的 Gemma,照片导入功能将无法使用。
- Scriberr / Whisper — local speech-to-text fallback when no ElevenLabs key is on the account. Scriberr / Whisper — 当账户没有 ElevenLabs 密钥时的本地语音转文字备选方案。
- Optional ElevenLabs — per-account encrypted API key on Progress for accented word audio and faster Scribe STT. Chad can add his own key; the open path still works without it. 可选 ElevenLabs — 每个账户在 Progress 上加密存储 API 密钥,用于带口音的单词音频和更快的 Scribe STT。Chad 可以添加自己的密钥;即使没有它,开源路径依然有效。
- Demo hardening for the challenge — REGISTRATION_ENABLED=false on the public tunnel, a seeded chad login with an English→Polish starter deck, branding as Chad Vocab. 针对挑战的演示加固 — 在公共隧道上设置 REGISTRATION_ENABLED=false,预置一个带有英语→波兰语初始卡组的 chad 登录账号,并以 Chad Vocab 命名。
Why Does Open Innovation Matter? 为什么开放创新很重要?
Chad’s practice data should not need to leave the house. Local Gemma means: Chad 的练习数据不需要离开家。本地 Gemma 意味着:
- spoken answers and textbook photos stay on the laptop 语音回答和教科书照片保留在笔记本电脑上
- no paid cloud model required to practice 练习无需付费云端模型
- we can swap models in LM Studio without rewriting the app 我们可以在 LM Studio 中更换模型,而无需重写应用
- anyone can clone the MIT repo and run the same stack 任何人都可以克隆 MIT 仓库并运行相同的技术栈
A closed API would be easier for a weekend demo URL. It would also send a friend’s language practice to someone else’s server. Open-weight inference is what made “build it for Chad, keep it private” possible. 对于周末演示 URL 来说,使用闭源 API 会更容易。但那会将朋友的语言练习数据发送到别人的服务器上。开源权重推理使得“为 Chad 构建,保持私密”成为可能。
Prize Categories 奖项类别
- Best Use of Gemma — local Gemma for fuzzy grading and textbook photo extraction Gemma 最佳使用奖 — 使用本地 Gemma 进行模糊评分和教科书照片提取
- Best Use of ElevenLabs — optional per-account TTS / Scribe ElevenLabs 最佳使用奖 — 可选的按账户 TTS / Scribe