yk.camelcase.work

Recent Work

Recent products, built end to end. Each entry names the engineering decision that shaped it, not the feature list.

Every project below started from a real problem. From there the role is the same: product concept, system architecture, implementation, infrastructure, deployment and continuous delivery - each product keeps evolving well past its first release.

Veranda Dialogues - Language practice and exam web service

Veranda Dialogues is a web service for practicing a foreign language through live dialogue with an AI partner, plus a growing set of independent exercise modules - flashcards with spaced repetition, word-order and pronoun trainers, image- and text-driven study modes, and a full exam mode. The exam mode generates complete listening and reading papers with audio and printable booklets, unique per card. Most of the engineering effort sits not in generating content but in making generated content trustworthy enough to print and score.

Problem

A language only starts to feel like yours when you speak it, but a conversation partner at your level, with time and patience, is hard to find - and the exercises in any textbook or app run out long before the learning does. The same gap shows up before an exam like the DTZ: official practice papers are used up fast, and learners end up memorising answers instead of training listening and reading.

Exam paper generationFastAPI, CeleryGenerated-item verificationLLM-as-judgeStatistical quality gatesSpaced repetitionper-mode SM-2Speech synthesis routingper-feature enginesInterface localization17 locales

Architecture

  • The verifier solves, never validates. Shown the answer key and asked whether it holds, the model rationalized broken items into passing. Asked instead to answer the question blind and list every supported option, it caught each one; the verdict then follows mechanically from what it picked.
  • Conservative in one direction only. A false rejection destroys a sound item while a false acceptance merely preserves the status quo, so every error path - unreachable provider, malformed reply, out-of-range answer - returns a pass, and rejection requires both a named defect and high stated confidence.
  • Constraints belong in code. A prompt line capping how often one grammatical category may repeat across gaps was advisory, and was quietly ignored. The model now declares a category per gap and the server rejects the whole sample when the spread is too narrow.
  • Timeouts that already landed. A read timeout means the request reached the engine and is still generating; retrying it starts a duplicate job on a box that handles one at a time. Those failures now fail fast and alone, with generation serialized instead.
  • Forked screens over shared branches. Adding a second exam format by branching the working one put a format already in learners' hands at risk, so the new one got its own service and screen tree behind an explicit never-touch list, verified by diff.

Editron

An API-first text transformation service. Its own web editor is a first-party client of the same public API and is forbidden from bypassing it, which is what keeps the integration surface honest; the processing engine is swappable behind one internal contract, with tenancy, API keys, quotas and usage accounting as first-class concerns, plus a published TypeScript SDK.

Lernklang

A gated listening platform for language learning with a school-facing analytics dashboard. One image, three roles: scheduled work runs as its own container, so restarting or scaling the web app never skips or double-runs a job - and configuration is validated at startup, the process refusing to boot on an invalid variable rather than failing quietly in production.

Herald

Topic-driven news collection, processing and delivery. Deduplication is enforced at delivery, keyed per channel by content hash with URL as fallback over a rolling window, so syndicated and live-updated articles are never sent twice; each article yields three independently produced formats, every one stamped with the exact pipeline version that made it, for reproducibility and cost accounting.

Smaller products and focused experiments are part of the same practice: they let an idea, an interaction pattern or a new workflow be validated quickly, before a larger system is committed to.