All Projects
Lexeme

Lexeme

Work in progress

Tap. Guess. Read your books. — lexeme.uk

Related links
iOSAndroid

About

Most people learning a language own a book in it they never finished — usually abandoned in the first thirty pages, because looking up the fourth unknown word on a page costs more than the sentence is worth. Lexeme is my attempt to make that cost close to nothing and then get out of the way, because the book was always the point. It's a calm EPUB and PDF reader for people who learn by reading real books: tap any word for an offline meaning with the conjugation resolved, and it quizzes you before it answers. The lookup is the whole product, so it runs in four steps and three of them work in airplane mode: direct hit in the installed dictionary, then lemmatisation, then form-of resolution through the inflection table — andiamo walks back to andare, accents folded so vado and dissi resolve too — and only if all three miss does it ask the network. The Italian hero pack is 651,002 headwords in 147 MB, built from Wiktionary via kaikki.org plus FreeDict, downloaded on request and verified against a SHA-512 in the catalogue. Twenty-odd other languages get basic offline glosses from FreeDict. Turn on Learn mode and a tap opens a question instead of an answer: four options, one right, three drawn from genuine dictionary meanings that share the tapped word's part of speech — so "to consume" and "to feed" sit next to "to eat" and you actually have to think. Words you save keep the sentence you met them in and the lemma behind them, and export to Anki or CSV. Books come from your own files or from a Project Gutenberg search inside the app; attach an audiobook and the text follows the narration. No account, no analytics, no server holding your library. It's a personal project, built for one reader to finish Italian novels with, and it has never been released — lexeme.uk is a description of what it does, written against the code.

  • Learn mode guesses first — every lookup becomes a four-option question, with distractors pulled from real same-part-of-speech glosses, not a random word list
  • Conjugations resolved offline — direct hit, then lemma, then the inflection table (andiamo → andare); the network is the fourth resort, not the first
  • Your books, or 75,000 free ones — import DRM-free EPUB and PDF, or search Project Gutenberg in-app and pull matching LibriVox audiobooks with it
  • Italian hero pack: 651,002 headwords in 147 MB from Wiktionary (kaikki.org) and FreeDict, with inflection tables, IPA, and GloVe neighbours for quiz distractors
  • 20+ more languages with basic offline glosses via FreeDict; Spanish and French hero packs are built but deliberately unpublished until they're downloadable
  • Words keep their sentence — saved vocabulary carries the form, the lemma, and the line it came from; exports to an Anki deck or CSV with attribution
  • Audiobook read-along — attach MP3/M4A/M4B/AAC, with mini-player, lock-screen controls, and manual sync markers
  • Word-level sync in development — on-device forced alignment (Italian) highlights each word as it's narrated and seeks the audio when you tap one; nothing is uploaded
  • Native text rendering, not a WebView — sepia by default, 13–34 pt, page-flip or scroll, resume per book
  • No account, no analytics, no server — the one optional network call sends a single word to MyMemory when an offline lookup misses

Tech Stack

FlutterDartsqfliteepubxSyncfusion PDFjust_audioONNX RuntimeFirebase CrashlyticsWiktionary (kaikki.org) / FreeDictProject Gutenberg

Category

Education / Reading

Year

2025–2026

Screenshots

Lexeme screenshot 1Lexeme screenshot 2Lexeme screenshot 3Lexeme screenshot 4Lexeme screenshot 5

Changelog

2026-08-07
  • Word-level audiobook sync wired into the reader — on-device CTC forced alignment highlights the narrated word and seeks the audio from any word (Italian, opt-in per book)
  • Alignment refuses to start on a device that can't hold the speech pack, rather than being killed mid-chapter
  • Reader performance — EPUB parsing moved off the UI isolate, chapter measurement cached, cover decoding bounded
  • Fixed the alignment span collapsing on itself over a long listen: 0.88 → 1.97 words per second on the reference book
2026-08-06
  • PDF reading alongside EPUB, end-of-book review, and vocabulary grouped by the book it came from
  • First-run onboarding — three steps, then the library
  • Project Gutenberg rebuilt as a learner-first discovery screen with audiobook crossover, ranking, and shelf caching
  • Opt-in crash reporting and in-app feedback
  • Reader controls to hide the page number and progress bar
2026-08-05
  • Italian hero pack hosting live on lexeme.uk — 651,002 headwords, 147 MB, SHA-512 verified, with download percentage and size
  • Project Gutenberg search and download inside the app, straight into the library
  • Dictionary quality pass — accent folding so inflected forms resolve, essere/avere homographs disambiguated in context, duplicate and empty glosses dropped
  • Reading progress anchored to the top block instead of a scroll fraction, so it no longer walks backwards
  • Android polish — sepia splash instead of a white flash, full viewport width in landscape, platform-honest reading fonts, import picker opens in Downloads
  • Project page at lexeme.uk rewritten as a specification of what's built — no waitlist and no signups; it states plainly that this is a personal project that has never been released
2026-07-02
  • Project site live at lexeme.uk — waitlist, app preview, and offline dictionary packs
2026-06-20
  • Portfolio: expanded description — names Duolingo, LingQ, Kindle, Readest, and others; explains the gap for novel-reading Italian learners
2026-06-19
  • Active development — Flutter ePub reader, offline Italian dictionary, tap-to-translate