I've documented a lot of honest zeros on this blog. The journal that sold nothing. The print shop with two lifetime sales. The blog itself, still at $0 revenue.
So here's the plot twist I don't talk about enough: the one side hustle that actually makes money — consistently, with real subscribers that grow month over month — is the one I built without knowing how to code. Twelve exam-prep apps, now all living at unlimitedpracticeguide.com.
This isn't the money post — I'll do that scorecard another day. This is the honest build story: what I used, what broke, and the mistake that nearly buried the whole thing.
What they actually are
They're practice-test apps for people preparing for pharmacy and nursing licensing exams — the MPJE, the NCLEX, the PTCE, and nine more. Someone studying to get licensed drills practice questions, tracks progress, and walks into the real exam less terrified. That's the whole product.
All twelve now live under one roof at unlimitedpracticeguide.com. The original standalone sites — like the MPJE and NCLEX ones — still work and route into the main platform, so nothing I built early got thrown away. It just got consolidated. (More on why that consolidation nearly killed me below.)
Where the questions come from
This is the part that actually matters, and it's the credibility question anyone in this space should ask.
The practice questions aren't scraped from the real exams — that would be both wrong and useless. They're built from the source material candidates are actually tested on: state board of pharmacy regulations, official licensing guides, and public government resources. The Tennessee Board of Pharmacy. The North Carolina Board of Pharmacy. The actual laws and rules a pharmacist has to know to practice in a given state.
That's why the MPJE apps work at all — it's a law exam, and the law is public. I'm not selling stolen questions. I'm turning dense, official regulation into something you can actually study against.
The stack
Boring and short, like the tools post from earlier this week:
Replit — the $90/month Pro plan, and yes, I lean on their free days and discount days whenever they come around to shave the cost. This runs all twelve apps.
Claude — my build partner. Not just for code. It's where I organize the ideas, work out the prompting, structure how a feature should work before I build it, and debug when something breaks at 11pm. A stay-at-home parent with no formal coding background does not ship twelve web apps without something like this.
Stripe — payments and subscriptions. Which brings us to the pain.
What broke: Stripe webhooks
If you build anything with recurring subscriptions, learn this word early: webhooks.
A webhook is how Stripe tells your app what just happened — "this person paid," "this subscription renewed," "this one cancelled." Your app listens for those messages and grants or revokes access based on them. When they work, they're invisible. When they don't, someone pays you and gets locked out, or cancels and keeps access, or the whole thing throws an error and takes the site down.
Mine took the site down more than once. Stripe webhooks have been, by a wide margin, the single most fragile part of this entire build — the thing I've re-debugged the most times and trusted the least. If I could give one warning to anyone building a subscription app, it's that your webhook handling will break in ways you didn't imagine, and you should build it far more defensively than feels necessary.
The mistake that nearly buried me
Here's the real lesson, and it cost me months.
I started build-as-you-go. The MPJE site first — just make it work, figure it out live. Then I did the NCLEX one the same way. Then the PTCE one. Each was its own little standalone build, glued together by whatever I'd learned that week.
That's fine for one app. It is a nightmare for twelve.
When I finally consolidated all twelve into a single platform, I had to migrate a pile of separately-built, inconsistently-structured sites into one coherent system. Every shortcut I'd taken early came due at once. The big build and the migration were brutal, precisely because I hadn't architected for "many" from the start — I'd architected for "one," eleven times.
If I did it again, I'd build the platform to hold many exams from day one, then add each exam into that structure. Not build twelve separate things and try to merge them later. That's the expensive lesson, and I paid it in full.
Why this one works when the others don't
I've spent this whole blog debunking "easy money" — the pins promising six figures from one product, the journals that sell nothing. And here's the thing that ties it all together:
The exam-prep apps are the opposite of easy money, and that's exactly why they work. They solve a specific, painful, real problem — passing a licensing exam that stands between someone and their career — for a specific, motivated audience who will happily pay to not fail it. It's not passive. It's not glamorous. I figured most of it out by breaking it and fixing it, over and over. But it's the one thing in my whole hustle portfolio that consistently earns and consistently grows.
That's not a coincidence. The boring, hard, specific thing is the one that pays. It usually is.
The honest summary
Twelve exam-prep apps, built by someone with no coding background, on Replit, with Claude, held together with hard-won lessons about webhooks and architecture. It broke a lot. It still isn't finished. And it's the best-earning, most consistent side hustle I've got.
If you're building something like this: architect for scale before you need it, treat your payment webhooks like they're actively trying to ruin your weekend, and pick a problem real enough that people will pay to make it go away.
Building software with no formal background? What's the thing that keeps breaking for you? Hit reply or drop a comment — misery loves debugging company.
Leave a comment