TL;DR: I built a reading app that intentionally lacks "features" (no store, no social, no accounts) and focused entirely on native iOS mechanics and file ownership. Here is why I think the "Universal App" approach is wrong for niche tools.
I’ve been building justRead, an EPUB reader for iOS. The eBook market is crowded with apps trying to be the next Netflix or Goodreads—pushing subscriptions, social algorithms, and proprietary ecosystems.
And AI.
I decided to go the opposite direction. I wanted to build a tool, not a platform. Here are the 3 controversial architectural decisions I made, and why I think they are the right business move for a solo founder.
The industry standard for retention is Lock-in. Apps want you to import books into their database so it's hard for you to leave.
As a solo dev, the logical choice was Flutter or React Native to hit iOS and Android simultaneously. I chose native SwiftUI.
This is a small UX decision that highlights the philosophy. Most apps auto-rotate. I disabled auto-rotation by default.
I’m currently in pre-TestFlight. I’m curious to hear from other devs:
Do you think prioritizing "User Ownership" (no database/lock-in) is a viable moat against major competitors, or am I just making it too easy for users to churn?
Do you think mimicking Apple design UI is better than creating a super-duper UI by yourself?
I wrote a deeper dive on these design choices here: Why We Built justRead This Way
Link to project: https://justread.app
What's the point of AI generated comments?
Why can't your target customers always find your product? - Experience sharing
The exact prompt that creates a clear, convincing sales deck
The hardest part of building in public isn’t shipping.
I wonder how many people have a library of epub's they maintain? If that's a real niche, then almost by definition you have a "moat" against competitors.
There are about 1 700 000 people, who use Calibre for management. I hope those and similar are the ones for me.
I really like this angle — in a world where so many tools try to be everything to everyone, simple focused tools often win by solving one clear pain.
From a dev perspective, the cost of complexity is real: more surface area to break, harder onboarding, higher cognitive load for users. Sometimes the best product is the one that never has 20 features, just the one that works reliably and predictably.
Curious — did you find that focusing on “dumb but useful” actually made it easier to iterate or get feedback from early users (vs trying to build something more ambitious right away)?
Hi mrHarsh, for now I have feedback just from colleague, friend and family. They are all readers, but they are not strangers.
TestFlight is starting in next 14 days, and I hope I will get a constructive criticism to make the app better.
Also, PostHog is implemented from start as I want to iterate the app not by thinking what should be done, but to have real data and stats on what should be done.
I am personally 15 years knee deep in development for factories (manufacturing software), and I am a "data and statistics" man, I simply love data and stats.
So stats will be a big part of this app, but I do not want to overdone it, as I can generate a lot of stats. And that is also why I hope PostHog will help me to sharpen this and get rid of features people do not use or use the least.
And as for your last question: especially in "manufacturing" I find that "the simpler the better" is much more useful that clog the software with a ton of features. People are different and I want to find the least common denominator for people to use the app without thinking about using it.
Have a nice day
PJ
That’s a very grounded approach — especially coming from manufacturing software, where complexity has a real operational cost.
Starting with friends/family for usability, then switching to strangers for behavior signals via TestFlight + PostHog, is a solid sequencing. The fact that you’re explicitly watching what people stop using (not just what they touch once) already puts you ahead of most early apps.
One thing I’ve seen work well in “simple tools” like this is defining a single non-negotiable core action (the thing that must happen repeatedly for the product to exist), and letting PostHog ruthlessly prune everything else that doesn’t support it.
Your framing around least common denominator usage + predictable behavior feels very aligned with that. Looking forward to seeing how the TestFlight data sharpens it.
Hi, thank you for the response, I too am looking forward to TestFlight as this will be my first one and I don't know, what to expect at all.