I built a chess app using AI.
The lessons I learned while "Vibe-Coding" with Claude 3.7 Sonnet
My first experience using AI to help me code was in January of 2024. Snapchat had just released their official AI assistant.
Yes I know, it took Snapchat to convince me to try out free Gen-AI. Anyways…
Y’all remember the time you were first blown away by AI’s capabilities? This was sort of the time for me. In my attempts to force the AI to make a mistake, I decided to test it on an obscure coding topic: the ESRI tiling system, which was the architecture underlying a nasty bug I was trying to squash in my GIS coding job.
I asked Snapchat to explain to me, in layman’s terms, how ESRI tiling worked, and to provide some documentation. It obliged. It even linked to the documentation website!
Except… the link led nowhere.
Snapchat’s AI had directed me to a documentation page which did not exist. Snapchat promptly apologized, then provided me with another set of fake links, and assured me they were correct this time. I decided AI had a little bit further to go before I would use it to help me code.
Then came Claude.
Anthropic’s Claude 3.5 Sonnet was, in my opinion, the first coding AI which hit more than it missed with regards to code-writing. For the first time, I believed that AI would replace human programmers, relegating us to the role of “prompt engineer”. Don’t get me wrong, I knew that the AI train was coming, but Claude 3.5 marked the train pulling into the station.
I had a pet theory that while AI coding would displace millions of dev jobs, it would have precisely the opposite effect on independent enterprises. People working alone, but with the help of Gen-AI, would see their productivity balloon tenfold. And for a brief window, first movers could take advantage of this increased individual productivity and profit by building and releasing powerful new software onto the market at a fraction of the prior cost.
I talked to friends about this at bars, and messaged them about it on social media, but it took me seeing a friend build an app from scratch to take the leap myself. In early March of 2025, I decided to write a fully functional app from scratch, in a language I’d never used in my career, in about three weeks.
The App: ChessGuessr
Like most apps, this app would be simple, beautiful, and probably unnecessary.
Look at this absolutely beautiful feature graphic Claude came up with.
A chess training app in the vein of ChessPuzzle’s Puzzle Inception, my app would have the user guess the engine evaluation of a series of random chess positions. The user would gain or lose Elo based on their guess, and would be ranked on a public leaderboard. I also had ambitions of multiple modes, including multiplayer, but figured I would keep design simple up until an initial release and add more features if people seemed to like the original idea.
An example puzzle from Puzzle Inception. I think White has an advantage here, but what do you think? Let me know in the comments.
Just one problem: I had never developed an app before.
I had never even coded in Kotlin! I knew Java, which was syntactically familiar, but the structure of a mobile app was completely foreign to me. Where would I even start? What IDE should I use? What version control? How would the files be organized? What back-end services should I use?
Claude 3.7, Absolute Coding Unit
This is where Claude came in. I had heard about it being the darling of a growing community of AI devs, due to its ease-of-use, and its ability to keep it simple and savvy. Other models were just less savvy when it came to coding and debugging. And they had the unfortunate tendency to , when someone asked them to make a simple edit, make a bunch of additional, unasked-for changes.
. In the first question I asked it, I tried to give it as general a goal as possible: Build me a Chess app.
Claude immediately hit on:
The IDE (Jetpack Compose)
The backend services (Google Firebase and Firestore)
The UI architecture (separate screens using an M-V-VM architecture)
The file structure (Shown below)
Was it perfect? No.
Was it a damn mile better than anything I could have produced in that time? Hell yeah. Of course, that doesn’t excuse me thinking through issues on my own. Over time, I had to amend the page-list in multiple ways:
merging the Profile screen into the Settings screen as it proved redundant
adding a DatabaseManager and relevant folder path
removing the Components folder and appending /components sub-folders to the relevant pages
But Claude gave me a roadmap to work in. And by work…
I mean asking Claude to pretty-please write me some files.
As stated earlier, I had no prior experience developing Android Applications. That extended, of course, to writing files. That was the real crux of this project. I wanted to see just how far I could get with the limited coding experience I had. So I asked Claude to code me a Log-in Screen, and by god it did!
Now, at this point the damn thing is far too long to show in a single screenshot, but here’s the first bit just to show the depth. If there’s one thing Claude excels at, it is writing goddamn code. In less than half an hour, I had copy-pasted a mostly functional log-in page and was already working on the home screen.
When I experienced bugs, I simply screenshotted them, and asked Claude what went wrong and how to fix it. More often than not, Claude provided useful insight or straight up solved the problem.
Even with Claude’s assistance, I had to do ~30 hours of manual coding to get the app to a place where I was happy with it.
Of course I don’t want to claim that I vibe-coded a chess app. Partly because I don’t like the implication that I was completely laying back and letting Claude code, but partly because I couldn’t afford to lay back and let Claude code!
There remain some serious issues with delegating coding responsibilities to AI, as users in r/programming are quick to point out. For one, the LLM doesn’t always have the same vision that you have for what to build or how to build it.
Sometimes, Claude insisted that I use certain common design patterns which simply didn’t work for my App. Sometimes, it wouldn’t understand the specificity of a coding prompt, and would instead provide me with a general framework, which I’d have to take in and adapt for my specific purpose. Sometimes it would even create ‘phantom variables’ and insist that they were being used in the code, when in fact they weren’t.
Here’s a list of some of the things I just had to doggone do myself:
I designed the algorithm translating slider position to position Evaluation (a reverse sigmoid function)
I designed the algorithm for updating user and position Elo based on evaluation accuracy
I created a custom display to show evaluation accuracy
I discovered how and where to break out smaller components from the larger screens, so that I could reuse those components in other sections of my App.
I implemented dark mode (thank god)
I used wrappers to implement a NavBar on various screens, directing the user to the other screens in the app
The funny thing is, most of these ‘personal touches’ only came after multiple frustrated attempts to coax Claude into providing me with useful code. The more I built, the more I used Claude, the clearer his weaknesses, and his “differences in creative opinion” became. I knew in advance which questions I could reliably use Claude for, and which I would have to answer myself, by writing code.
I had become a better programmer. Both with and without the use of AI.
The Final Product
Here are some screenshots from the finished app.
The home screen.
The leaderboard screen.
The evaluation screen.
In the end, I made something I’m proud of.
And that’s what’s most important to me in designing an application.
I should note, I also did a lot of work for this app that wasn’t related to coding the app itself.
Creating a curated dataset of chess positions and their corresponding evaluations (I think I’ll post more about this challenge next week!)
Setting up database rules in Firestore which would allow users to access data in a safe way
Modifying the UI to work on different screen sizes
Creating and hosting a webpage for the “Delete Account” Weblink
Creating and hosting a webpage for the Privacy Policy
Creating a Privacy Policy
Publishing the .AAB and getting the app up on the Play store, which further requires
Assembling 12 beta testers to download the Android app concurrently for 14 days.
And alas, this last hurdle has proven too much for me so far. I’ve assembled a squad of family and friends, and along with some chess nerds on Reddit I thought I had gotten close to hitting the numbers required to host this app.
I actually think I’m close to releasing this baby, if I can assemble 12 testers concurrently. If you’re reading this and you think it would be cool to give my app a try, don’t do anything yet. But keep your eyes peeled. I get enough subscribers to this thing, and I might drop a link soon.
Well, that’s all for now, folks! Stay Curious. Over and out.









