ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
Talk in Seoul — Hangul class companion for Pop In Seoul in Springfield, IL. Pronunciation, letter tracing, quiz cards, notices, and homework.
EducationTypeScript · JavaScriptGitHub @TalkInSeoul88OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Hangul class web app
Translation pending
Loading the full README. The saved excerpt is shown below.
Hangul class companion for Pop In Seoul, a Korean market in Springfield, IL.
Students come to an in-person Hangul class at the store, then use this phone-friendly web app to practice at home between classes. It is a warm, simple companion — not a full learning-management system.
Talk in Seoul · Hangul Class @ Pop In SeoulRead the full README ↗Hangul class companion for Pop In Seoul, a Korean market in Springfield, IL.
Students come to an in-person Hangul class at the store, then use this phone-friendly web app to practice at home between classes. It is a warm, simple companion — not a full learning-management system.
Talk in Seoul · Hangul Class @ Pop In Seoul
/batchim) — 20 easy 받침 words. Coral marks the syllable with a bottom letter. Open to every student. Drop batchim-*.mp3 into public/audio/./numbers) — native 1–10, Sino-Korean 1–10, and the tens pattern. Open to every student. Drop number-*.mp3 into public/audio/./conversation) — 10 everyday phrases. Open to every student. Drop phrase-*.mp3 into public/audio/./sound) — ㄹ (reu) / (ri-eul) tap ladder and a ㅂ (beu) / ㅍ (peu) / ㅃ (ppeu) listen-and-pick. Open with or without a class code. New clips are sound-*.mp3. Words that already have a recording reuse that file./real-talk) — counter conversations for Weeks 3–7. Jung is the cashier. Weeks 3 and 4 are free. Weeks 5–7 need full course access.가 ~ 하 through ㅣ 기 ~ 히). A taste-class code does not open Trace. Wobbly strokes are fine. Press Done after any ink and the letter turns green. The doorbell (public/audio/trace-success.mp3) and Jung’s clip start together; his voice plays once and is fetched when the letter appears, not after the chime. The next letter appears shortly after his clip ends. Arriving on a letter does not play it; Hear it does. Done on an empty canvas shows a red X and “Try again.” The finger stroke is half the gray letter’s stem width. Last position is remembered on this phone./progress) — Beginner checklist in the hamburger menu. Each step shows what you learn. Class progress is a filled dot, “Covered in class,” for every step through the week Jung set. My review is the student’s own check. Any class code can open it, including a taste-class code./notices) — reminders Jung posts (title, message, date, optional pin). Newest first, pinned on top. A notice can be for every student or for one course. Needs a class code./homework) — files for the student’s course, grouped Week 1, Week 2, and so on. PDF or photo. Needs full course access. A taste-class code still unlocks pronunciation and notices./admin) — hidden from the student hamburger. Jung unlocks with a password, then:
Menu is a hamburger in the top-left. English is the primary UI language, with Korean labels where they feel natural. Students do not create an account. Without a code they can still use the free app.
Old /lesson and /practice URLs go to Pronunciation.
npm install
cp .env.example .env.local
# set ADMIN_PASSWORD in .env.local
npm run dev
Then open the URL Vite prints (usually http://localhost:5173) on your computer or phone.
Local issued codes are saved to .data/access-codes.json (gitignored) so you can test without Vercel Blob.
npm run build # production build
npm run preview # serve the production build
npm run lint # oxlint
npm test # access-code helpers
Student enrollment is remembered in this browser (localStorage). Issued codes are not stored only on the phone — they live in Vercel Blob in production, or .data/ locally. Student recordings stay in memory for this visit and are never uploaded.
The password is never shipped to the browser. The app checks it on the server.
ADMIN_PASSWORD with a long password only you know./api/admin/login picks it up: Vercel → Deployments → ⋯ on Production → Redeploy (or merge this repo’s next PR). Do not skip the redeploy; env vars are applied at function boot.This is the beginning of the README. Read the rest at the original. Read the full README ↗