Index
Introduction
I like to read papers, and to avoid spending more time on a computer, I decided to start reading them on an e-ink device. I dreamed about a large A4-size device, but before committing, I realized that reading them on my Kindle Paperwhite was only painful because of the PDF format and the typical research paper standards (e.g., two-column layout).
The online conversion from PDF to EPUB was poor, so I built a small tool to convert papers to EPUB optimized for Kindle-like reading. It started as a quick script, but it became much more useful after tightening the quality around math, image handling, and structure.
The project is open source here: pdf-to-epub.
For usage and setup details, check the README in the repo. The simplest conversion command is:
python pdf_to_epub.py https://arxiv.org/pdf/2511.10395I hope it is useful to people with e-readers in general: Kindle, Kobo, Boox, etc.
How it works
The conversion pipeline is short: OCR the paper, normalize markdown artifacts, then generate EPUB.

The feedback loop breakthrough
I've been using it for 6 months, and it was ok. I accepted the many mistakes in it, because it was still better than the online version. Nonetheless, since I'm exercising my skills in generating feedback loops for AI-assisted development, I picked this project to improve.
Instead of trying one paper, patching once, and hoping it generalizes, I used a benchmark set of papers with different failure modes (two-column text, equation-heavy content, image-rich pages). Then the cycle became:
- run benchmark
- Inspect concrete failures
- patch a focused part of the converter
- rerun and verify no regressions
AI assistance became much more effective only after this loop existed. Without strong feedback, AI suggestions are often plausible but shallow. With a benchmark and explicit pass/fail signals, iteration became fast, objective, and cumulative.
The AI tool I used, Codex, created the benchmark, requested clarification about quality criteria, and iterated until it was performing well on it.
Having a long-running agent in a task is amazing, and excludes me as the bottleneck for quality assurance.