
A few weeks ago I launched a second project, SEO Receipts. It connects to Google Search Console and prints a verified, public receipt of a site's real search traffic — clicks, impressions, position — that nobody can fudge, plus a leaderboard of everyone who's connected. GainFrame's own receipt currently sits at #3 on that board: 4,038 verified clicks in the last 28 days, up 395%, tagged "fastest growing."
A year ago numbers like that were a fantasy I didn't dare say out loud. I looked at the receipt for about four seconds and went back to worrying about whether site number 37 would ever connect.
That reaction is the whole post. I've hit almost every goal I set for GainFrame — first real users, first paying customer, $500 MRR, $1,000 MRR — and I don't think I stopped to enjoy a single one of them. Starting a second app from zero is what finally made me see it. All the GainFrame revenue numbers below are public on RevenueCat's verified page if you want to check them.

The Goalposts I Never Stopped At
Here is the honest sequence of what I wanted, in order, as GainFrame grew.
First I just wanted a few real people to use it and get something out of it. Then I wanted 100 users. Then I wanted one paying customer who wasn't someone I knew. Then $500 MRR. Then $1,000. Every one of those happened. And every time it happened, the feeling lasted about as long as it took to open the next dashboard.
I hit $1,000 MRR on July 12. The exact number was $1,000.04, a margin of four cents. I noticed it in the RevenueCat app while I was doing something else, thought "huh, nice," and then my next actual thought was about churn and whether it would dip back under. I didn't tell anyone that day. I turned it into a milestone blog post later that week, which — I realize now — is a very me way to handle a feeling. Write it up. Ship it. Move the line.

The Trap Has a Shape
The thing I missed for months is that the ladder never ends, and the finish line is defined relative to wherever your feet currently are.
A few users who find it useful. Then 100. Then a first paying customer. Then a number: $500, $1,000, $2,500. Then enough to pay for a vacation. Enough to cover childcare. Enough to quit the job. Enough to retire. It reads like progress, and it is. But at every rung, the goal I was actually chasing was "one rung above this one," and the rung I was standing on had quietly become the new zero.
The clearest version of this for me was revenue. I kept quietly adjusting the exact MRR number that would finally feel like I'd accomplished something. For a while it was $500. The week I got close, it was $1,000. Now it's sitting at $1,061 and the number that would feel like "made it" has already moved up again. It's never the number in front of me. $1,000 MRR was a mountaintop in March. By July 12 it was the floor, and I was already annoyed it wasn't $1,500.
I even did the thing you're supposed to do. In May, when MRR flatlined around $530 and I almost quit, I sat down and wrote my goals out with actual dollar amounts — $2,500/month is "the app pays for childcare," $15,000 is "the quit-my-job number." Writing them down was genuinely useful. But I wrote down the goals ahead of me and never once looked back at the ones I'd already cleared. The list was a to-do, not a scoreboard.
Starting Over at Zero
SEO Receipts came out of a small annoyance. I kept seeing people post screenshots of their Google Search Console dashboards to prove their traffic, and screenshots can say anything. So I built the thing that reads your GSC data directly and turns it into a receipt you can't type numbers into, with a shareable link and a leaderboard. It now also analyzes your site and suggests fixes. It's free lifetime Pro for the first 50 people who connect, because right now I mostly want feedback.

The SEO Receipts leaderboard — 36 verified sites and counting. GainFrame is #3.
And here's what I forgot: being at the bottom feels like being at the bottom. Three weeks in, SEO Receipts has 36 verified sites. I refresh it to see if one more connected. I get a little jolt when the count ticks up by one. I check the analytics on an empty-ish dashboard and feel that specific mix of hope and impatience I had completely lost the memory of.
It's the exact feeling I had in February and March with GainFrame, when I was DMing people in fitness subreddits and chasing every early user for feedback after my first app flopped in silence. I'd forgotten that grind so thoroughly that GainFrame's current numbers had stopped registering as anything at all.
The Number That Used to Be a Fantasy
Here is the part that actually rearranged my head.
GainFrame now adds close to 500 new users a week. I can't give you a clean, single, audited number for that — it's app installs plus web signups, and recent weeks have run hotter than the 30-day average — so read it as "roughly 500," not a promise. But roughly 500 a week is the truth of it right now.
The version of me from May 2025, staring at a TestFlight build nobody had opened, would not have believed that sentence. He would have taken 500 users total, ever, and called it a career. And I get to sit at 500 a week and be so numb to it that I had to start a whole second company at zero to feel the number again.
The part I didn't appreciate at all, the entire climb: very few apps make it this far. Most never get a single paying stranger. Mine has hundreds, and I spent months treating every milestone as evidence that it still wasn't enough instead of evidence that it was working. The problem was never the numbers. It was that "not enough" was the only setting I ran in.

GainFrame's verified receipt: 4,038 clicks, +395%, avg position 8.5. This is what past-me would have wept over. Present-me nearly scrolled past it.
None of this is a flex. GainFrame at ~$1,061 MRR is still small money next to a salary, and the organic traffic that drives it could soften the next time Google reshuffles. The point is the opposite of a flex. It's that I built the exact life-a-year-ago-me wanted and walked right past it because I was already living in the next goal.
What I'm Actually Changing
I'm not going to pretend a blog post cured this. I still can't fully feel the $1,000. The treadmill is the default setting, and "just get to the next number" is a genuinely useful engine for a solo founder with a full-time job and a toddler. I don't want to turn it off.
What I'm doing instead is smaller and more mechanical. Three things.
Write the goal down before you hit it, with a date and a real number. I already do this, and it works — the May goals post is the only reason I can tell you exactly what I was aiming for.
Keep the ones you've cleared on the same page as the ones ahead. My list was all future rungs. Now the ladder above has the cleared rungs on it too, because the whole trap is that you stop seeing them.
When you cross a line, record the date and do one small thing — tell one person, write the number down, take the afternoon. Not because you'll feel it in the moment. You won't; the goalpost has already moved. You record it so a future version of you, standing on an even higher rung and feeling nothing, can look back and see how far the floor has risen.
The receipt sitting at #3 didn't feel like anything the first time I saw it. Writing this is me making myself notice. If you're building something and blowing past your own milestones without looking up, go back and read your old goals. You've probably already passed the thing you swore would be enough.
If you're deep in the grind on your own project and can't remember the last win you actually celebrated, I'd genuinely like to hear about it — and if you run a site, the tool that started this whole reflection is below.
See your own SEO receipt
SEO Receipts connects to your Google Search Console and turns your real search traffic into a verified, shareable receipt — plus a leaderboard and automated fixes for your site. It's free lifetime Pro for the first 50 people who connect, and I'm actively looking for feedback.
Get your SEO Receipt