ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
Paste any text in 8 languages and practice it aloud. Magic Read scores your pronunciation word by word with speech recognition and drills what you miss.
EducationJavaScript · HTMLGitHub @mgrinyukOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Two standalone, dependency-free HTML mockups built to your stack's conventions
(vanilla JS, showScreen() panels, CSS custom properties, inline <symbol>
sprite, Inter + Noto Sans SC, 700px shell + bottom tab bar). No build step.
Each can be opened directly in a browser and translated into your real
index.html / style.css / app.js.
| File | Screen | Stages |
|---|---|---|
reader.html | Reader | setup → reader → exercises (menu → type 1 / type 2) |
speak-spotlight.html | Speak | setup → practice (listen / record / feedback) → finish |
A dev jump-bar is pinned at the top of each file so you can preview every stage. Delete it on integration (it's clearly marked, as is every demo-only stub).
Paste / Library / Saved tabs; selectable text tiles → Start reading..han.show-pinyin)..han.show-trans).INTEGRATION in the file)togglePlay / runPlay) — replace the interval timer with
Google TTS for the active text + selected voice (VOICES[S.voice]); advance
S.active from real audio sentence boundaries instead of a fixed tick.toggleSlow) — map to TTS speakingRate.{hz, py, en, pos}.
Swap the inline PASSAGE for your tokeniser output (pinyin-pro + your dictionary).saveWord) — Supabase flashcards insert/delete.toggleBookmark) — Supabase saved_texts.LIBRARY / SAVED arrays) — Supabase queries.EX1_TARGET / EX1_BANK / EX2) — generate the
word-order target and the cloze options from the active text.// token (word)
{ hz:'中国', py:'zhōngguó', en:'China', pos:'noun', word:true }
// token (punctuation)
{ hz:'。', word:false }
// passage = [ { trans:'<full paragraph translation>', sentences:[ [token,…], … ] }, … ]
Pronunciation practice ("Spotlight" direction). The big mic is the hero: tap to record, it fills with colour, then becomes a score ring. Per-word colouring, positive burst on a good result, a Finish screen with overall score + a tappable per-sentence recap that updates the score when you re-practise.
onMicTap / onListen) — your Azure speech SDK + MediaRecorder
(and Google TTS for Listen). Replace the fake 2.3s timer.applyScore(result)) — feed Azure's JSON straight in. Expected:
{ score, accuracy, fluency, completeness,
words:[ { text:'中', status:'good' | 'ok' | 'bad' }, … ] }
Azure already returns per-word accuracy — bucket it into good/ok/bad at
your thresholds (the mockup uses 85 / 70).fakeScore() / fakeScore-style synths.:root and mirror your existing reader/speak
palettes (--primary #E5267E, --cyan, --yellow, --good …). Map them onto
your real variables rather than hard-coding colours.#i-… (reader) and #sonic-i-… (speak) — rename to
match your actual sprite symbol ids.renderTabbar() helper.S object per file — easy to lift into
your app.js module pattern.