Good Bloggy, my first AI coding project, eight months later

From puppy chaos to AI innovation: My 8-month journey building GoodBloggy, an AI writing assistant. Discover the challenges and lessons learned.

Good Bloggy, my first AI coding project, eight months later
The Good Bloggy logo in all its glory. Also, the logo was AI-generated.

Well, I've been a bit quiet lately. Life has this funny way of derailing even the best-laid plans. In my case, it was a new puppy who's determined to chew everything except her actual toys. Between middle-of-the-night potty breaks and rescuing socks, finding time to write has been...challenging.

But I haven't just been training an adorable little yellow lab. I've been building Good Bloggy, an AI writing assistant powered by Claude 3.7. Last year, when I started experimenting with using AI tools for copywriting, I noticed that I got better results when I fed the models an outline and asked it to generate content one section at a time. When prompting for each section after the first one, I would include the previous section's copy to ensure coherence. 

However, while my section-by-section approach to AI copy generation was effective, it was also a bit of a hassle, requiring me to store the draft as a file and continually paste partial drafts into the chat window. I wondered if that process could be automated somehow, and that's what led me to scope out and build Good Bloggy. Now fast-forward eight months.

The journey from concept to working product has been humbling and quite a bit longer than I first anticipated. Coding the interface wasn't too bad (thank you, Claude). I struggled more with back-end issues, like managing user authentication, building a token-based pricing model, and figuring out how to handle API errors and asynchronous workload. These things and other technical glitches took weeks to work through, even with the help of AI.

From prototype to debugging and beyond

While I wanted to use Claude in Good Bloggy for its copywriting abilities, I began coding with ChatGPT. Based on its recommendation to start with a simple web app, I set up a virtual environment and a Django project. Using step-by-step instructions from AI, I built a working, if somewhat ugly, prototype in a few days.

The first major snag was getting the Claude API to work. ChatGPT's training data was familiar only with an older version of the API and, even when I fed it the latest documentation, it kept getting confused with OpenAI's API. I had to learn about APIs and read Claude's documentation in detail to finally fix the problem code.

Oncer the basic functionality was in place, I decided the user interface looked too dated and clunky. After wrestling with ChatGPT for a while, I forced myself to learn a bit about web design and CSS. I saw some comments in no-code developer forums that Claude was good with front end challenges, so I combined my own code with enhancements with Claude to make forms and mobile-responsive screens a bit more attractive and usable.

Going live: More and different bugs!

The next major hurdle was getting the product, which worked great in my development environment, onto Heroku, a platform-as-a-service option for developers who don't want to manage their own servers. When I first pushed my code base to Heroku, the first step in making it visible from a URL like https://goodbloggy.com, I found that my static image set up did not play nicely with Whitenoise.  I ended up moving most of my imagery to Cloudinary and updating image links across the site. 

But worse than this was the intermittent failures of outline and blog processing features. During testing, about 50% of the time I would try to generate an outline or a blog post, I would see the dreaded purple Heroku screen of death. After doing some research, I discovered that processes were not completing within Heroku's 30-second limit, producing a timeout error.

Celery, REDIS, and weeks of tinkering 

To get Good Bloggy truly operational online, I discovered I would need to implement something called asynchronous processing. This means that time-consuming processes are shifted to a queue and processed in the background by a worker dyno. Two common technologies used by web apps to handle this are Celery and REDIS. Basically, Celery puts tasks into the queue and REDIS efficiently stores them in memory.

Shifting to an asynchronous model meant rewriting most of Good Bloggy's back-end code and upgrading my basic Heroku account to include both standard and worker dynos for task handling. I also had to pay for an instance of REDIS. This sounds straightforward, but getting the new set up to work took weeks. 

Once that was done, I took a second look at the core functionality with fresh eyes. I decided to switch the text editor where outlines, blog posts, and other content appear for TinyMCE, which made it easy for me to add a custom "AI Rewrite" button, allowing users to select text inline and ask Claude to rewrite it. I also set up a feature that allows users to generate Google snippets and social content based on their blog copy.

Adding Stripe and payment logic

Perhaps over-optimistically, I decided to set up a token based payment system, so people could sign up for the tool online and start generating content without paying for a subscription fee. To figure out a reasonable pricing model, I set up a script to capture token usage while I generated posts of various lengths. Once I had a rough idea of how many tokens different actions required, I established different pricing tiers and added token management and Stripe functionality.

Building dashboards allowing users to track their token usage and me to monitor API spending overall was a fairly heavy lift that took me a couple of weeks. When I was finally done, I felt good about the results. Payments were simple, token usage tracking was simple and transparent, and I even set up an easy way for customers to request refunds. For the moment, I felt I was done.

If you build it, they will...

I put the tool online, announced it to my very small social media followings, and...crickets. I'm wondering if I should do more to promote it or simply continue to use it myself and move onto newer, shinier projects. While Good Bloggy addresses a problem that I had with AI content generation, it may not be a problem that everyone has. And there are so many software-as-a-service (SaaS) products in the world with an AI writing component that breaking through, even if I had a marketing budget, would likely be very difficult.

All that said, I enjoyed the development journey and learned valuable lessons about product creation that should come in handy the next time I have a problem and think, "Gosh, wouldn't it be great to automate that!"

To be continued....