How I prepared to launch and promote my parenting app

May 23, 2025

Hello, and welcome to another Friday! Hope you had a good week, and that you were able to accomplish the things you set out to achieve. I had a pretty good week! I managed to accomplish a lot, stay on top of my weekly notes, AND soft launch my app, though not without some hiccups.

Paywalling with Stripe is fun

I started off my week by working on the paywalling for my sticker chart app. I am using Stripe for payments, and luckily Stripe has a pretty robust API and developer support, so it wasn’t hard to get things hooked up.

I went with an API endpoint in my web app that gets called by a webhook destination in Stripe. The webhook stuff was pretty straightforward to set up, and it didn’t take long for me to have the paywalling completely implemented and tested locally. It helped that I had some existing code to work off of, but it still wasn’t super difficult. I did run into some issues initially with getting the webhook to work properly once I deployed things to the live site, however after some troubleshooting I realized I only needed to prefix my destination with “www.”

Setting up offline access and collecting feedback

One of the features I have been planning for is the ability to use the app completely offline. This would mean that parents who are out somewhere with no Internet connection could still use the sticker charts for their kids, and then those changes would be synced back to the DB once they were back online.

I started working on this in earnest Tuesday morning. I figured it would probably not be a huge endeavor. I would just need to turn the app into a Progressive Web App (PWA), do a bit of caching with the DB stuff, and voila. I couldn’t have been more wrong.

Setting up the PWA part was easy enough, as was implementing the caching stuff, but I realized that my current pattern for loading data on the page and passing it to client components wasn’t conducive to some of the stuff I needed to do on the client to fully support offline functionality. I spent a couple of days on this this week before realizing that I wasn’t going to be able to have offline mode completely done before my planned launch on Friday. So, it remains unfinished, and I have updated mentions of it on the site to say that it is coming soon. I’ll pick it back up after the launch! It feels like I’m really close.

I also finally got around to implementing the feedback form this week so that new users can submit bugs or other feedback they have while using the app. I had implemented an identical form in Time Protector, which just sends me an email with the information provided by the user, and tried to just copy it over to the new app. However, as I mentioned recently, I switched my email stuff over from Resend to Forward Email, and so I needed to update my email send code to use that instead. Forward Email doesn’t have its own library the way Resend does, and I struggled with getting their API to work the way their documentation reads, so I ended up just adding nodemailer to the web app and am now using it to send the email via SMTP.

What happened when I ran into a show-stopper

With the ability to provide feedback implemented, I felt like the app was pretty much ready for its soft launch. It was time to attract some users! Unfortunately while doing some late testing Thursday afternoon, I discovered that I was now getting an error when trying to log into the app via emailed magic link.

n error message on a dark background reads: "Something went wrong. There was a problem when trying to authenticate. Please contact us if this error persists. Unique error code: Configuration."

This was super confusing, as I had not previously had any trouble with this. I discovered that it seemed like the Auth.js auth endpoint was getting called twice when I clicked the link in my email. The second time the endpoint was called it threw an error, because it was expecting a verification token to be there which had already been used and deleted by the first time the endpoint was called. This was really discouraging, and seemed like a show-stopper to launching the app on Friday.

I did loads of testing, troubleshooting, diagnosing, etc., but to no avail. I could not figure out what was causing this issue. I ended up going to bed Thursday night feeling like I was going to need to delay the launch. I reached out to people on Bluesky, but didn’t end up getting any information that helped solve the problem.

Luckily I woke up Friday morning to some replies that other people were able to log into the app just fine. I had tested the log in from a couple of different devices, but using the same browser session that I use from my desktop. I tried it from my phone, and lo and behold suddenly it was working for me. I’m continuing to get the error on my desktop when trying to sign in, but it seems like other people aren’t, and I’m also not from my phone, so we’re moving ahead with the launch!

Time to launch and promote!

I’ve decided to make the app free for all users who sign up in the first week, and I might even extend it to two. This means that for now I’m defaulting all new users to have full access, and have hidden the Stripe subscription stuff that I added earlier this week. I started to do some promo on FB and other places today, but wound up with less time to do so than I wanted, so I’ll probably continue working on it into the weekend. It’s exciting to be at a place where I can actually start promoting something I built, and not be worried about users having problems or not being able to use the stuff I built, like what happened with Time Protector. Can’t wait to see how the first couple of weeks ago!

While I’ve been building this week, in the back of my mind I’ve already started planning out my next app. Per my desire to stay within my target audience, I am thinking another family-oriented app. This time likely something having to do with chore assignment and rotation. It will probably be feature-light again, like my sticker chart app, so that I can keep the subscription cost and maintenance low. More on that in the future!

For now I’ll call it a week. While I didn’t stay on top of my content creation this week like I’ve talked about in the past, I do feel really good about the progress I’ve made, and that I get to end this week with a completed app that I can now promote! It is important to stay on top of the content stuff, for consistency’s sake, so I’ll be renewing my efforts towards that next week, along with promoting stickerch.art and starting to build the next thing. Hope you have an amazing weekend, and we’ll talk next week!