Live 2025

Interlinear

An AI language tutor that corrects you by the kind of mistake, not just right or wrong

Most apps just tell you that you are wrong. Interlinear tells you what kind of wrong, and teaches to it.

Diagnosed

Mistakes by type

grammar, vocabulary, or syntax, each with its own fix, not just right or wrong

Real morphology

Not pattern matching

CLTK + Stanza for Latin, ensk.is for Icelandic

Any text

Becomes practice

exercises, dialogs, and vocabulary at your level

Every language app treats you as one level. It gives you a placement test, files you under a label, and feeds you content for that label until you test into the next one. But nobody is one level. You can read fine and still fall apart in the past tense, and what actually grows a language is input pitched just past what you can already do. Most apps cannot find that edge, let alone stay on it.

Interlinear is built around that gap.

Read, Then Look Up

You read real text and tap any word for its meaning and a native pronunciation. The words you look up save themselves, so your vocabulary is what you reached for, not a list someone handed you.

Wrong, by Type

Then you talk to an AI tutor that stays in character. When you slip, it names the mistake by type (grammar, vocabulary, or syntax), explains why, and keeps the conversation going. Wrong, try again is a slot machine. Knowing which kind of wrong is teaching.

The Target Moves

A placement conversation sets your starting level, but the point is never to hold you there. Every text, prompt, and correction is pitched a little past what you have already shown you can do, and varied around it.

Architecture

Interlinear architecture diagram

The tutor runs as a set of typed LangChain graphs (lib/ai/graphs): a turn graph for live conversation, an onboarding-assessment graph that reads a short conversation to place you on the CEFR scale, and a content-generation graph that turns a reading into exercises, dialogs, grammar notes, and vocabulary at your level. Model calls go through a provider-agnostic layer, so the same graph runs on any LLM backend and switches providers with a config change.

Error analysis is the core. Tutor feedback is classified into three categories (grammar, vocabulary, syntax), and each triggers a different response, the same way a production LLM eval separates a retrieval failure from a reasoning error from a formatting slip. CEFR is the coordinate the system places you at; a difficulty mapping then pitches generated content just above it rather than locking you to the rung.

Classical languages get real inflection analysis instead of string matching. A dedicated FastAPI microservice wraps CLTK and Stanza for Latin morphology, resolving each form's case, tense, and person as you read it; Icelandic vocabulary and lemmas come from the ensk.is API. ElevenLabs handles TTS, cached aggressively to cut repeat cost.

Today the system places you with CEFR and tunes difficulty per interaction. The deeper version (per-concept mastery: tracking which grammar you have internalized versus which you keep missing, and feeding that into what content comes next) is designed against qortex, my learning layer, and not yet wired in production. The branch that joined them never merged.

Key Decisions

Error type over right/wrong

A binary wrong, try again is a slot machine with educational branding. Interlinear classifies every mistake as grammar, vocabulary, or syntax and responds differently to each, because a typo and a misunderstood case ending need different teaching.

Just past what you've shown

Content is pitched just past your demonstrated level and varied around it, rather than locked to a bucket you happened to test into. The goal is comprehensible input that stays a half-step ahead, not a fixed difficulty you grind until promotion.

Hardest morphology first

Latin gets the attention, fifty-plus forms per noun and conjugations that pass for other conjugations. But Old Norse is the harder case, with arguably more morphophonemic complexity and far less tooling. It is nominally in CLTK and effectively unsupported, so we normalize Old Norse toward Icelandic (a modeling decision in itself), align the forms with Needleman-Wunsch out of the gate, and lean on our own extensions to ensk.is. Get the analysis right there and the rest of the stack has an easier job.

Generate from the text you care about

Point the content-generation graph at a reading you find interesting and it produces the exercises, dialogs, and vocabulary, so the platform becomes the course-authoring tool instead of a syllabus someone else decided you needed.

Where it’s going

The plan is to observe and remember what you get wrong: per-concept mastery, which grammar you have internalized versus which you keep missing, feeding what the system shows you next, so the target tracks each skill independently instead of one fundamentally flawed CEFR level for the whole learner.

The loop is designed against qortex, my learning and memory layer, and not yet shipped: the two systems do not touch in production today. qortex is built to power it once the two are wired together.

LangChain / LangGraph Pluggable LLM backends FastAPI · CLTK · Stanza ensk.is ElevenLabs TTS Supabase Next.js 15 Cloud Run