Real jobs. Ridiculous résumés.
A free online party game for 3 to 12 friends. One player is hiring.
Everyone else talks their way into the job with four absurd qualifications.
No sign-up · English · Türkçe · Italiano
- Open a room. Someone creates a room and shares the link. Everyone else types a name and joins. No accounts.
- Read the job opening. Each round, one player is the employer and turns over a job, like Hostage Negotiator or Mall Santa.
- Build your résumé. Every applicant gets four qualification cards and has a minute to swap them with the cards in the middle.
- Pitch. Applicants take turns revealing their cards one at a time and explaining why Emotional Support Chicken makes them perfect for the job. Every card has to be used.
- Vote. While the employer thinks it over, everyone else votes for the funniest pitch. The fan favorite earns a star.
- Hire. The employer picks the best pitch and the winner keeps the job card. Hiring closes the vote. Can't decide? Call a tiebreaker: each finalist gets two extra cards and uses one for a final argument.
Each job and each star is a point. Whoever has the most points at the end is Employee of the Month.
Play in the same room or over a video call: the site deals the cards, you do the talking.
| Build your résumé | Pitch | Get hired |
|---|---|---|
![]() |
![]() |
![]() |
Play
- Rooms with a 4-letter code. Share
yoursite.com/ABCDand friends land straight in the lobby. - Three languages, per player. Each person picks EN, TR or IT; the cards switch language on their screen only, so mixed groups can play together.
- 106 jobs and 325 qualifications, from Professional Line Stander to Emotional Support Chicken.
- Drop-in, drop-out. Refresh, close the tab or lose Wi-Fi and you rejoin your seat with your cards and points. On another device, type the same name to get your seat back. Late joiners get their turn as employer. If the host leaves, the next player takes over.
Rules
- From the original game: 10 open cards in the middle, everyone hires twice (once with 7+ players), the tiebreaker, and an optional final round where applicants compete for the employer's real job.
- Audience vote: a fan-favorite star each round (4+ players; with 3 players there are only two applicants to vote between).
- Timers that keep the game moving: résumé building and each pitch end on their own when time runs out. Pick 30 to 120 seconds, or turn them off.
- "Running late" mode: applicants only see their cards while pitching.
Make it your group's game
- Your own cards. Anyone in the lobby can add jobs and qualifications for that room: inside jokes, friends' names, office lore.
- Family mode. Leaves out the cards marked 18+.
- Host tools. Remove players in the lobby, skip a stuck round, or end the game.
Requires Node.js 20 or newer.
git clone https://github.com/armanalis/funemployed.git
cd funemployed
npm install
npm startOpen http://localhost:3000. Friends on the same Wi-Fi can join at http://<your-computer-ip>:3000.
Testing alone? Create a room, then fill it with bots that swap cards, pitch and hire on their own:
npm run bots -- ABCD 3 # room code, number of botsRun the tests with npm test.
| To change | Edit |
|---|---|
| Buy Me a Coffee link | public/js/config.js |
| Job and qualification cards | public/shared/cards.json |
| Interface text | public/js/i18n.js |
| Game rules | server/game.js |
Cards live in one JSON file with a text for every language. Mark innuendo with "adult": true so family mode leaves it out:
{ "id": 326, "tr": "Evcil Ejderha", "en": "Pet Dragon", "it": "Drago Domestico" }Add new cards at the end of the list. A card's position is its id during a game, so reordering the list mid-game would mix up cards in open rooms. npm test fails if a card is missing a language.
- Add the language code to
LANGSinserver/game.jsandpublic/js/i18n.js. - Copy the
enblock ini18n.jsand translate it. - Add the new key to every card in
cards.json.
server/index.js Express serves the site; Socket.IO carries every game action
server/game.js The rules: one Room object per game, kept in memory
server/rooms.js Room codes, the room limit and clean-up of unused rooms
public/ The browser app (Preact + htm, no build step)
public/shared/ cards.json, read by both the server and the browser
scripts/bots.js Bot players for testing
The server is the only source of truth. Each player receives a view of the game with other players' hands hidden, so nobody can peek at cards through the browser's dev tools.
There is no database. Cards ship with the code; rooms, including the cards players add, live in server memory for 30 minutes after the last player leaves (5 minutes if nobody ever joined). The server holds at most 2,000 rooms, and each IP address can create 10 rooms per 10 minutes, so a script can't fill it up. A server restart ends open games.
The game needs one long-running Node.js process, because rooms live in memory and players stay connected over WebSockets. Hosts like Render, Railway or Fly.io work as-is: set the start command to npm start; the server reads the PORT environment variable. Run a single instance, since rooms aren't shared between servers. On Render the room limit reads the visitor's address from Cloudflare's CF-Connecting-IP header; on other hosts it uses the connection's address, so behind another proxy every visitor would share one limit.
Code released under the MIT License.
This is an unofficial fan project. It is not affiliated with or endorsed by the publishers of the Funemployed card game.



