ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A complete Slovenian-learning app with a structured A0 → C2 curriculum, built with Expo and
React Native. Runs on iOS, Android and the web from one codebase — offline, no account, no
server.
▶ Try it in your browser — slolingo-slovenian-learning-app.vercel.app
No install, no sign-up. The whole course runs client-side and your progress stays in your own
browser.README 전문 보기 ↗A complete Slovenian-learning app with a structured A0 → C2 curriculum, built with Expo and React Native. Runs on iOS, Android and the web from one codebase — offline, no account, no server.
No install, no sign-up. The whole course runs client-side and your progress stays in your own browser.
Slovenian is a small language with a hard grammar and almost no app support: six cases, a dual number for exactly two of anything, gendered past tenses, aspect pairs, and a clitic cluster that has to come out in the right order. Slolingo is an attempt at a course that takes all of that seriously and is still pleasant to open every day.
A course, not a word list. 78 units and 284 lessons from the alphabet to C2, written as one continuous path. Every CEFR standard the audit declares is satisfied by named content.
The grammar Slovenian actually has. Six cases drilled as declension patterns rather than
as individual words, because nobody memorises miza's genitive separately from hiša's. The
dual as a first-class number. Aspect pairs. Compound tenses composed over a gendered
l-participle rather than tabulated, so the course cannot quietly teach one gender.
A real spaced-repetition model. Every concept — a word, a grammar rule, a verb paradigm, a
declension pattern — carries a memory record: strength, stability, ease, depth, next review.
stability is days until predicted recall decays to the review threshold, which gives a
continuous "how likely am I to still know this" curve. That curve ranks Smart Review; a fixed
interval ladder cannot.
A pattern needs breadth before it counts as known. Eight correct answers about mizo are
not evidence that you know the feminine -a accusative, so a declension concept records which
word and which number each success came from, and will not reach mastered on one word in one
number. The dual is exactly the number a learner quietly avoids.
Nothing is asked for before it is taught. Every sentence, drill and conversation turn is gated on what you have actually met — counted per word, not merely per tag, because authors tag what a sentence is for and not the eleven words it contains.
Adaptive placement. 43 questions that follow you up or down the levels after each answer, so if you already know the basics you reach B1 material in a handful of questions.
Lessons are progression; practice is optional mastery. A unit is complete when its required lessons are — full stop. Mixed practice, recall and consolidation improve how well you know the material and can never move a unit's state, so the two never share a counter. Locking is soft: content ahead is dimmed and still opens.
Two levels, kept apart. Finishing the B1 material and speaking B1 are different claims, so the app reports both and lets them disagree. A CEFR estimate has to be demonstrated across listening and production, not accumulated by pressing buttons — so it says things like "A2+, held back by listening" rather than promoting you for turning pages.
No hearts, no energy, no limits. A wrong answer shortens a review interval. It never stops you learning. Streaks are recomputed rather than punished.
Also: 26 conversation scenes, 25 stories, culture notes, a searchable dictionary annotated with your own mastery, full declension and conjugation tables, mistake tracking with targeted drills, XP that cannot be farmed, achievements, and a daily reminder that knows whether you have already studied.
The listening half of a listening course did not exist on most devices: sl-SI text-to-speech
ships on almost no phone, and the app refuses the obvious workaround, because Croatian phonology
on Slovenian is a confident wrong answer a learner cannot detect.
So 6,853 clips are rendered ahead of time and shipped — every sentence, word, chunk, story line, conversation turn, grammar example, verb form and declined noun the app can put a speaker button beside.
A clip is addressed by a hash of its text, not by a content id. Nothing has to be wired, lines that share words share a clip, and — the half that matters — editing a sentence cannot leave the old recording playing. A stale clip is not a missing clip; it is the app confidently saying something other than what is on screen.
Speaking prompts play a model and ask you to say it back. They are not scored, and the screen says so: there is no Slovenian pronunciation assessment reliable enough to tell a learner they are wrong, and a fake score is worse than none.
The shipped clips are synthesised with sl_SI-artur-medium,
a Piper neural voice trained on the Slovenian ARTUR
corpus, licensed CC BY 4.0. The audio in
public/speech/ is derived from that model and is redistributed under the same terms. The
attribution also appears in the app, under Profile → About.
Three layers, deliberately kept apart:
src/content/ data only — no React, no logic
curriculum.ts 7 stages → 78 units → 284 lessons
vocab/ 614 vocabulary and phrase concepts
sentences/ 1,911 natural sentences, tagged with what they exercise
grammar/ 151 grammar concepts with deep-dive layers
verbs.ts 120 verbs; regular forms generated, irregulars authored
sl-declension.ts five declension classes; noun tables derived, not authored
sl-noun-corpus.ts derives which sentences contain which case form
verb-corpus.ts derives which sentences contain which conjugated form
speech-corpus.ts every line the app can say, addressed by a hash of its text
src/learning/ pure logic — no React, fully unit-tested
srs.ts spaced repetition and mastery bands
sl-mastery.ts breadth requirements for the patterns (case, paradigm)
mastery.ts aggregation, weak areas, per-skill balance, CEFR estimate
answer-check.ts grading, behind a TargetLanguage seam
target-language.ts what is a language fact and what is a grading rule
generator.ts concept + learner state → exercise
session.ts session assembly, ordering, interleaving
eligibility.ts what may be asked for, given what has been taught
backup.ts what a backup is, what a restore must refuse
migrate.ts opening a record written by a different build
src/app/ Expo Router screens
src/components/ ui primitives, exercise renderers
ui/motion.tsx the five things a surface is allowed to do
src/constants/theme.ts every colour, spacing, radius and type token
src/context/ the persisted learner store
src/lib/ platform seams only — audio, storage, files, haptics
Lessons never contain exercises. A lesson declares what it teaches and which sentences it may draw on; the generator builds the exercises from that plus your current state. The same lesson is gentler the first time and harder later.
Paradigms and case forms are found, not tagged. The corpora derive which sentences contain which form by matching token sequences, so writing a sentence makes its forms practisable without anyone annotating anything. A form that could be several slots at once is credited to none of them — Slovenian syncretism is most of the table, and crediting every candidate would read case coverage at up to three times its true value with nothing anywhere to disagree.
src/content/vocab/, sentences to src/content/sentences/ (tagged with the
concepts they exercise).src/content/curriculum.ts.npm test — validateContent() names anything that does not resolve.npm run audit:content — reports where the course is thin.Nothing else changes. That is the point of the architecture.
Language does not have one right answer, so the checker works in layers: exact match, then a tolerated near miss, then wrong with the model answer and an explanation.
A caron is a letter, so the fold is narrow. Slolingo drops the tonemic marks Slovenian
writes only in dictionaries and keeps č, š, ž. koza is a goat and koža is a skin, so a
dropped caron is reported, never forgiven — and the diacritic verdict is reached before the
typo rule, or kosarka for košarka grades as a slipped key and buries the letter.
A typo may never cross a polarity boundary. Slovenian fuses negation into the verb, so
hočem and nočem are one edit apart, the same length, and share four trailing characters. A
generic edit-distance rule graded "I want to" as almost right against "I don't want to" — and
almost lengthens the review interval, so the confusion would be hidden for longer than a
plain wrong answer.
English answers are treated as a comprehension check and accept any equivalent phrasing — except that negation never counts as the word that slides, or "I don't like coffee" passes as its own opposite.
Everything lives on the device and there is no account, which is the right trade until the device is not around.
npx expo start # dev server; press i / a / w
npm test # 1,043 tests — learning logic + content integrity
npm run typecheck
npm run lint
npm run audit:content # coverage and depth report — the definition-of-done gate
npm run audio -- --report # which lines of the course have a recording
npx expo export --platform web # bundles and statically renders every route
Seven stages, A0 → C2, all with real content:
| Stage | Level | Units | Lessons |
|---|---|---|---|
| Sounds, names, and being | A0 → A1 | 11 | 44 |
| Objects, places, and time | A1 → A2 | 11 | 51 |
| Negation, possession, people | A2 → B1 | 11 | 46 |
| Reasons, conditions, and which one | B1 | 11 | 47 |
| Register, nuance, structure | B2 | 12 | 33 |
| Precision, register and discourse | C1 | 11 | 35 |
| Nuance, register and idiom | C2 | 11 | 28 |
78 units · 284 lessons (84 of them optional enrichment that never blocks the path) · 532 words · 82 chunks · 151 grammar concepts · 120 verbs across 316 conjugation paradigms · five declension classes · 1,911 sentences · 26 conversation scenes · 25 stories · 236 drills · 43 placement questions · 6,853 audio clips.
Every figure here drifts with each content commit. Read them from npm run audit:content
rather than trusting this file.
Built with Expo and React Native.
Slovenian audio from the sl_SI-artur-medium
Piper voice (ARTUR corpus), CC BY 4.0.