Neubook is the third reading app I've built. At some point you have to ask yourself: is the problem that existing readers are bad, or is the problem that I'm just picky? I think it's a little of both.
What bugs me about most EPUB readers is that they try to do too much. Reading modes, annotation tools, social highlights, store integration, reading stats, gamification. I just want to read a book. Neubook strips away everything except the reading experience.
I built it in Flutter with Riverpod for state management. Hive handles local storage — bookmarks, reading position, library. The EPUB parsing was the technical challenge. EPUBs look simple from the outside, but internally they're zip files containing HTML, CSS, images, metadata, and a navigation structure that varies wildly between publishers.
Getting consistent typography across different books was harder than I expected. Each EPUB comes with its own CSS, and some of it is... creative. I ended up applying a normalized style layer on top that respects the book's basic structure but overrides the typographic details — font size, line height, margins. This way every book feels comfortable to read without looking identical.
The thing that makes Neubook my daily reader is the absence of features, not the presence of them. No reading streaks pressuring me to open the app. No social features making me self-conscious about what I'm reading. No store trying to sell me the next book. Just pages.
I know this isn't a product that would work for most people. Most people want those features. But building software for an audience of one is oddly freeing — you can make every decision based on what feels right instead of what metrics say.