Maya needed stitches. Wick had a cough. Benny had a grooming appointment. All in the same week, and I had nothing written down for any of them. Three dogs, three sets of instructions living in my head, and a vet tech asking me when the cough started while I scrolled my camera roll looking for clues.
A few weeks later I was in a vet waiting room with my mom's elderly dog and had no health history to show anyone. Two versions of the same failure in one month. That is usually when I build something.
What I built
CareCadence is a medication tracker and adherence tool. The human version came out of the same moment as the dog version of the problem: adults managing their own prescriptions, and caregivers managing meds for aging parents who cannot always answer "what is she taking and when did it change" from memory in a hallway.
It is a small web app. Reminders, dose logging, a med list a caregiver can actually read, and a prep sheet you can hand a doctor instead of performing the memory test again. Unglamorous software. The category does not need glamour. It needs to work on the worst day of your month.
The hallway moment is the one I kept designing for. Somebody's adult daughter standing outside an exam room, being asked what her father takes and when the dosage changed, holding a phone full of photos of pill bottles taken at different kitchen tables over two years. She does not need a wellness score or a streak animation. She needs the list, dated, readable, in her hand before the doctor stops waiting for the answer.
Then January happened
In January 2026, Medisafe, the biggest name in this category, moved core tracking behind a $10 a month paywall with a free limit of two medications. If you have ever watched a category leader reprice, you know what came next: a wave of people looking for somewhere to go, many of them retirees on more than two medications, exactly the people a two-med free limit squeezes hardest.
Suddenly my little app born out of a bad month in vet waiting rooms had a market event pointed straight at it.
The sentence I refused to ship
Here is where this becomes a build story about marketing instead of code.
The obvious move was to plant a flag that said "the free unlimited alternative." It writes itself. It would have converted. And it would have been false, because CareCadence's free tier caps at three medications. The paid tiers exist because interaction checking and caregiver sharing cost real money to run, and I would rather charge for those than quietly degrade the free product later, which is the move I just watched a competitor's users get burned by.
So the framing rule became: say the cap out loud, every time. Free tier, real and useful, three medications. If you are managing more than that, you are the paying customer, and the price is on the page. A capped free tier stated plainly beats an unlimited one with an asterisk growing inside it.
My own automated content system flagged this the hard way. A queued post about CareCadence went out for review with a "stayed free" angle, and it got killed in editorial for exactly the reason above (the free tier has a cap, and my own pricing page says so). When your marketing pipeline can contradict your checkout page, one of them is lying. Fixing the copy is cheaper than fixing the trust.
The 500 that was actually 19
One more confession, because Dev.to is where I keep the receipts. In August I audited the app's marketing surfaces against production data. A checklist page claimed "Used by 500+ patients and caregivers." The actual user count in the database that morning was 19.
The claim was aspirational boilerplate that slipped in during an early build pass and never got challenged. It came down the same day. The functional description stayed, because the feature is real even when the crowd is small. Nineteen people tracking their meds deserve a page that tells them the truth.
Treat marketing claims like assertions. Run them against production. A claim you cannot back with a query is a bug, and it will ship itself if you let it.
What I would do differently
Write the pricing page before the landing page. Every dishonest sentence I almost shipped came from writing the exciting copy first and reconciling it with the actual product later.
Put the free-tier cap in the first screenful, on purpose. The users who leave when they read "three medications free" were never going to pay, and the ones who stay convert calmer, because nobody feels ambushed at the paywall.
And audit copy against the database on a schedule, the same way you run tests. My user counter and my marketing page disagreed by a factor of 26. The database was not embarrassed. The page should have been.
Top comments (0)