P / 02 · Language learning · Desktop app

Faseeh

A local-first desktop toolkit that turns videos, articles and books into language-learning material, extended through plugins. Built by a four-person team; I worked on the learning features around the core.

Open source · Team project

Explore repository

Built with a team of four. I designed the first interface, then built subtitle generation, text difficulty estimation and dictionary lookup.

Problem & users

Learners want to study from content they already enjoy, not generic lessons. Faseeh is the framework: a language-agnostic core with a library, video player and text reader, where plugins add adapters, dictionaries and other tools. Learning from real content needs subtitles for videos, a way to judge whether a text is too hard, and instant word lookups.

Implementation

Subtitle engines: a registry keyed by engine ID, a shared abstract engine class with typed options and results, and a direct OpenAI Whisper adapter. Difficulty estimation: detects the text’s language, then combines Flesch-Kincaid and Gunning Fog readability into a 0-100 score mapped to beginner through expert, for English, French, Spanish, German and Italian. Dictionary: detects the word’s language, queries the Oxford Dictionaries API and normalizes the response into one entry type with definitions, phonetics, examples and synonyms. Earlier, I set up the first React and Material UI prototype, with landing, learning and transcription screens and a quiz component.

Engineering decision

Each feature sits behind a typed contract instead of calling a provider directly. Subtitle callers pick an engine by ID and the registry checks it exists and is available; the difficulty estimator takes its language detector by injection so it can be tested in isolation; dictionary failures surface as typed errors such as unsupported language or invalid response.

Evidence

The subtitle registry is on the main branch (commit 5ae68f8). Difficulty estimation and dictionary lookup live on the difficulty-estimator and mouse-over_dictionary branches with Vitest suites. The early UI is in the Faseeh-old repository.

Current limitations

  • Difficulty estimation and dictionary lookup are on feature branches and not merged into the main branch. The dictionary targets the Oxford sandbox API.
  • Lexical density is a placeholder in the difficulty score, so readability formulas carry all the weight. The subtitle work ships one provider adapter.
  • The wider application, including the plugin system, library and players, is the team’s work; screenshots show that app for context.

On GitHub

Faseeh

A free and extensible app to learn any language using the digital content you love.

  • TypeScript
  • 3 stars
  • Updated

Sources

Reviewed at revision 5ae68f8.