Six things that made it happen, and the one that didn't.
Earnings for one month after launch.
Written across multiple sessions in May/June 2026.
The decision to make the app was made in August 2025.
The app went live on the App Store on March 10th, 2026 and earned USD 1,230 in first 30 days.
How it all started
From the day I learned to understand what those strange glyphs mean, I am an avid reader. I read books and comics all the time. I love physical paper books, and you won't be surprised I had numerous e-ink devices from all possible manufacturers in the past. And I read on iPhone and iPad.
If you ask me, what I am reading right now, you can bet I have multiple books in progress.
Lately (meaning late few years), I completely went from eink devices to reading on iPhone and iPad (main reason here was superb contrast).
Through all those years I used all possible apps that were, and are, available for iOS and then for iPadOS. And every one of those has something that did not click with me. Inconsistent UI, large margins while reading, no custom fonts, … always something.
So I was what people would call a switcher. One month I was using Apple Books, the other month something else.
The more I used my phone for reading the more I was thinking about creating my own reading app, just for me to meet my preferences.
And then, in the summer of 2025, I decided to make it happen, because I am also a developer.
Now, if you're a developer too, you're probably wondering why you're reading about my reading habits when what you really want to know is how I earned that money with my first app. You'll get there, but now you also understand why I even started.
And the first thing that made the money happen was…
1. Solving real problems
My aim, in the first place, was to solve real problems I saw using those multiple reading apps. If you read on iPhone or iPad, maybe those will sound familiar:
- I want to set my own margins like I want, and to the edge of the device. Meaning: I want as large space as possible for reading.
- I want to add my own fonts, those I downloaded from the internet
- I do not want to 'add' books into the app, I want the app to use books I already have saved in a folder.
- I want an app that uses metadata and series properly. Meaning: I want the books in a series to be sorted by the order in that series
- I want to lock reading orientation in landscape, while having the phone in portrait (impossible with Apple Books, for example)
- I want filters, sorting, collections and use of tags in my library. Meaning: I want to see my library from different perspectives
- I want proper reading statistics
- I want the app to handle thousands of files
- I want this and I want that
As you can see, (I am repeating myself) my aim was not to create or copy another reading app. I wanted to create an app to solve my own real problems in the first place. Oh, and I totally forgot proper sync of data between devices.
Because I was using multiple other apps, I knew what I loved and hated in those apps. What I loved I included, what I hated I did not include.
And for you developers: I decided to not go cross platform and use Swift and SwiftUI, because I wanted to give users the best (and proper) user experience on Apple devices, which I think is almost impossible to do with (for example) Flutter.
To make a summary of this point: I started with solving my own problems and this gradually changed into solving problems of other people (see point 6).
2. Planning
Even though I knew what I wanted I spent around two months in non-stop thinking mode about what I want, how I want it, why do I want it the way I want it, etc.
I drew multiple sketches, on paper and using Sketch.app on my Mac.
I wrote endless small Swift and SwiftUI test programs, to test every idea I had.
I thought about design, functionality, UI and UX, colors, fonts, simply everything. Even before I wrote first line of code in the final project I knew exactly how the app would look and behave. But of course it looks and behaves slightly differently now, than I initially wanted.
I used AI in this planning time a lot. Analysis, ideas, statistics of different areas of development. My Perplexity account was used to max.
Meantime, I was writing a concrete step-by step plan with milestones along the way (including TestFlight, of course). March 1st was chosen (with a buffer) as a release date. But as you now know, I was not able to make it happen, due to three rejections from Apple.
The summary of this point is simple: I am not executing things when I do not know exactly what, how, when, where and WHY I am going to do this 'thing'. I must have a plan.
3. Commitment
Once I know, what exactly to do, I do it, no matter what. And because I know myself, the plan also includes buffers. I am counting with days I am lazy, I have no brain power, I am ill, or something else. Unexpected things happen all the time.
On the other side, when nothing unexpected happens, I am not ill and have superb brain power I am finishing my tasks sooner than I planned. And this is super positive on my mood and willpower.
This is something I do not only for development, but also for running (as I love to run long distances) and everything else I do and where it makes sense to make a plan and execute it.
To sum this up: In this part of the project I am simply executing things as I planned, but not 100%, because there is …
4. Continuous evaluation
Even thought I am doing what I planned to do I am always rethinking and refining the plan in realtime. New ideas are coming, new problems arise and even though I have a plan, that plan is not set in stone.
I do this on weekly basis, mostly on weekends, when I know there will be no work phone calls or emails (meaning calm waters for thinking about anything else than work).
I am spending few hours thinking about what I have already done and what is planned for next week.
I update the plan, change things (remove, add, move, …) and have a free thinking mode from different angles about it.
Summary of this part is also simple: The main goal is to have updated plan according to reality, that is always changing. And for this, it is very good to have another person, meaning you should…
5. Have a devil's advocate
Have someone who will constantly push you, control you, play with your ideas, have his or hers own ideas.
Have someone who will give you constant feedback of how bad you did what you did. You are not searching for someone who will give you thumbs up every day. No. You want someone who will give you realistic feedback, who is not afraid to tell you how bad this part of software is and who is not afraid to argue with you.
Here I am lucky to have a son, who is not afraid to argue with me about a position of a search field or a color of a button. Kudos to him.
Quick summary: Do not rely completely on yourself, have someone who will not agree automatically with everything you do and say.
But if you want to know, what ultimately moved the needle, it was point 6.
6. Users (feedback)
This will be lengthy point. All the other points above can be executed 100%, but when you have no users, then you really did the app for yourself with no money earned.
My plan included TestFlight from the beginning, because I wanted other real people to test the app before going live. And boy how glad I am I did it and boy how glad I am I started with it three months before release.
I made a webpage with a mailing list and I started looking for people who will be interested in this. Everywhere possible. In the end I got almost 1000 people in the mailing list. Of those 150 were interested in testing. Of those around 50 tested things and of those around 10 people were those ultimate testers that gave me valuable feedback.
I was (and I still am) active at reddit and mobileread forum. I wanted people to know about the app and give me feedback even before the app was released. Again I am thankful for this. I had to swallow a lot of pride.
But I did not end here. One thing I did not mention in the beginning, in the list of those problems I wanted to solved was this one: I wanted something for users to give me feedback inside the app. And not just feedback, but ideas. And as I was thinking about it, a complete roadmap ended up in the software, where users can add ideas, comment other ideas and vote for ideas they want to build next.
When I was preparing this in-app Roadmap, I was thinking: why other apps do not have something like that? With other apps, sometimes I do not even know how to contact the developer with a problem (meaning I uninstall the app).
And with this a side project was born: https://votefirst.app.
Side project, where my son is the author and I am that devil's advocate.
And this is the result of this side project, the summary of all the responses for my reading app:

I won't be able to be responsive and actively update the software, when users won't have a way to contact me as easily as possible.
And I think this last point — adding a roadmap with a feedback — was that needle that ended up in the app being profitable from day one. Because users feel the developer care for the product and for the users.
And see, I even included two em-dashes in the article!
To sum this point up: give users an opportunity for a feedback and value it. No need to use this votefirst app, but it is now battle tested, working and the developer, my son, respects the same principles I do. The ones you just read about.
What did not work FOR ME
As I was thinking about 'how to push the app to more users' I came across website called Indie App Santa. I was thrilled there is a way, that will somehow surely get me users and I even paid for a Growth plan, but in the end I saw nothing meaningful in the data.
Oh, I forgot to mention I am obsessive with data, so I measure everything I can in multiple places.
I am not saying Indie App Santa does not work, the people here are super friendly and helpful, it just did not work for my app, and to be fair, they mentioned it even before we started, that this kind of app is not the one attracting people.
Summary
Now you know what works for me. All those points are complementary to each other, split them separate and I think it will not work.
And this works not just with this small app development, it works for me in all areas in my life I do, be it running ultras, building sauna, making a new project or anything else.
I don't even know now, if I ever mentioned the name of the app itself, so here it is: the app is called justread.app.
And if you are interested why the .app in the name, the answer is simple, just type down justread.app in the url and you are right on the right page, so the name is it's own shortcut.