The level showed the article already in the sentence ("unter dem Stuhl"),
so it was answerable by recognising "dem" — it never tested wohin/wo at
all. And the frame pool was tiny: one cat, one lamp, eight nouns.
- The article is now blanked. The only evidence is the verb and whether it
has a direct object, which is the actual skill. The solved sentence is
revealed on answer, contracted where German really contracts (ins Regal,
am Bahnhof), with a note naming the fusion.
- Frames rebuilt around what decides the case: 27 new nouns, 18 new verbs,
and every frame one-way so no verb+noun pairing licenses both readings.
- Motion verbs now appear on the DATIVE side on purpose — schwimmen im See,
tanzen in der Kueche, spielen auf der Strasse — because "is it moving?" is
the wrong test and that is the main thing learners get wrong.
- The put/be pairs are drilled properly: legen/liegen, stellen/stehen,
setzen/sitzen, plus haengen and stecken, which keep the same present tense
either way so only the direct object tells you.
- ankommen added as the lexical exception: Dativ despite obvious arrival.
- New "Wohin oder wo?" info panel: the rule, the before-and-after test, the
movement trap, the verb-pair table and the exception. Reachable from the
practice screen, from the answer feedback, and from Charts.
- Feedback now explains the specific sentence rather than restating theory.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Uza6mhTpAvSwMQuFc4Cz8
- Possessives, pronouns, and Kontraktionen switch from typed input to the
same 4-choice tap grid as articles. Possessive choices all share the
question's stem; pronoun choices lead with the pronoun's own case forms.
- The translation line is hideable everywhere (shows by default, hidden
state persists like the other hints, revealed again on a wrong answer).
The possessive and pronoun hint lines get hide toggles too.
- Header: Charts moves out; One-tap becomes a pill — plain grey when off,
green outlined when on. More margin below the header across the board.
- Bottom bar: progress dots centered with 'n/10 · level name' underneath,
outlined Charts button (capital C) pinned bottom-right.
- Touch devices hide the 1-4/enter/esc keyboard chips; answer buttons keep
their full size via min-heights so tap targets stay big.
The ein-Wörter level reused sentence frames written for definite articles
and blindly swapped in the ein/eine table, producing non-German like
'trotz eines Wetters' and 'während einer Woche' while the English still
said 'the'.
- Nouns gain a noIndef flag (mass nouns: Wetter, Regen, Musik, Arbeit;
definite-idiom temporal/kinship nouns: Nacht, Woche, Vater, Mutter,
Bruder, Schwester, Tochter). They are never paired with an ein-word.
- Frames with a custom English determiner (nach → 'after school',
seit → 'since that week') are definite idioms and are skipped for
ein-word questions.
- genArticleQ redraws prepositions whose frames are entirely ruled out
(trotz has only mass nouns), instead of generating a bad sentence.
- Indefinite translations now use a/an to match the German article;
definite levels keep 'the'.
- Tests pin all of this down (75 passing).
- One-tap mode no longer shows the answer when you're right: a green tick
flashes and it skips straight to the next question. Wrong answers still
show the full correction and now wait for an explicit Next tap.
- Every tab (Prepositions, Articles, Possessives, Pronouns) gets its own
pinned Daily Practice card. Sessions mix questions from every lesson in
the tab via a shuffle-bag over lesson ids.
- Daily Practice is locked until every lesson in its section has been
passed (one full round at 70%); the locked card shows x/y progress.
- Finishing a daily session offers 'Continue: <section> Daily Practice'
cycling to the next tab with an unlocked daily, with play again and
back to menu as secondary options.
Every answer card now renders the complete 4×4 declension grid instead
of a single case row. The correct cell is highlighted green; on a wrong
answer, the cell matching what you typed is highlighted red, so you see
both your pick and the right one in context.
- FillFeedback (articles + possessives): full table, correct + wrong
highlighting within the noun's gender column.
- ChunkFeedback + ContractionFeedback: contraction questions now show
the definite-article table too, not just the fused answer.
- PronounFeedback: correct cell green, your wrong pick red.
- Daily Practice (all 31 prepositions) is pinned to the top of the
Prepositions tab once the "Alle Präpositionen" lesson is passed
(>=70% over a full round).
- One-tap mode: after answering, the app flashes right/wrong and
auto-advances. Always on in Daily Practice; a persisted "One-tap"
toggle in the practice header enables it for any other level.
New pseudo-level (id 10.5) that drills all 31 prepositions. App.jsx
pins it to the top of the Prepositions tab once the "Alle
Präpositionen" lesson is completed, and defaults it to one-tap mode.
- Remove the Nominativ level and drop nominative-case testing from mixed/
possessive/pronoun levels (nominative kept only in reference charts)
- Add persistent hide/show toggles on the two giveaway hint lines in
practice (noun gender, case/preposition info); state persists in localStorage
- De-spoil "Wechsel im Kontext": remove motion/location hint from answer
buttons; put sentence translation + preposition meaning behind a toggle
- Add a 7-day practice-history dot strip beside the streak counter
- Extend engine + tests (61 vitest tests)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Multi-stage build (node -> nginx) serving the Vite static output on
port 80, matching the dockerfile build pack used for other apps.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Vite + React app for daily German declension practice with
localStorage-backed progress. Includes Coolify deploy instructions.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>