How I Turned an Idea into a Fully Functional WordPress Plugin (With a Little Help from Gemini) 🚀

Ever wanted your StoryGraph reading lists to live right on your blog? I did and teaming up with Google’s Gemini as my AI vibe code partner turned it into a crash course in agile development and creative problem-solving.

Lately, I’ve been on a mission to level up my Gen AI skills and not just in theory, but by actually building things. I’m not a developer by trade or even training, but I’ve been experimenting with what’s possible using tools like Claude, ChatGPT, and Gemini.

Last night a project sort of took on a life of its own. I wanted to create a WordPress plugin that pulls in my StoryGraph reading lists and displays them on my blog. It started as a “let’s see if this is even possible” experiment and quickly evolved into a messy, fun, but very educational journey through AI-assisted coding and constant pivoting.

During this project there were three big pivots:

1️⃣ Scraping Strategy → 403s Everywhere

Since The StoryGraph lacks an official API, the first idea was to have the plugin scrape my StoryGraph reading lists which was a solution that Gemini shared early on. Technically, it could’ve worked… but we immediately ran into 403 errors. StoryGraph’s anti-bot protection (shoutout to Cloudflare 👋) was not having it. And while the data was public, scraping without permission lives in a legal area that’s not something I wanted to mess with. It was time to pivot.

2️⃣ RSS Feeds → Behind a Paywall → Deprecated Functionality

Next up: RSS. We reworked the plugin to pull from StoryGraph’s XML feeds… only to hit another wall. Turns out they’re locked behind a “Plus” subscription. I ponied up and then found out the feeds were deprecated. Classic AI wild goose chase. Those “Check these statements. AI can be wrong.” warnings should indeed be heeded.

3️⃣ Data Export → Bingo

Finally, after digging through account settings, I spotted StoryGraph’s Export Data feature. One quick download later and boom: a clean, reliable source of truth. No scraping, no chasing ghosts. Just good old-fashioned data export.

🔧 The Plugin Takes Shape

The next pieces to build were the actual plug-in functionality which was much faster than figuring out how to retrieve the data.

  • Admin Upload: Built a simple upload screen in the WordPress admin where I can drop in the data file instead of relying on live fetches.
  • Smart Parsing: Gemini helped map out fields like Title, Author, and Read Status. We ironed out some bugs around file types and capitalization quirks.
  • Cover Art Magic: For a more visual display, we hooked into the Open Library API to grab book covers using ISBN numbers.

📈 The Result

What began as a plain text list can now be a polished, dynamic, and visual display of my reading life right on my WordPress site. This project wasn’t just about writing code. It was about thinking creatively, adapting on the fly, and using AI as a true vibe-coding partner to get to a smarter solution.

🔗 You can check it out it here: jamesk.xyz/books