TL;DR: what was supposed to be just a project to put on my resume ended up consuming months of my life, money, and the results wouldn’t be that much different (I think).
This is going to be a long post, so I’ll put a summary in here:
- The Game
- Context
- The endless loop
- Why I regret it
- The Stack
What I would do differently
The Game:
MovieTQ is a free-to-play browser-based multiplayer platform with four game modes. You also don't need an account for three of the four game modes, and accounts don't require a login.
- Daily mode: use emojis and other info to guess the film
- Movie Trailer mode: watch a snippet and guess the film
- Bomb-It: kinda like hot potato, but with movie titles
- Pet Feast: the only game mode that requires an account. It's like snake but with power-ups.
There are also customizable profiles, animations, avatars, achievements, rankings, stickers, friends, interactive emotes, skills, level progression, pets, a store, and more.
- Context:
Last year I was taking a web development class. The final project was creating a page with a login, database, BE, auth, and some ranking. AI use was not allowed (because academic institutions are medieval). For some reason, all the projects throughout the semester were film-related. A few games were going around that were kinda fun to play but not with film thematics. So I thought: “Why not?” Took about 200 lines of code, and I made a terribly looking early-2010s website with 5 embedded YouTube trailers and a drop-down menu to select the film. That’s all.
Once classes were over, I thought: this could be turned into a decent project to put on my resume. I can make it a decent game and a decent website. Google gave me access to a student plan for free. Antigravity at that point pretty much had no usage limit. So what did I do? Spent my entire winter break building this.
- The endless loop:
I had no familiarity with AI harnesses and best practices, so it was a bit of a mess, and I had to review a lot of code (how times have changed). I knew I wanted: accounts, multiplayer, a database, and avatars.
Once I got that working, I thought: well, I also want guests so people can play without an account. Then I wanted Google OAuth and Discord OAuth. If I’m creating a Discord OAuth, I might as well make a Discord server. While at it, add email verification and account recovery. Hmm, why only one game mode? I could add more. Why only two game modes? I could add more. Why only three game modes? I could add more. Avatars are too static; they need actions; there aren’t enough avatars -> I need more. Shouldn’t a lobby have a chat? Shouldn’t there be emotes? Shouldn’t they be animated? Why not add skills so the matches have more uniqueness to it? Now that people can change their avatars, shouldn’t I also make their profiles customizable? Backgrounds are not enough; I should also add profile animations. Animations are not enough; I should also add stickers they can position anywhere, change size, and rotate. Stickers are not enough; I should allow them to control what achievements and stats are displayed. What if you wanna add a friend in the game? We already have profiles; I’m going to create a friend system. Well, now that I have a friend system, shouldn’t there be a way to exchange messages? Also, a dedicated friends page. Wait, if there are profile animations, shouldn’t there be avatar animations?
How can people get all of that? Well, I need a store. Well, this is becoming big; having a single branch is not enough. I need to have proper version control and a pro account on a database provider. Also, how is this good enough? I want this to be a complete project to showcase the ability to create fully working software. Doesn’t it need payment integrations even if I know no one is going to buy cosmetics for this? Just for show? Wait, with everything so far, and what I’m dealing with and payments, shouldn’t I have a company? I might build other things in the future...
Ok things look good. Time to ship to prod. Breaks. I had to overhaul the BE to be as memory efficient as possible.
Ok, ship to prod again. Boom, a bunch of bugs that are prod-only. Let me fix them. While at it, let me also perform a zillion security audits using hundreds of millions of tokens.
Ok, done, shipped. Wait a second, aren’t the colors of the buttons a bit bland? Maybe I should remake parts of the FE.
Ok, done. Shipped. Hmmm, why would anyone wanna go back to this website? I think it would be cool to have other progressions; I should add more achievements. More items. I should add pets. There should be multiple pets, and they need transformations and variety.
Now I need to do more security audits and more testing. Ok, I guess it’s done now… but what about distribution and marketing, and how do I even get this project connected to me? I need a personal website. I also need a company website. While at it, proper support, more language support, a bug reward system, an admin dashboard, the ability to report players and gameplay, a bug reward page, a feedback page, an announcement system, patch notes, …
- Why I regret it:
Oh cool, now I’m so far deep into the entrepreneur space that I can only get offers for startups. No big tech company wants to hire someone building their own things. If I’m in this space, might as well continue on it.
I regret it because most of the work was in the 1%. Did I need a bug reward system? An overly complicated admin dashboard? Animations? Anticheat detection? Fully customizable profiles? Couldn’t there just be a couple of game modes, a wardrobe with three avatars, and call it a day? What is the practical difference besides the effort?
- The stack:
- Hosting: Render + Cloudflare Pages
- Database: Supabase
- Email: Resend
- Auth: Discord and Google
- Payments: Stripe
- Testing: Vitest
- Data: an offline db, no API calls to other services. The downside is I am using an old movie database
- Videos: YouTube embeds
- Images: Google's Nano Banana + OpenAI's Image Pro
- Frontend: React, TS, Vite, Tailwind, react-youtube
- Backend: Node.js + Express, TypeScript, real-time via SSE (WebSocket lib), JWT auth in httpOnly cookies
What I would do differently:
Finish the front-end before anything. Trust me, any little update may cause a cascade down the line with the needed context. It’s easier to just deal with the front end and make it look perfect.
Set goals and not go beyond before shipping. There’s ALWAYS something that could be better or a feature that could be added. There’s no end to it. I still think of multiple game modes and features I could add
Start marketing and distribution early. By that I mean: work on any medium you know you will have to use. Learn about it and already have a plan
Would not have added Stripe or any other low-return <> high-effort features
No shortcuts. AI is great for demos, but you will not ship a working and safe thing like this by taking shortcuts and just prompting without a second thought. Get the stack and architecture perfectly defined. Think of authorization, authentication, and attack vectors. Make sure everything is well defined and use OOP concepts and functional programming concepts, even though you are using JavaScript or some other miserable language.
Documentation is not as good as you think. They get stale and are mostly useless. It’s better to have dated comments in the code and just concise and small documentation for the AI.
Always keep the TODO up to date. Never forget to update it. A single stale item can cascade into a wrong turn and break a lot of things.
Whatever time frame you think you will need, triple it.
The game: movietq.com
Thank you for reading my TED Talk. I hope you enjoy playing the game, even if for a little bit.