Game Necromancy

Resurrecting Yahoo Word Racer from old YouTube videos

0:00 / 0:11
Word Reborn 2026
0:00/0:11

Background

I wasted countless hours playing Yahoo Word Racer in middle school but Yahoo tragically retired the game some time around 2014 (along with other gems like Yahoo TowersAn even more tragic loss. Towers was a Tetris-like competitive block smashing contest. All software dies, but I mourned Yahoo Games's demise almost as much as Google Reader's.). The game was fun and addictive, and AI gives you superpowers, so I decided to resurrect it from old YouTube videos, like the one above. You can play it live:

... for now anyway. I believe this is fair use, but I do not have the will or incentive to litigate it, so I can only hope that the original copyright owners let me keep this small, 100% non-commercial indie project alive as a fun tribute to an old gem of the internet. I will obligingly take it down at their request.

Scope

This project was a lot of work! Agentic AI made it possible. My professional background is in software engineering, and that certainly sped things up. I would guess I spent an hour a day on this project over the span of a month, not counting the time I wasted "testing" it against friends.

The project included 465 commits over 143 sessions. I submitted 382 prompts, and agents spent a total of ~128 hours building.

Some things that took a long time: handling edge case logic for the lounge and game room (invite/boot/stand/sit logic), an abandoned quest to create a serverless, infinitely scalable variant of the game engine (it worked, but the latency killed the magic), and adding a fewTaking the Lead BEFORE: INSTANT SNAP AFTER: GLIDE In the original Word Racer, when one player overtakes another, their avatar and score smoothly glide over their opponent's. If you're in first, you can immediately tell you've been passed without looking away from the board. It also adds some suspense. I had to precisely describe that interaction and test several variants to reproduce it. funLetter frequency distribution A 4.7%, B 1.0%, C 2.9%, D 2.6%, E 12.5%, F 3.9%, G 2.6%, H 5.2%, I 5.5%, J 1.3%, K 1.8%, L 4.9%, M 2.3%, N 7.0%, O 6.5%, P 2.3%, Qu 1.3%, R 4.4%, S 6.5%, T 7.8%, U 4.9%, V 2.3%, W 2.1%, X 1.0%, Y 1.6%, Z 0.8% 10% 5% 12.5% A B C D E F G H I J K L M N O P Qu R S T U V W X Y Z I reconstructed the original letter frequency distribution by having Gemini parse every Word Racer YouTube video (a dozen or so), locate and screenshot the frames for rounds 1-4, extract/OCR the characters from every board, and tally them. Not perfect, but I thought it was clever. flourishesThe Lounge Recreating the lounge was tough. Most YouTube footage is of actual gameplay, not lounge activity. I had to scan about 40 old YouTube videos of people playing OTHER Yahoo Games, before I found a single clean screenshot of a lobby from Yahoo Pool: Screenshot of the original Yahoo Games lobby from a Yahoo Pool video: olive table directory with Watch and Join buttons, ratings legend, chat log, and player rosterYouTube source, some juvenile names were redacted from the screenshot 😂 The screenshot was perfect, except that it was taken from Yahoo Pool, where tables seat two players versus Word Racer's eight seats per table. Fable's first attempt at an eight seater looked nothing like the original. The prompt to transmute it was quite involved. I manually typed out the ascii diagram and attached multiple screenshots. I was delighted and relieved when it worked: lounge_fix_prompt.md+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + Table | Who is Watching + +_____________________________________________________________+ + #1 | Watch | JOIN | JOIN | JOIN | JOIN | viewer_1, viewer2, viewer3 + | |______|______|______|______| + + | | JOIN | JOIN | JOIN | JOIN | + + |_______|______|______|______|______|_________________+ + | options: fast-paced, rated + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ TableWho is Watching #1WatchJoin0/8 seatedGuest-4d60's Table · Type: Public · unrated #2WatchJoin0/8 seatedGuest-9c3a's Table · Type: Public · rated Fable initial attempt TableWho is Watching #1Watch JoinJoinJoinJoin JoinJoinJoinJoin options: fast-paced, unrated, classic mode #2Watch JoinJoinJoinJoin JoinJoinJoinJoin options: fast-paced, rated, classic mode Word Racer tables after surgical prompt We need to fix the styling/display of the lounge tables in the lounge. See @lounge_tables.png for reference. The main issues are the following: kill this: 1 2kill the top margin and side margin between watch button, join button, and the rest of the cell, all buttons are compact for maximal use of space Watch has no padding and is the smallest cell that can accommodate the word watch Fonts for the buttons should be 2px smaller Rest of the text should also be 2px smaller 3Do not announce whose table it is, that breaks verisimilutude. We just need this text to says: "options: fast-paced, rated". Do not announce the table type either There should be a Watch button followed by four x2 rows of immediately adjacent JOIN buttons. They all must look exactly like this: @table_micro_view.png and we should just copy and paste the pixels of the buttons (with bounding boxes extracted from Gemini / ui-clone if possible). See grid diagram below for detail on structure If a player is sitting in one of the seats, we display their rating color and name prefix instead If a player is watching, we display them in the "Who is Watching" section on the lounge homepage. We will need 8 different join buttons and it will be a grid as follows: The + corresponds to a 2px black border 4Table and Who is Watching should be unbolded Left sidebar Play Now and Create Table buttons should have more rounded corners and a #CBC996 background Use subagents to explore existing codebase and keep context for orchestrator agent as pure as possible, then use an agent team to implement these changes Your odds of one-shotting are higher when you use a sniper..

UI Timelapse

Tech

  • Frontend: React 19, TypeScript, Vite
  • Game Engine: Python
  • Lounge Backend: Python
  • Database: DynamoDB
  • Backend Platform: AWS
  • IaC: Terraform (OpenTofu)
  • DNS: Cloudflare

Making it my own

I found it especially rewarding to build some new features I had always wanted to add to Word Racer. I kept all of these opt-in and made classic mode the default to appease the purists. But in my version of the game you can opt for a 4- or 5-letter minimum word length. If you tire of low-scoring boards, try "fun" mode, where rounds are pre-selected to contain tons of high-value words. I added a few nice social features, like a Game Review feature and og images. And I added the ability to fast-forward or scramble the board by unanimous vote.

Agentic Coding in 2026

About 75% of my work was tweaking minor details and fixing bugs that made the gameplay feel unpolished or jarring.

Replicating an old game like this from raw source videos will become easier as models improve, but agents are already quite good. The main bottleneck was the hundreds of judgment calls I had to make that any non-omniscient model would not be able to decide correctly. There were also some mundane edge cases, like forgetting to reset the players' scores to zero between games. Agents still struggle with the finer details of UI/UX, but human guidance goes a long way toward correcting that.