Content engineeringconcept

Thai Lessons

Forty-year-old public-domain language curriculum is trapped in scanned PDFs and loose audio files. This is the pipeline that turns it into structured, teachable content.

The classroom problem

The US Peace Corps, FSI and DLI produced hundreds of full language courses over four decades. They are public domain and pedagogically sound — built for adults who needed working fluency in months, not tourists. They are also unusable: scanned PDFs with inconsistent romanization, audio as bare numbered MP3s with no mapping to the text, no index, no search, no way to study one thing twice. The content is not the bottleneck. The format is. This is the same failure mode as every district sitting on a decade of curriculum in shared drives nobody can find anything in.

The design decision

Treat extraction as the product, not as setup work. The obvious move is a throwaway script that dumps text into markdown and calls it done. That fails on Thai specifically: tone marks and vowel diacritics render above and below the consonant line, and every general PDF extractor drops, reorders or mojibakes them. A silent 4% corruption rate across a few thousand vocabulary entries is worse than no site, because the learner cannot detect it and drills the error in. So the pipeline is built as an inspectable tool with a published schema, a validation pass, and a report you have to read before anything ships.

How it works

Four Peace Corps Thai courses — four ebooks, thirteen audio files — pass through a documented CLI into a typed content collection. Every vocabulary entry carries Thai script, romanization and English or it fails validation. Audio is mapped to lesson sections rather than word-timed, because the source has no timing data and inventing it would be a lie about precision. Study state is local-first: a learner on hit-or-miss school wifi should never lose their place to a network call.

What I’d do next

The schema is language-agnostic by design. The same pipeline should absorb any Live Lingua course with a swap of the romanization validator — which is the actual claim being made here, and the one worth testing against a non-tonal language.