I’ve been listening to a lot of podcasts about AI and publishing, and one of their consistent messages is: ‘don’t use AI to automate the parts of your work you enjoy… use it for stuff that causes you pain.’
Okay… good advice. So where is my pain? (Yes, long-time fans, I know you know where I’m going.) My most urgent problem is that I’ve written a lot of books across many genres and styles. If new readers look through my catalog, they’re overwhelmed; if I try to personally direct them, I have to ask a thousand questions to guess what they’ll like. Even organizing my Shopify store was an exercise in frustration; I asked an expert to evaluate it and he said, ‘your branding is too confusing, you need to give people a clear idea of what genre and style you’re selling.’ Which, of course, helped me exactly not at all, because once again he was telling me (like everyone else, over and over) that to sell well I need to pretend to be one kind of author and stick to it.
Author branding experts treat my eclectic writing as a problem, not a virtue. But this is my era of questioning received wisdom, so I decided to treat my wide range as a feature, not a bug… and since no one has advice on how to sell a wide range to readers, I was going to have to solve that problem myself.
‘Obviously,’ I thought, ‘what I should do is automate the process of figuring out which book a particular person wants. Oh, okay: a quiz! Except… the quiz software out there doesn’t do anything I need it to. I guess I’m going to have to do it myself!
‘…annnnd I haven’t coded website stuff since the 90s’.
Enter AI.
Vibe coding is to coding what using image-generating AI is to making art: it’s getting the tool to do the work for you, while the people who do it by hand tell you that it’s not real whatever-the-thing-is. Wherever you stand in the AI debate, it’s been a source of wry amusement for me that the outrage sounds the same depending on who’s threatened. And I have sympathy for every threatened party, coders and artists and everyone else. But I decided that using the AI to vibe code my way into a solution to my problem was better than not solving the problem, so I embarked on my website overhaul.
It turns out that making a quiz is a lot more complicated than I thought.
THE QUIZ: CONCEPTUALIZING
The first problem I ran into was what questions to ask. You’d think that would be simple, right? Genre, length, style, etcetera. But when I compiled those questions, they felt too generic. What I had to understand was what makes my books similar, despite their tone/style/genre, so that I could then ask ‘what makes the experience of reading each of them different despite the underlying similarities?’
This in itself was a great exercise because it demonstrated that the book marketing experts were wrong about one thing: I do have a brand. If you’ve read most of my work, you’ll know that there is a Jaguar Vibe, things you can trust will be the same whether you’re reading a Jaguar romance or a Jaguar LitRPG. It’s just that my vibe is not based on the clothes my stories are wearing, but their underlying structure and assumptions.
So, the first challenge was reframing the quiz from ‘what kind of book does the reader enjoy’ to ‘what kind of experience does the reader want,’ and that was huge. Based on that, I came up with eight attributes: scope (how personal or world-affecting the plot), wreckage (how extreme the emotional experience), familiarity (whether you like aliens or humans), pacing (how fast you like your stories), prose style (do you like it literary or plain-spoken), worldbuilding (how much work do you want to do to understand the story’s context), and tech level (replacing the scifi/fantasy genre question, allowing me to better define books that might mix them, or have mostly modern-day tech).
“Good job, Jaguar! Now all you have to do is assign values for those attributes to all your books!”
…no wait, back up.
Before I can assign the values, I need to identify which books are suitable for new readers, since the purpose of the quiz is to help new readers find their starting point. So I had that job to do. (The answer is 22. I have 22 books appropriate for new readers. No wonder it was so hard to figure out what to recommend.)
“Great, Jaguar! Now you can assign the values for those attributes to those books!”
…no wait, back up. First I had to decide what scale to use. High-mid-low? Five point? Ten point? I think I spent half an hour going back and forth with the AI about pros and cons of each before deciding on ten point scaling. And then I had the fun of assigning values for each book. Is Rosary high wreckage because it has some intense scenes in it? Or is it low because it mostly glosses over those things? Is Earthrise high worldbuilding because the Peltedverse has 25+ years of development behind it, or low worldbuilding because you don’t need to know almost any of it to appreciate it? And on and on. I spent a long time agonizing over that spreadsheet.
The result? Questions and attributes that I feel reflect my books in particular. If I was doing this for some other author, those things would be completely different, and should be; I can imagine doing a quiz like this for a romance writer who writes many different romance subgenres, and the questions should be things like ‘how much spice do you like’ and ‘do you like being the boss or romancing the boss’ and ‘vampires, yeah or nay?’
So… good deal! I have questions, and I now have scores. Now what??
THE QUIZ: IMPLEMENTATION
Then I embarked on the coding. I’ve experimented with both Claude and Grok on minor coding questions, and in general I prefer Grok’s code… but Claude has the superior project organization. Claude’s project dashboard lets you attach documents, can take and evaluate screenshots, creates interactive visuals, can create artifacts that you can easily add to the project, and even hit up github. It’s just a more polished product right now. So I used Claude for the majority of the project, and Grok when I needed to troubleshoot something Claude couldn’t figure out.
Here's where I tell you that I don’t think vibe-coding is actually tenable for most people. I joke about not knowing what I’m doing, but I did enough sysadmin work and early web coding that I know what to expect and how things behave, and I needed this knowledge to know even what to ask Claude to do, or to guess what was going wrong when things inevitably went wrong. It helped me avoid a lot of early problems (“shouldn’t we take these security concerns into consideration?” “can we make sure we have a template system in place first?”). I was, in fact, surprised at how much I remembered from the early days of PHP and databases.
I won’t go into the set-up blow-by-blow, but here’s a list of the steps I took:
- I do not have sysadmin access to a server the way I did in Ye Olden Days. The first step was figuring out the tools my host provider has available, how you access them, and how much “advanced” access they give you.
- I talked through the design with Claude. We came up with a directory structure and architecture based on what my host environment and decided on a python application with a SQL database backend, and CSS and some javascript for the front-end.
- Then I learned how to get python running. This was not a minor endeavor, mostly because of sysadmin issues. What version of Python is my host running? What packages does it have available? Which do I need to install, and how does it allow me to install them? (Because it doesn’t let me do any of that from the command line; I need to use their interface which smartly limits users who don’t know what they’re doing). The actual script? Claude vibe-coded that fine. Getting the script to run on my environment? A day of work.
- We did a quick CSS mockup and created the web pages that would serve the quiz so that I could do testing. I spent some time fussing about how the quiz was served (one question at a time) and how the quiz behaved (reload page on each question?) before moving on.
- I did a graphic! Seriously, at this point it was only one graphic. But that required me to think of the quiz conceit. Who’s asking the questions? Is it me? Someone else? What do they look like? My choice was one of my unicorn aliens, the Le’enle, because they shapeshift, are magical, and exist in every type of setting; I’ve written westerns, romances, urban fantasy, fairy tales, even scifi with them. The Librarian was born!
- I set up the database. Claude suggested the table structures, I okayed them and we set them up. (‘We set them up’ means I asked it to generate the SQL to create the tables, and I cut and pasted it into the admin window. I know how to create tables with SQL. It’s much faster to let Claude do it, and I can tell if it’s solid or not by reading it before I hit ‘run’).
- I attached my spreadsheet with the books and their attributes to the project and asked Claude to create the SQL insert statements to dump that data into the database, which it did—‘take the data in this format and translate it to another format’ is one of my favorite uses of AI.
- We checked to see if the python script ran the quiz questions, stored the answers, and matched the answers to a book. This involved a lot of troubleshooting session data.
Here we pause in the workflow because I ran into an enormous issue, which is that the books being chosen made no sense to me. “Why isn’t this working?” I asked both Claude and Grok, and they said, ‘you need to weight the answers.’ ‘Explain weighting to me,’ I said. And then ‘Explain different methods for weighting.’ And then ‘Explain the pros and cons of each weighting method.’
This was the best part of doing this, honestly. I know some things—I know databases, and the basic structure of code, and basic sysadmin things—but there are so many things I don’t know, and so many things that have changed since I was first doing this, that I’d often stop for long digressions. Everything from ‘wait, pico’s named nano now?’ to ‘you can do animations with CSS?’ to ‘explain how APIs work.’ I kept learning!
Back to the quiz: weighting the book attributes was another exercise in second-guessing and finicking. “How important is the worldbuilding to this book?” “This book is high in emotional impact, but the high intensity parts are rare and not the point.” “Does the prose style matter much to this book’s story?” I’m not entirely sure I’m happy with it even now. But the good news: once I did the weighting, the book matching started working. In some cases, almost magically… existing readers reported getting their favorites when they took the quiz. Even better, the quiz was correctly addressing some of my thornier problems; for instance, the Kherishdar books have two entry points, depending on whether you like short fiction or novels, and the pacing and immersion questions were now assigning one or the other depending on people’s preferences.
One of the coolest parts of the quiz was how infrequently it was suggesting my “average” books. For the longest time, I was only advertising Earthrise as the book most likely to appeal to the broadest number of people. But the quiz, having specific data on what people wanted, was recommending that book far less often than it was recommending books I rarely bother to talk about. I’ll admit I got really excited about this. So many of my books are languishing for want of the reader for whom that book in particular is going to be The Book. The idea that those stories might reach people who are predisposed to want them is so good.
THE QUIZ: FEATURE CREEP
But see, I wasn’t done yet. Because a book matching quiz isn’t something people talk about. Wouldn’t it be cool, I said, if it was an actual personality quiz, and you got a reader archetype? Back to the drawing board!
My first question was ‘how many personalities are we talking about?’ I asked both Claude and Grok to give me a sense of how many archetypes I could generate from my existing quiz, and the initial answers were appalling (thousands!). Using all the attributes to generate an archetype was definitely out of the question… which, then, should I use? Grok suggested between three and four was reasonable, and choosing three gave me a manageable eight archetypes. It was just a matter of deciding which attributes, which was, again, a question about what makes a reader a Jaguar reader, and further, what differentiates Jaguar readers from one another.
This process taught me that I really do understand my brand and my audience a lot better than I thought I did. It’s just that, like my work, my readers are eclectic, come from every spectrum of every axis of personality. I can’t market to “romance readers” or “cozy readers”; like my stories, my audience defies boxes! No wonder it’s so hard for us to find one another. The current marketing/algorithmic-matching setup does not work for people with nuanced tastes.
Anyway! Back to the archetypes. I chose wreckage, scope, and familiarity: how intense you like your stories, whether you like them to be personal or epic, and whether you like maximum alien or minimal. Then I generated endless ideas for names for each of the types, tossed out things, and recombined them in my own squishy human brain until I came up with the names for each archetype.
Let the feature creep commence!
- Having designed the archetypes, Claude and I started rewrites on the python script to assign the archetype. Because this function was added to the quiz after the book match-up, the archetype assignment and the book matching are done separately. This is good: you don’t get an archetype and then the archetype’s favorite books; you get an archetype, and the book matches you to your entire quiz answers. This means that different readers can get the same archetype but different recommended books based on their quiz answers. That’s exactly how it should work: you might share your archetype with others, but your quiz answers are more specific.
- I spent almost three days doing the art! It interested me to discover that the drawing part took as long as the basic coding for the initial quiz. But my art is part of what I sell, and I love my own art and the act of making it, so no regrets. I had a ton of fun coming up with variations of the librarian! And I love the idea of her transforming into a different version of herself based on your answers.
- Now that the quiz was fun-shaped, I wanted people to be able to share their results, so I spent almost a day and a half on social share. Social share, it turns out, is complicated, buggy, and annoying. “Why is X not showing a graphic?” “Why is Facebook working on desktop but not mobile?” “Do we even pinterest anymore, bro.” Mobile anything is awful. UI developers must not have hair left.
- This was the point where I said ‘um, I need to learn software management’, so I had Claude talk me through learning to use github. This was a big help, because I could use github from Claude’s console to pull up old versions of code that worked after something exploded. Things frequently exploded! Bonus: I now have a github, which makes me look like a Real Developer. I am amused.
THE QUIZ: FEATURE EXPLOSION
Once social share was working, I felt like I was at the point of finishing touches:
- "Can we get a ‘tell me more’ button that explains why the librarian is recommending this specific book?” led to adding an entire new database table with flavor text that I wrote for the librarian to tell you. This part I did myself, because I wanted to really convey important things about the book based on the quiz questions and the librarian’s personality.
- “Can we rework the landing page for the social share to display more information? Okay, can we get it to display the top-matched book for the sharing user? Okay, can we allow them to buy it? Okay, but can we make the ‘take this quiz!’ button bigger?”
- “Can we pass a coupon in the buy links so that people get 10% off if they buy the books recommended by the quiz?”
- “Can we get readers to exclude books they’ve already read?”
- “Wait, we need an error message for when they exclude every book!”
- “I’m not in love with the colors of this button. Or that button. Or the placement of this item. Or the size of this graphic. Wait, can we get the top match to have a different colored card? And a banner? The banner’s not centered on the card. It’s still not centered on the card. IT’S STILL NOT—look, okay, good enough. Let’s just move on.”
But as I was about to rest on my laurels, I thought: “My shopify store isn’t built around the quiz, and it really should be.”
This is my “…” look.
So I embarked on that:
- “Claude, Grok, how do I redesign my shopify store to take advance of the quiz?”
- “Claude, redesign my shopify front page to make the book quiz more obvious. Yes, create a visual mock-up.”
- “Claude, how should I tag my products now? Wait, I should add the attributes for ALL my books, even the ones not appropriate for new readers? Oh, I see, that means I could make a ‘gentle reads’ category (“wreckage attribute is less than 3”) or ‘page-turners’ (“pacing is 8 or greater”). Nice!”
- “Claude, how should I arrange my collections? My collections page? UGH CLAUDE IT’S SO HARD TO FIND THINGS HELP”
- “Grok, please fix Claude’s code.” “Oops, I called you Claude.” “Sorry, didn’t mean to call you Grok.”
- “Claude, Grok, please take a break while I draw a ton more graphics for categories and collections.”
- “Claude, my fans want to buy my art, how do I integrate art more gracefully?”
- “Claude, I now need buttons on the quiz that lead back to the store because people are going to the quiz from the store and might want to jump back.”
My shopify store is now about 90% of the way there. It’s easy to find the quiz so you can take it, there are archetype collections, and the collections page sorts things reasonably. If you click on specific series, they’re actually in order! There’s even art and merch, which means I should (hopefully) be able to retire my zazzle store soon. I’m much happier with it… I feel like my prior attempt at wrangling my very varied product base was as messy as my thinking about how to recommend my books. Structuring it around the quiz makes so much more sense.
FINAL (?) THOUGHTS
I went on to use Claude and Grok to vibe-code my author page, which has random mangos, a color theme that changes based on the time of day, and floating alien glyphs, and I might talk about that (but later, there are a couple more things I want to add to it). But I feel like the quiz part is behaving the way I want, and the shopify store integrates and refers to it, and this is finally solving a business problem that was a serious pain for me for years. Now, when people say “I want to buy one of your books, what should I get,” I say, “Go take the quiz! It’s at mcahogarth.org/bookrec.” Problem solved… and in a fun way!
Do I have some future features planned for the quiz? I do! I can conceivably integrate it with Shopify’s user account system so that it can track your prior quiz results and your purchases, and tell you which series you haven’t finished reading, for instance. I’d love for the ‘tell me more’ page to mention the other books in the series. I definitely want to do shirts and stickers of the archetypes because I love how the graphics turned out. Having analytics so I can see how many people are Scarred Titans versus Cheerful Neighbors… that would be fun, and not just for me…! Imagine, “You and 402 other people are Cheerful Neighbors… how good it is to have company to share tea with!” or “Only 9% of Jaguar Readers are Scarred Titans… you are in rarified company, defending the galaxy.”
The weirdest part…? I have remembered that coding stuff like this is what I used to do as a hobby. It’s fun for me to design this kind of thing and watch it come together. I love coming up with weird and tiny details that delight. The last time I felt this happy about my website was back in the stardancer.org days… and in fact, several times in the past week, when I’ve decided to check the site, I've started typing 'stardancer’ rather than ‘mcahogarth’, as if some part of me has warped back in time to the years when I was tinkering with my own backend, breaking things that Engineer Sam had to fix.
AI gave this back to me. I love it.
So, long story short: go take the quiz, if you haven’t already, and look around the shopify store. 🧡
Also, if you liked this post, consider subscribing to my locals or patreon!