A brief history of Morning Coffee Games
reidaugust 19, 2026
I've been thinking about making this site for a long time. Today, almost a year after the first public launch of the site, I thought it would be nice to reflect on the long journey to get here.
I've loved word games, puzzles, and building websites since I was a kid. I grew up playing Scrabble, Boggle, sudoku. In college, I got addicted to crosswords. In the years after, games like Wordle and the Spelling Bee took off. It was during the spring and summer of 2021 that I had the idea to launch my own puzzle website.
July 2021
I made the first git commit on July 8, 2021, and I registered the morningcoffee.games domain name on July 9. At the time, I wasn't sure exactly what I wanted to do with it.
In the first couple days, I built a basic version of subwords. It looked nothing like it does today. It was inspired by an old college hackathon project, which was in turn inspired by a game my favorite substitute teacher used to play with us in middle school: find as many words as you can within a long word or phrase, like "skateboarding" or "hello world".
On a technical level, I was experimenting with a new tech stack that I was curious about: the Next.js framework, with Supabase powering the database.
And then... life happened, and I dropped it for a while. The site did not launch.
August 2022
Over a year later, I started fresh. I knew I could bring in what I already had with subwords, so I spent time revisiting the Supabase docs. Supabase had grown a lot in the intervening year. But again, I got bogged down with the technical details (setting up authentication), and I lost momentum.
The site was not yet live. But I renewed the domain for another year, because I still dreamed of devoting the time to it someday.
February 2023
I got really interested in another new set of technologies: Deno and Cloudflare Workers. I wanted to learn more about them, and I thought these could be a good way to take care of a bunch of the boilerplate for me (no more npm! no more backend!). My day job had me working on lots of nuts-and-bolts code, so I didn't want to be fiddling with unglamorous stuff for a side project.
Also, here is where I started thinking harder about which word list to use for the word games. This is a surprisingly complex question! Someday, I'll do a deep-dive into the process for developing a word list. At the time, I settled for the publicly-available ENABLE word list.
The site did not launch.
June 2023
Yet again, I got excited by some new technology and picked the project back up. This time, I was trying to write the frontend in Svelte and deploy the backend via SST.
I rebuilt subwords in this version of the site. By then, it looked more like it does today, with a 4x4 grid of letters and score multipliers on some of the tiles.
I also designed and built the first version of doublet. I worked hard on the scripts to generate new puzzles for both of these games. Doublet was especially fun, as it required an implementation of Dijkstra's algorithm over the English dictionary. Much of this logic still exists in the codebase today.
I dug even deeper into building a custom word list. I grew frustrated with the ENABLE list, as it had some offensive or obscure words that I wanted to exclude, and it was missing a lot of modern words that I wanted to include. Both doublet and subwords were suffering in quality because of the strange words that were being suggested by the generator scripts. So I began hand-crafting my own word list, derived from a combination of publicly-available sources and scored by hand when I felt certain words should be banned or preferred in the puzzles. This word list (with lots of modifications) is what I'm still using today.
December 2023
I was excited by the progress I'd made over the summer, and I wanted to stop thinking about which technologies I was using in order to focus on the fun parts (like designing the games!). So... I rebuilt the site again. I came back to React with Next.js, powered by a SQLite database.
Subwords returned, and I had a basic version of a crossword puzzle as well. I spent a lot of time thinking about how to construct full crossword puzzles in a way that would make them playable for me (since I wanted to have fun, too). This remains an unsolved problem!
In the fall of 2023, I discovered star battle, and I became obsessed. I played a bunch of versions, but I couldn't reliably find puzzles online at the right level of difficulty. I wanted to figure out how to generate my own, and I knew it was a good candidate for this site. So I wrote my first star battle generator.
At this point, I also had the first version of what would become expressions. It was called 47, and the goal was to combine four numbers into math expressions to reach all numbers between 0 and 47. This game was inspired by another middle-school game: 24. But the UX needed a lot of work. I had a textbox where you were supposed to type your expressions, but that interface was janky. It was annoying to accidentally mistype your parentheses and get an error.
I made a bunch more progress, but I still didn't launch the site.
April 2024
Remember when I said I was going to stop rebuilding the site to experiment with new technology? Welp. I rebuilt the site using Astro. My hypothesis was that most of the games and puzzle content could be generated statically at build time, with only light JavaScript sprinkled on top. That may have been true, but I quickly found myself adding in React on top of Astro.
The highlight of this period was designing and building a brand new game. I called it "placeword." It doesn't exist on today's version of the site. Maybe someday it will! It was sort of like single-player Scrabble, where you were given 18 letter tiles and you had to assemble them in words on a grid to score as many points as possible. It was kind of fun, but it needed more work to be really good.
Still, the site did not launch.
September 2025
After another year had passed, I was determined to get something live. I spent a couple weeks fiddling with different tech (RedwoodSDK? Cloudflare's Durable Objects?), but settled back on Astro (for the time being), deployed to Cloudflare Workers.
The site was, at this point, almost entirely frontend. I stripped it down and decided that I wouldn't let myself dig into the backend until I had proved that the frontend had games worth playing. That ended up being a great decision!
I wrote a sudoku generator, and I polished up the star battle generator from years earlier. I got the 47 game ready to ship in its current state. Nothing was perfect, but it was at least playable.
I set up a pipeline that would automatically generate puzzles and promote them to production on a schedule, without my intervention. Much of that pipeline is still running today.
And finally, after so many years, I launched the site. There were now playable games every morning at morningcoffee.games.
February 2026
With the site live, I'd been playing the games and sharing the link with friends and family. Work and the holidays kept me busy, so I didn't have much time to make improvements. But in February, my employer gave me a sabbatical (thanks!), and I decided to devote several weeks to building out MCG.
I started by rebuilding the site one last time (classic, I know). I ripped out Astro, since it wasn't worth using two frameworks (React + Astro) when I could just use one (React). Astro is very cool, but I don't think it's right for this site. I stopped using Cloudflare Workers, as the local development story was giving me headaches. I switched to a simple Bun server to run the backend and power the local tooling. I've been very happy with this choice.
More importantly, I leaned hard into building out new games. I started with islands, a version of Nurikabe. A week later, I shipped roads, a version of Hashiwokakero. I wanted small, logic-based puzzles that were easy to play on a phone to complement the word games.
In the months since, I've shipped even more. As of this writing, we have eight daily games: doublet, subwords, expressions, crosscheck, star battle, islands, roads, and sudoku. We have streaks, groups and leaderboards for playing with friends, stats for tracking progress over time, and customizable avatars. You can go back and play months of old puzzles in the archive. We even have a blog now, I guess.
Looking ahead
There's no going back now. I am so proud of what the site is today, and I'm so excited that people are actually playing the games. I'm playing them every morning myself. Although part of me wishes I hadn't spent so much time getting in my own way instead of launching, I do think that I learned a lot from the years of going in circles. I have found a strong technical architecture, the puzzles are fun, and I have about a million ideas for new games and features. Stay tuned!