Technical articles about the product decisions, generation pipelines, and infrastructure behind a German grammar learning platform.
The real question was not "How do I build a German learning app?" It was: where is there a repeated, high-stakes need for much more grammar practice than the market usually provides?
Read article →A grammar gap-fill exercise looks deceptively simple. A short text, a few blanks, four options per blank. But what separates a useful exercise from a weak one is usually the quality of the wrong answers.
Read article →The interesting part of the generation pipeline is not only the prompt. It is the operating model around the prompt — throughput, resumability, and cost discipline.
Read article →After a grammar section contains enough material, a new question appears. Are these genuinely different exercises, or just many versions of the same one? Off-the-shelf sentence embeddings were not especially useful here.
Read article →Once the similarity pipeline became part of the operating routine, local execution stopped being attractive. A cheap remote CPU instance proved to be a better place for this than a laptop.
Read article →Even a reasonably diverse section can feel repetitive if similar exercises appear back to back. A learner does not experience the corpus as a similarity matrix. A learner experiences it as a sequence.
Read article →The product is organised around narrow grammar sections rather than broad lessons. That changes the retention logic. The campaign system is section-based — every completion event can create or update one schedule for one user and one grammar section.
Read article →A breakdown of the technologies used across the learner-facing app, admin dashboard, content generation pipeline, and similarity analysis system — and what I would probably do differently.
Read article →SEO is not a content problem first. It is a rendering, routing, and deployment problem. A plain React SPA is not SEO-ready by default — here is what went wrong and what I would do differently.
Read article →