ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
공식 독일 시민권 시험 460문항을 영어로 설명하고 361용어 사전·시간제한 모의고사 제공, 오프라인 작동
All 460 questions of the official German citizenship test, explained in English — with a 361-term glossary and a timed mock exam. Works offline.
교육JavaScript · CSSGitHub @JadRizk온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기All 460 questions of the German citizenship test, with English explanations of every civic term. Free, offline PWA, no ads, no account, no tracking.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗All 460 questions of the official German citizenship test — with English explanations.
No build step, no server, no account, no tracking. Open it and it works, including offline.
[!NOTE] Not a BAMF service and not officially endorsed. The questions are the official catalogue; the English explanations are a study aid and are not part of it.
The full official catalogue: 460 questions — 300 general, plus 10 for each of the 16 federal states. The exam you sit draws 33 of them.
Everything sits in one menu, the same on every page: Practise, Learn, and Settings, which stays folded until you open it.
| Practice | One question at a time with immediate feedback, tracking what you have already answered. Narrow it to questions you have never seen, or to ones you keep getting wrong. A right answer moves on by itself; a wrong one waits, because that pause is where the learning happens. |
| Browse | Read straight through the catalogue without being quizzed. |
| Exam | 33 questions under real conditions: 30 general and 3 from your state, nothing marked until you finish. 17 correct is a pass. Runs full screen as its own route, so the back button leaves the exam rather than the app, and past scores are kept. You can also draw from only what you have already answered, or from a range of catalogue numbers — handy while working through the catalogue in order. |
Three ways to understand the questions rather than memorise them.
| Glossary | 361 German civic and legal terms, each with a plain-English explanation, searchable in German or English. |
| Who elects whom | A chart of who elects, appoints and scrutinises whom — Bund, Länder, Kommunen and the EU. Each body keeps the German name the questions use, with its English name beneath. Every box and arrow opens the catalogue questions behind it, and your state's own labels (term, voting age, what the head of government is called) are read from its ten questions. |
| How it happened | The history questions on one timeline: 27 events from 1933 to 2002, which between them answer 77 of the catalogue's questions. The line splits into West and East Germany in 1949, the Wall fills in between them from 1961 to 1989, and the two join again in 1990. Each event opens to the questions it answers, with their answers and the wrong option it is most easily confused with, and shows how many of them you already know. |
Open the link and use Add to Home Screen. It then launches like an app and works with no connection.
On a first visit it quietly caches all 38 question images in the background, so a randomly drawn exam still has its pictures when you are underground. That is skipped if your browser reports a metered or very slow connection.
Your progress is stored in your own browser (localStorage) and goes nowhere else.
Reset progress in Settings clears it.
The app makes no network requests of its own: no analytics, no tracking, no telemetry, no backend. It fetches only its own files from its own origin — the typeface included, so no visitor IP reaches Google. The English subtitles ship with the app as one more file, so no question is ever sent to a translation service.
Open an issue. Wrong answers, confusing explanations and bad glossary entries are all worth reporting.
Plain static files, served straight from the repository root. No build step, no dependencies,
no bundler: git push is the deploy.
index.html | The shell — markup only |
tokens.css | The colours both pages share, light and dark |
app.css | All the app's styling, and the self-hosted @font-face |
app.js | The practice app, an ES module, ~1,300 lines |
data/questions.json | The 460-question catalogue |
data/glossary.json | 361 German→English terms, a study aid |
data/hooks.json | One memory hook per question — derived, fetched after the page loads and never waited for |
data/questions-en.json | English subtitles for every question and answer, with German↔English phrase pairs — written once for this app, fetched after the page loads |
organigramm.html .css .js | Who elects whom — the chart page, its own route; reads the same two data files |
timeline.html .css .js | How it happened — the history questions on one timeline, from data/timeline.json |
nav.js nav.css | The menu every page shares: Practise, Learn, and Settings folded away |
grade.js util.js | The grading rule and the small helpers the pages share |
img/ | The 38 question images, fetched only when a question needs one |
font/ | Archivo variable, latin subset, self-hosted |
sw.js | Service worker — offline support and caching |
source/ | The original inputs, for reference only |
The data is fetched at runtime rather than inlined, so a change to the styling does not make returning visitors re-download the catalogue. First load is 95 KB over the wire.
There is a single set of controls in the markup; CSS decides where it lives. Below 62rem it is
a drawer behind the menu button, above it a permanent left rail that the same button collapses.
The chart and the timeline carry the same menu, always as a drawer, so they keep their full width.
The answers use position: sticky rather than being pinned: a short question has no gap above
them, and a tall picture question still keeps them on screen. Progress is a bottom sheet on a
phone — shut or open, no half-way — and the bar across the bottom on a wide screen. The 310-cell
grid is wide-screen only, where 9px cells read as one glanceable image; at a thumb-sized 26px it
would be two dozen rows of squares saying less than the numbers above it. Each cell sits on one
scale from red through an even grey to green, set by right answers minus wrong ones, so the grid
shows what you know well and not just what you have seen. A miss turns any question red; the next
right answer makes it even, and the one after gives back its green. Red cells are slashed and the
even cell carries a dash, so none of it rests on colour alone.
sw.js serves the shell network-first, so a deploy reaches people on their next reload with
no cache-busting needed; bump VERSION in it when the shell changes.
data/*.json is stale-while-revalidate, so a catalogue revision arrives on the visit after
next.
Everything in font/, img/ and icon/ is cache-first and assumed immutable — give a
file a new name if its bytes change.
The icons in icon/ are flat placeholders.
They are not the same thing, despite the names. The shipped data/glossary.json carries a rx
field per term — a match pattern with German word boundaries — and 89 of the 361 entries list
inflections that exist nowhere else:
Ministerpräsident → Ministerpräsidentinnen | Ministerpräsidenten | Ministerpräsidentin | Ministerpräsident
Those cannot be derived from the plain source file; they need German morphology. They also earn their keep: of the 2,235 glossary matches across the catalogue, 542 are inflected forms.
Regenerating data/glossary.json from source/einbuergerungstest-glossar.json would delete all
of that silently — no error, no crash, just terms quietly ceasing to underline.
Questions and images come from the Bundesamt für Migration und Flüchtlinge (BAMF), „Gesamtfragenkatalog zum Test ‚Leben in Deutschland' und zum ‚Einbürgerungstest'", dated 26 May 2025 — an official work under § 5 UrhG.
Licensing is split, because the exam content is not mine to license:
| Code and glossary | MIT |
| The typeface, Archivo | SIL Open Font License 1.1 |
| The catalogue and its images | LICENSE-CONTENT.md — their § 5 UrhG status, and the attribution and no-modification duties that come with reusing them |
This is not a BAMF service and carries no official endorsement. The English explanations are a study aid and are not part of the official catalogue. The catalogue is revised from time to time — check the date above against the current official version before trusting it, and sit the real thing on the official materials.