Commit Graph
19 Commits
Author SHA1 Message Date
georgeandClaude Opus 5 1d5402edc7 Kontraktionen: ask it backwards, as a two-tap word cloud
"hinter + das = ?" with options am / im / uebers / hinters was no test at
all — only one option could start with "hinter", so you never had to know
which article was fused in. The whole level was answerable on the prefix.

Flipped it. The fused form is given and you take it apart:

- The form is shown large ("im"), and you pick the preposition from a word
  cloud, then the article from a second one. Graded on both parts.
- The preposition step is a real question for the truncated forms — im vs
  am, vom, zum/zur — which are exactly the ones that get mixed up.
- The article step is the point: -s means das, -m means dem, -r means der.
  Distractors are always real articles (das/dem/der/die/den), never whole
  contraction forms, so elimination on shape no longer works.
- Feedback names which half was wrong and states the ending rule, then
  highlights the article in the definite-article table.
- The chosen preposition chip is tappable to change before committing;
  backspace does the same on desktop. On reveal the line resolves to the
  correct pair.

Tests: the old flaw is pinned shut (nothing on offer is ever a contraction
form), both choice sets are checked, and a data test asserts the -s/-m/-r
ending predicts the article for all 16 contractions.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Uza6mhTpAvSwMQuFc4Cz8
2026-09-17 07:05:58 +00:00
georgeandClaude Opus 5 047454f23f Wechsel im Kontext: blank the article, make the verb decide, add the rule
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
2026-09-17 06:55:26 +00:00
george f39db3cb86 One-tap grids everywhere, hideable translation/hints, cleaner top and bottom bars
- 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.
2026-07-21 07:27:32 +00:00
george 1444814062 Fix ungrammatical ein-word sentences and the a/the translation mismatch
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).
2026-07-21 07:15:45 +00:00
george c4c28f46ed Daily Practice per section: mixed drills, stricter unlock, tick-and-skip one-tap
- 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.
2026-07-21 07:09:40 +00:00
fightme-cmdandClaude Fable 5 80f7e0eca2 chore: verify cloud push -> auto-deploy pipeline
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 10:02:55 +02:00
george f567555876 Feedback: show the full declension table, not one row
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.
2026-07-17 07:42:56 +00:00
george aa781b72bb Add pinned Daily Practice card + one-tap mode
- 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.
2026-07-17 07:23:36 +00:00
george cc19ea09e0 Add Daily Practice level (all 31 prepositions)
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.
2026-07-17 07:17:13 +00:00
fightme-cmdandClaude Opus 4.8 cd0b6c800d Remove nominative testing, add hideable hints and week streak dots
- 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>
2026-07-14 12:36:08 +02:00
fightme-cmdandClaude Fable 5 d30e213104 Add testable question engine, streak fixes, mobile case grid
- New question-generation engine (shuffle-bag preposition selection,
  per-preposition sentence frames, genitive noun forms) in src/engine.js
- Streak fixes: local-date handling, lapse display
- Footer copy: "Get in touch"
- 2x2 mobile case grid
- Vitest suite (60 tests) covering the engine

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 14:12:42 +02:00
fightme-cmd d30350e7e2 Address feature request emails 2026-07-05 13:08:27 +02:00
fightme-cmd 6805aa5314 Hide footer during practice 2026-07-05 13:01:01 +02:00
fightme-cmd 44fb800b4b Omit payment links when disabled 2026-07-05 12:51:57 +02:00
fightme-cmd 49dc1de769 Add payment launch mode flag 2026-07-05 12:48:27 +02:00
fightme-cmd 28e8ade05f Refine paywall presentation and homepage copy 2026-07-05 10:36:59 +02:00
fightme-cmd 49f78ef6b0 Add premium paywall and core German drills 2026-07-05 10:31:53 +02:00
fightme-cmdandClaude Opus 4.8 960f63dc21 Add Dockerfile + nginx for Coolify deployment
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>
2026-06-17 13:35:06 +02:00
fightme-cmdandClaude Opus 4.8 a198219bc0 Initial commit: Deklinationstrainer German declension trainer
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>
2026-06-17 13:00:57 +02:00