Skip to content

In the Original One Rails monolith, four language-model passes, and a certified audio pipeline.

A live Rails application that lets self-directed adults read real German literature years before a conventional course would let them. Language and speech models do the work that needs linguistic judgment. Rails owns everything that has to be true — workflow state, validation, publication, personalization, cost, access, and recovery when a provider is confidently wrong.

Grant recipient
In the Original reader showing a German literary passage with a phrase translation and inline contextual glosses.
Goethe, with the original intact and the help beside it.
  • A durable Rails system

    Resumable workflows, row-level claims, progressive publication, operator repair, and access rules that survive provider failure.

  • An evaluated AI pipeline

    Six processing passes — four language-model, one deterministic, one speech — with expert-designed fixtures, structural validators, cost evidence, and pass-specific model choice.

  • Audio that must prove itself

    Timestamped speech is aligned and certified by independent code before it can make a section reader-ready.

If you are scanning

What this project is evidence of

Rails product architecture

A domain model separating book, processing section, learner-language adaptation, and per-reader projection — so a second learner language never re-pays for the source-language analysis. Around it: durable workflow state, progressive publication, transactional entitlements, operator repair. The reader itself is Hotwire — Turbo Frame chunk replacement, Stimulus prefetch, and frame-synchronized audio highlighting — not a second front-end application.

Applied-AI engineering

Models get narrow semantic jobs; deterministic code decides whether the result counts. Every provider boundary records evidence, cost, and provenance, with repair proportional to what failed.

Domain expertise that makes evaluation possible

Native English, C2 German, professional German-to-English literary translation. A model can produce fluent German analysis that is wrong in context. Deciding which is which is the job, and it needs someone who has mastered both languages to steer the process.

Production judgment

Queue isolation, row claims, idempotent paid calls and payment webhooks, certified audio, explicit approval boundaries, and a candid account of what is weak. The stack is Rails; the specific challenges — durable state around unreliable work, idempotency where money moves, evaluation for probabilistic components — are not.

System context diagram Readers and operators use a Rails application backed by PostgreSQL, with Redis feeding separate general and audio Sidekiq worker processes that call the OpenRouter language provider and the ElevenLabs speech provider. Storage, payment, email, and error reporting are smaller managed services. All processes are deployed on Render. Render — web, database, queue, worker processes Readers Operators Rails web ERB · Turbo · Stimulus Avo operator surface PostgreSQL product state workflow state cost + provenance Redis queues only Sidekiq general workers Sidekiq audio workers OpenRouter language models ElevenLabs timestamped speech Managed services Active Storage / B2 · Stripe · Postmark · Sentry reads + writes product truth workers write evidence back to PostgreSQL
Asynchronous work is spread across processes. Authority stays concentrated in the Rails domain model and PostgreSQL.

One Rails 8 monolith on PostgreSQL. Sidekiq runs general and audio work in separate processes; Redis carries queues, not product truth. Turbo and Stimulus add interaction without making the reader a second application. Processing, publication, reader state, payment, and repair share transactional boundaries — splitting them into services would add distributed consistency problems exactly where PostgreSQL is doing valuable work. The criterion for splitting one out is its own ownership, deployment, or scaling boundary. Nothing here has crossed that line yet.

Accounts, teams, invitations, and role primitives come from Bullet Train and Devise. OpenRouter routes pass-specific language models, ElevenLabs produces timestamped speech, Stripe handles payment, and Avo gives operators a real inspection surface. Custom engineering went to the reading domain, not to commodity infrastructure that a mature service already solves.

The product problem

Real literature was always saved till last.

I began serious language learning as an adult because I wanted access to difficult books in the original. The usual sequence put that years away: vocabulary, then grammar, then simplified texts, and only eventually the works that made the language worth learning.

Spaced repetition, the shadowing technique of Prof. Argulles, Ilya Frank editions, and professional literary translation each solved part of it. None made a new literary text adapt itself to one reader’s knowledge.

Read why I left corporate Rails to build it →

What I decided not to build

  • Drills around the text convert literature into a study product; attention leaves the narrative, which is the failure the product exists to prevent.
  • Whole-paragraph translation removes the productive struggle — the reader stops engaging with the original.
  • Fixed annotated editions are too easy for one reader, insufficient for another, and stale as soon as the reader learns.

The solution began to take shape: keep the original intact, put support at the point of difficulty, then let it recede.

The product bet

If a reader can understand enough of a real text without constantly leaving it, wanting to know what happens next becomes the engine of learning.

That is the hypothesis. The application is instrumented around activation, active reading, continued pull, retention, and cost. The next evidence has to come from reader behavior.

The same German passage at beginner level of adaptive language support.
Beginner
The same German passage at developing familiarity level of adaptive language support.
Developing familiarity
The same German passage at lightly supported level of adaptive language support.
Lightly supported
The destination is not a better annotated book. It is the original text with less interruption.
Contact

Get in touch

I’d be glad to talk about the system you’re building, the trade-offs you’re facing, and where Rails and applied-AI engineering can help.

The production repository is private, but I’m glad to walk through any of this directly — the workflow model, the evaluation harness, or the audio alignment work — including reading the source together.

Based in Bottrop, Germany, with a Niederlassungserlaubnis — permanent residency and unrestricted work authorization, so there is no sponsorship to arrange. Looking for a full-time Rails / applied-AI role: remote within Germany, hybrid where that means travelling a few times a year, or elsewhere in Europe already set up to employ from Germany. Conversations in German or English.