Technical articles about the product decisions, generation pipelines, and infrastructure behind a German grammar learning platform.
For every 100 exercises generated, only 41 end up usable. That number emerged from three consecutive generation batches. The exercises that survive are good. The process to get there is expensive in content, not in cost.
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 →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 →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 →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 →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 →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 →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 →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 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 →