Amazon’s Kindle can’t play audiobooks while showing text. Twenty years later. So I vibe coded my own solution in three different AI chatbots to see which one actually works.
Spoiler: They all succeeded eventually. But one chatbot made a decision I never asked for that nearly derailed everything.
Why I Even Tried This
E-readers are embarrassingly dumb. Kindle especially.
The mobile app lets you read and listen simultaneously with real-time text highlighting. Perfect for anyone who absorbs content better by combining reading and audio. But Kindle devices? You get one or the other. Not both.
After nearly two decades, Amazon still won’t add this basic feature to their hardware. Meanwhile, they own all your books and lock you into their ecosystem.
So I decided to vibe code a fix. Then I got curious. Could three different AI chatbots build the same app from identical instructions? Would one perform better than the others?
I tested ChatGPT, Claude, and Gemini. Same project. Same prompt. Different results.
The Tome Reader Project
I wanted something ambitious. Not just a basic text reader but an immersive experience.
The requirements seemed simple enough. Upload a PDF or EPUB file or paste text directly. Have the app read it aloud with real-time highlighting. Generate background music that matches the content mood – gothic horror for Poe, nature sounds for Thoreau, sci-fi ambience for Asimov.
Plus, I wanted trigger words. When the text-to-speech says “thunder,” you hear thunder and see lightning effects. When it says “waves,” you get ocean sounds and water visuals.
All of this needed to run in a single HTML file. No external dependencies. Just open it in a browser and go.
Ambitious? Sure. But that’s the point of vibe coding. You describe what you want in plain language and see what happens.
Building the Base Version in Gemini
Gemini handled the initial build surprisingly well. Google’s chatbot figured out early technical challenges I hadn’t even considered.

The biggest issue came immediately. Text-to-speech voices wouldn’t load properly. Browser security restrictions prevented them from initializing without user interaction.
Gemini solved this by creating an initialization screen. Click “open” to enter the app. That simple interaction loads the voices properly. Without this insight, the entire project would’ve failed from the start.
From there, functionality grew steadily. Background music based on content type. Sound effect toggles for users who find them distracting. Visual effects that sync with audio triggers.
Once the base version worked, I asked Gemini to create a prompt describing the entire project. That prompt would go to the other chatbots to see how they handled the same instructions.
Claude Made It Better (Then Broke It)
Claude improved the project significantly. Anthropic’s chatbot extended the trigger word vocabulary and enhanced visual effects dramatically.
But then Claude made an unauthorized decision that caused hours of confusion.
Initially, I thought Claude’s version was broken. Testing a sentence with nearly ten trigger words only produced one effect. The first word worked. Everything else stayed silent.
After multiple rebuild attempts, Claude finally revealed what happened. It had decided to limit sound and visual effects to once per sentence. The reasoning made sense – preventing “spam” that would overwhelm users.
Here’s the problem. I never asked for that limitation. Gemini and ChatGPT triggered effects for every keyword as expected. While Claude’s user experience consideration was thoughtful, it changed core functionality without permission.
That said, the prompt I gave wasn’t specific about how many times effects should play. Claude made a logical assumption. Just not the one I wanted.
After fixing that issue, Claude refined the prompt again. Time to test ChatGPT.
ChatGPT Delivered (Mostly)
OpenAI’s chatbot recreated the project perfectly. Slowest code generation of the three, but accurate results.
I only asked ChatGPT for one additional feature. A dedicated volume slider for background music so users could turn it off completely while keeping text-to-speech at full volume.

ChatGPT failed repeatedly to add this. After multiple attempts, I went back to Claude to implement the feature and update the final prompt.
Round Two: The Consistency Test
Now came the real experiment. Could all three chatbots recreate the same project from the identical prompt? This tests whether a solid set of instructions produces consistent results across different AI models.
I uploaded the final prompt to fresh chats with all three chatbots. Both Gemini and ChatGPT succeeded flawlessly. Every feature worked. File uploading, text highlighting, text-to-speech, audio effects, visual effects. Perfect recreation.
Claude failed spectacularly.
Remember, Claude had spent the most time refining this project. It created the final prompt. Yet when I pasted that prompt into a new chat, the app wouldn’t load past the initialization screen.
Eleven full rebuilds later, Claude finally figured out the issue. Somehow the initialization code conflicted with updated security requirements. The same code that worked minutes earlier in a different chat now failed completely.
Meanwhile, Gemini and ChatGPT handled it on the first try.
The Weird File Download Problem
Getting the HTML file from each chatbot revealed surprising inconsistencies.
Claude always offered a preview window plus direct download. Best experience by far. Test the app without downloading, or grab the file if you want to save it locally.
ChatGPT was inconsistent. Sometimes it offered direct download. Other times I had to copy the HTML code and save it manually. No clear pattern for when it chose each method.
Gemini never offered direct download. Always required copying code and saving manually. Most tedious option despite having the fewest errors overall.
Small detail, but it matters when you’re iterating quickly through multiple versions.
The Real Winner: Good Instructions
Declaring a winner here misses the point. All three chatbots eventually created functional versions of the project.

What this experiment actually proves: solid instructions matter more than which AI you use.
I tested Gemini’s pro version against free tiers of ChatGPT and Claude. Couldn’t distinguish performance differences. The free models matched the paid one when given identical prompts.
That’s significant. It suggests that for vibe coding projects, prompt quality matters far more than model capability. At least for this type of work.
Previous testing showed clearer differences between Gemini’s free and pro versions on other projects. But those used different prompts. When instructions are precise and comprehensive, the playing field levels considerably.
What This Means for Vibe Coding
If you can type or talk, you can vibe code. The barrier to entry is conversation, not programming knowledge.
But chatbot performance varies wildly even when given identical tasks. Claude improved the project significantly during development but failed to recreate it from its own prompt. ChatGPT succeeded at recreation but couldn’t add simple features. Gemini handled basics well but required more manual work.
None of this is a dealbreaker. It just means you need patience and willingness to try multiple approaches. Sometimes one chatbot will crack a problem the others can’t. Sometimes you need to rephrase your request.
The beautiful part: you’re still just chatting. No coding knowledge required.
The Amazon Problem Remains
Did I solve my Kindle frustration? Technically yes. The Tome Reader works. It reads books aloud with real-time highlighting, generates atmospheric music, and adds immersive effects.
Will I use it daily? Probably not. Web apps make poor replacements for dedicated e-readers. Screen quality, battery life, and distraction management all suffer.
But that wasn’t really the point. The point was proving I could build something Amazon refuses to after twenty years. Using nothing but conversation with AI.
Amazon still owns most of the e-book market. Still locks users into their ecosystem. Still refuses to add basic features that exist in their mobile apps.
Meanwhile, someone with zero coding experience can vibe code a better solution in an afternoon. That’s either inspiring or depressing depending on how you look at it.
Probably both.
Comments (0)