Nine Things I Learned Building a Scrabble App for My Friends
I grew up playing Scrabble -- my grandma was cuthroat. I've played occasionally through the years, and more recently I've been playing Scrabble Go, the official, licensed Scrabble app, with friends. It's fine, but it's full of ads (unless you pay them), it has annoying side games (gems? why am I earning gems?), and I wished it had features like word definitions and better game history. So, starting last year, I built my own web app. I've had half a dozen friends and family members playing with me, each other, and a robot for the last few months, and it's been a lot of fun. I thought I'd share a few things I've learned along the way.
The game is a web app, a full-stack TypeScript project (React, Express, PostgreSQL) that I built almost entirely with AI assistance. Here's a few screenshots to give you a feel:
Scrabble game board, showing opponent's play, draft user play, reaction, and more. Leaderboard, showing categories and fun AI-generated funny-plays feature. Main screen, showing active and past games and overall design.


Some things I learned:
- You can get to 80% shockingly fast. The other 80% still takes time and focus.
I started building the app in mid-2025, on Replit. The basic set of screens, the database, the login flow, a basic robot (for testing, initially), and the initial game-play and rules took just a few days. The AI knew a lot about Scrabble, and built most of the core correctly the first time. It was almost playable, but not quite, and I lost steam and took a break until Christmas. Part of why I stopped was that agentic coding patterns and frontier models weren't mature enough.
When I came back, the tools had improved, I understood them better, and the second push was more productive. I fixed the mobile experience, had the AI do a big refactor for maintainability, and got some other critical pieces working in another week or so, and invited my first tester. It was several more weeks until the UI was polished, remaining bugs (including a play-scoring bug) were squashed, and notifications and invitations were working.
I also got some specific itches scratched, like a score graph that showed who was ahead at various points in the game -- one of the features I'd wished Scrabble Go had.

Cumulative score graph, showing that I was on par with the bot for a while, then it pulled ahead and won.
- "Vibe coding" evolved into something more like managing a junior developer.
When I started in mid-2025, "vibe coding" on Replit was the cutting edge. "Build me this feature" and hope for the best. By the time I was back developing in December and January, best practices and my workflow had shifted to what people are calling "agentic coding". I maintain the task list, we plan each ticket in advance, with a detailed technical spec, and then I say "go ahead." I'm the PM and the supervising Tech Lead, and I spend a lot of time on planning and verification. The AI writes essentially all the code, using patterns such as sub-agents. I make the product and architectural decisions. Better processes for systems that are bigger than a demo.
Plans and specs are critical for larger systems. LLMs are good at implementation but can't read your mind. Unlike a junior developer, they have no experience using the product, attending all-hands meetings, or absorbing the "why" through osmosis. You have to articulate context explicitly. As the tools gained explicit planning modes, I started using them.
- AI remains bad at many things that make a product good.
The AI could build a leaderboard. But when I asked it to suggest categories, they were boring — just variations on "who got the highest score." The categories that actually make the leaderboard fun (best comeback, funniest word) came from me. The same was true for most UI design decisions: menu layout, button placement, notification design.
I also had to make taste calls about what kind of experience I wanted to create. I didn't implement word challenges (unlike official Scrabble) because they felt too confrontational for the friendly game I wanted. Scrabble Go and Words With Friends don't have them either. Decisions about notification timing (games move forward, but people don't feel hassled) required taste. Taste is still a human job, and will be for quite some time.
The robot (AI opponent) required taste applied to AI behavior, not just UI. Early versions played obscure words too frequently, which felt inhuman in a bad way. I ended up limiting the Easy and Medium robot levels to the most common 5,000 and 50,000 English words, respectively. The Medium level also knows all of the two-letter Scrabble words. Easy and Medium modes also randomly "forget" words, making the bot feel more natural while still playing well enough to be challenging. Hard mode has the full dictionary, and doesn't forget words. These decisions lead to robot games that are fun and challenging at just the right level.
- Gaps in your own technical skills can still cause bottlenecks.
I'm a pretty lousy front-end engineer. When the AI struggled with pixel-level UI work, I couldn't give it technical guidance to get unstuck. I'd end up pasting screenshots and restating the problem in different ways until it worked. This got easier over time as the models improved, but it's clear: AI-assisted development amplifies your strengths and exposes your gaps. You don't need to be an expert in everything, you don't even need to know the programming language being used, but you need enough conceptual grounding to not get stuck and to be able to offer constructive help.
- Small design features create a sense of fun.
I didn't want to build a general-purpose chat system, but I wanted some emotional connection between players. So I added emoji reactions -- a constrained palette (😂 👎 🤔 😤 🎯 💪 etc.) that both human and robot players can use. The robot picks contextually appropriate responses by reading the board state. It's lighter-weight than a text box and more fun.
Another small, fun feature is the login codes. You're used to getting an email or text from your bank with a random set of numbers you can paste in to authenticate. But that's impersonal. The app sends you a random seven-letter word from the official Scrabble dictionary, instead! Why paste in "865903" when you could paste in "QUICKLY"? One user wrote me to say he was amused by this feature -- that's a win!
- Small audiences are worth building for.
Half a dozen people play my Scrabble app. That's not a business, and because of pesky trademark laws, it's going to stay very small. But most of the people I invited are still playing, months later. There's something satisfying about building a thing that a few specific people use and enjoy -- different from building for anonymous scale. You get direct feedback (mostly bug reports), and you can make decisions fast because you know everyone personally. As hobby projects go, this one has been very rewarding.
- Notifications are the unglamorous secret to retention.
Although I hope playing Scrabble with me is fun, I'm pretty sure that notifications are what reminds everybody to keep coming back. I started out with browser notifications, and recently switched to email notifications, including a daily digest that also includes nudges to look at the leaderboard feature. SMS notifications require a heavy phone number registration process that I started but didn't want to spend the time to finish.
- Technical debt is still a thing.
I started on Replit because it was the fastest path to a working app. When I outgrew it (cost, dev tooling preferences), I had to migrate everything -- development to Kilo Code, hosting to Render, auth from Replit to email login codes, notifications from Firebase push to email via Resend, plus a new domain and a new database. I wrote a 4-phase migration plan with many manual steps that had to be executed in order. It couldn't be delegated to agents. Some parts were hard to test in dev, so a few steps were implemented live. I'm very glad I incurred the technical debt to get started quickly, and am also glad I paid back the debt by doing the migration.
- You can't build something this big on vibes alone.
I genuinely think everyone with ideas should try building things with AI. The barrier is lower than it's ever been. But I don't think you can build an app this complex -- full-stack, real-time-ish multiplayer, auth, notifications, AI integrations, a platform migration -- without some software development experience. There are too many places where you hit conceptual blocks that require understanding what's actually happening, not just describing what you want. The AI is a force multiplier, but you need something to multiply.
This started as a "can I do this?" experiment but shifted to something I want to polish and get right.
Note:
- The app is invite only, and I'm not sharing the URL. I know all six of my users and I like it that way. But if you're a close enough friend or relative to have my phone number, text me and I'll send you an invite!
- This post was primarily human-authored, with AI assistance. Notably, the AI interviewed me and drafted the first version of the list, filling a Secondary author role. The ideas and final voice are mine.