Impostor-Game banner

Impostor-Game

9 devlogs
55h 32m 10s

The Impostor is a multiplayer social deduction web app built with Next.js and TypeScript. Every round, all players receive the same secret word, except the impostor, who only knows the category or a clue. Players take turns giving one-word clues t…

The Impostor is a multiplayer social deduction web app built with Next.js and TypeScript. Every round, all players receive the same secret word, except the impostor, who only knows the category or a clue. Players take turns giving one-word clues to prove they know the word without revealing it, then everyone votes to eliminate a suspect. Innocents win by taking out all impostors before they get outnumbered. It supports 3 to 16 players, works online with room codes or locally in Pass & Play mode, comes in English and Spanish, and installs as a PWA straight to your home screen.

This project uses AI

I used AI as a pair programmer, but my priority was always to understand and write the code myself:

  • Initial UI Design: The first frontend version was generated with an AI web design tool to get a React/TS boilerplate quickly. I then heavily modified it, rewriting components and rebuilding the layout until little of the original remained.
  • Game Logic & Core Features: I wrote the logic, Redis backend, and auth system myself. AI helped me get unstuck with unfamiliar libraries like jose and Redis WATCH/EXEC patterns.
  • Styling: Animations and glassmorphism were coded manually. AI occasionally suggested Tailwind classes or visual ideas.
  • Documentation: Used AI to quickly look up react-i18next and Next.js App Router patterns without breaking flow.
  • Word & Clue Database: AI generated most of the secret words and clues across both languages, but it often repeated entries or got things wrong, so I had to manually review and clean everything up.
Demo Repository

Loading README...

Fede Vitu

Shipped this project!

Hours: 55.54
Cookies: 🍪 1221
Multiplier: 21.99 cookies/hr

i built a full-stack multiplayer social deduction game from scratch: online rooms, auth system, leaderboard, i18n, PWA and all. honestly i got inspired by all the YouTube and TikTok videos i kept watching and just wanted to make something like that for me and my friends. it somehow turned into the most complete project i’ve ever shipped lol. super proud of how polished it ended up looking and i can’t wait to see people actually play it

Fede Vitu

ok so… i think this one might actually be it. like the app feels done done and i’m really happy with how it turned out
when i started this i just wanted to make a basic impostor game. somehow it became a full-stack thing with Redis, i18n, PWA support and now a full auth system with a leaderboard lol. i did NOT see that coming. but honestly this was probably the most i’ve learned from a single project. most of these technologies i’d never really used before so it was the perfect excuse to actually dig into them
shoutout to my friends and family for playtesting and making me laugh the whole time. hope whoever plays this enjoys it as much as we did 🙏

anyway here’s what changed:
auth + leaderboard: added login/registration with bcryptjs and jose. wasn’t as bad as i expected since i’ve done auth before. now accounts track your stats and you show up on the leaderboard. guests can still play, they just don’t get saved
backend refactor: rewrote a ton of room logic to use atomic Redis operations. race conditions are basically gone now. also improved how abandoned players are detected and labeled
ui + i18n polish: swapped in proper fonts (Inter + Russo One), fixed a mobile overflow bug, added a leaderboard button to the hero page, and now the page title actually updates when you switch languages

that’s everything. it’s been a ride but i’m really proud of this one.

Attachment
Attachment
Attachment
0
Fede Vitu

ok so this is probably the biggest update i’ve ever pushed for impostor-game and i’m actually kinda proud of it lol

basically i ripped out the entire room system and rebuilt it from scratch using Redis on the backend. sounds boring but it means online rooms are actually stable now?? like disconnects don’t break everything anymore and dead rooms clean themselves up automatically. it was a nightmare to migrate but it’s so much better

also finally added proper i18n. the game is now fully playable in english AND spanish. there’s this little floating button that switches the language on the fly without reloading anything which is pretty clean ngl

oh and i redid the whole category system. hosts can now pick which categories they want before starting the match (food, countries, objects, etc.) and i added like hundreds of new words across both languages so the game has way more variety now

and as a last thing, turned the whole thing into a PWA. added icons, a manifest, and an install button that actually detects what device you’re on. so you can literally download it to your homescreen like a real app which is insane to me

overall it was a LOT of work getting all of this to play nice together but the app feels really polished now. let’s gooo 🚀

Attachment
Attachment
Attachment
0
Fede Vitu

This is one of the biggest updates I have shipped for Impostor-Game! I dedicated a lot of time to polishing the experience and making sure the app is bug-free, though I still have ambitious plans for the future, like adding i18n (English and Spanish), custom categories, expanding the word lists, and eventually turning it into a true SPA.

The biggest technical leap is the new local storage and session management system. The app now saves the room state and scores locally, so if someone accidentally refreshes, no progress is lost. I also added heartbeat tracking: if a player disconnects online, the host can pause and wait for them to reconnect, or simply kick them.

I completely overhauled the game loop as well. Lobbies now support 3 to 16 players with up to 4 random impostors, and rounds keep going until only two people are left or the impostors are caught. Finally, I added host controls to disable chat, fixed a critical bug preventing players from leaving rooms, polished the UI with entrance animations, and wrote the full README documentation.

Attachment
Attachment
0
Fede Vitu

This update was all about fixing the core game loop and making the gameplay fair and smooth. I finally squashed a really annoying bug in the local mode where a typo in the JSX was causing the game to show completely contradictory results at the end of a match. I also tweaked the local “Pass & Play” mode so you only have to see your roles in the first round instead of passing the phone around every single time, which makes the pacing way faster.

For the online mode, I completely refactored the main view component to clean up the code. The biggest gameplay change is that I locked down the voting system: eliminated players can no longer vote, you cannot vote for yourself, and roles are completely hidden so everyone looks neutral. I also changed the results screen to hide who voted for who, keeping the mystery alive by just showing the total vote counts per person. Everything is transitioning perfectly now thanks to a new helper function I wrote for the rounds. The game is feeling super solid and competitive. The latest game updates are coming soon!

Attachment
Attachment
0
Fede Vitu

This update makes the app feel so much more cohesive and polished. I finally built a unified navigation bar component to replace all the messy, hardcoded headers across the different game phases and lobbies, which cleans up the codebase a ton. I also updated the site metadata and added a sleek new app icon for browsers and mobile devices. Visually, I gave the footer a really cool glassmorphism effect with some backdrop blur so it sits nicely over the background elements. On the gameplay side, I tweaked the role reveal screen so players now have to actually hold the button down for half a second to advance the turn, preventing accidental skips. I also swapped the rendering logic on that screen to use inline CSS display toggles instead of destroying the elements, which makes the whole reveal feel way snappier. I’ve attached the new app icon. It will most likely change in future versions, but I wanted to start shaping the app with a logo.

Attachment
0
Fede Vitu

This update is a major visual polish for the game! I noticed that telling the different roles apart needed to be more intuitive, so I went through the entire app and completely updated the color scheme. Now, everything related to the innocent “Friend” role uses a distinct green “success” color instead of the generic accent color across the reveal phase, the scoreboard, and the rules. It makes reading the game state so much easier and faster during the rounds. I also gave the online lobby a massive facelift by wrapping the menus in sleek cards with smooth hover effects, and I disabled autocomplete on the inputs so your browser stops trying to autofill your name over the room codes. Finally, I tweaked the UI buttons to look sharper with rounded borders. The whole interface is feeling incredibly clean and responsive right now!

Attachment
Attachment
0
Fede Vitu

This update is all about making the game look and feel way better. I focused heavily on the UI and the overall user experience. I saw a really cool design on a website recently and got inspired to build a custom pointer grid overlay that follows your cursor around the screen, keeping that sharp red theme we have going. I also swapped out the boring flat background for a modern grid and added some fresh animations to the home page so it feels a lot more alive when you first load it up. On top of the visual upgrades, I squashed some annoying CSS bugs that were messing with the layout. Finally, I spent some time polishing the actual in-game phases to make the transition between rounds and voting much smoother. It is starting to feel super polished now!

Attachment
0
Fede Vitu

This is a massive update for Impostor-Game. I completely threw out the old Python and Flask foundation and rewrote the entire project from scratch using React, TypeScript, Next.js, Tailwind CSS, and Radix UI. This was a huge effort for me, and with the help of a little bit of AI, I was able to migrate to this new React-based system. Learning React is something I have always wanted to do, and I felt like this Hack Club project was the perfect moment to finally jump in. Instead of sticking to the backend tools I was already comfortable with, I wanted to step out of my comfort zone and use this project to really dive deep into modern web development and frontend architecture. I know I will probably run into some bugs by experimenting this much, but figuring them out is part of the learning process!

Along with the new tech stack, the UI got a complete overhaul. I moved away from the bright, friendly look and built a sleek, modern dark mode with sharp red accents and smooth animations to push what these new frameworkks can do. It feels much more like a real, polished party game now.

The best part is that the game is now 100% playable! Both main modes are fully functional. In “Play Online”, you can create or join a room with a code (minimum 4 players), and the server automatically handles assigning the impostor, the secret word, and the category to everyone’s personal devices. If you are all hanging out together, “Pass & Play” lets you run the whole game on a single phone that you pass around to check your roles. I also managed to implement a full chat system, the voting phase to kick out the suspected impostor, and the point-tracking system to kep score across rounds.

Attachment
0
Fede Vitu

This is the very first update and commit for Impostor-Game. The application is not playable yet, but I am super excited to finally start building it. I decided to use Python with Flask for the backend simply because it is the technology I am most used to and comfortable with. I was really inspired by how trendy this game is right now. I wanted to bring that exact vibe to the web to give people another way to hang out, have fun with friends or family at gatherings, and just share some laughs. So far, I have only set up the basic project structure and the initial UI, so there is still a massive amount of work to do and many features to add before it actually works. My goal is to keep maintaining and updating this application in the future until it is completely finished.

Attachment
0