- build 2025.10
- stack · 5 components
- published 2025-10-23
EasyReader
An Android reading app where the chapter summaries run on the phone instead of calling a server.
- 01Product scope
- Discovery, library, reader, and summary workflow
- 02Reading inputs
- Web chapters, PDF, EPUB, and local HTML
- 03AI mode
- On-device chapter summaries through llmedge
- 04Product focus
- Offline-first Android UX
why it matters
- It's the app that uses llmedge in production.
- Saved state, file import, and on-device summaries in one workflow.
- Four input formats go through one reading pipeline, with reading position kept across sessions.
visuals

engineering notes
EasyReader is an Android reading app: discovery, a library, and a multi-format reader, with the AI feature running on the phone. It’s also where llmedge actually ships.
The app
The main job is reading, and it covers the whole loop:
- finding content and organizing a library
- opening web chapters, PDF, EPUB, manga/manhwa, and local HTML
- keeping your position and library between sessions
- working fully offline
Every format goes through ContentRepository into one pipeline, so the reader doesn’t care where a chapter came from.
The AI part
Chapter summaries run on the device through llmedge:
SummaryServiceloads a local model and summarizes with no network call- the text never leaves the phone
- the summary sits inside the reading flow
Architecture
MainActivityruns the reader, library, explore, deep links, and file pickingContentRepositoryhandles import and normalizing formatsSummaryServicehands off to llmedge instead of putting inference in the UI- Compose, Room, and Hilt give it a normal app lifecycle