Here I'll talk more about my network-based Uno game, coded in Python using Flask.
The Rules (my variant)
Unlike my poker project, everyone knows Uno — so I'll just cover the variant I implemented. You can stack a +4 on a +2. You can play a +4 any time, not just when it's your only legal card. If you draw a card that's immediately playable, you can lay it. You only draw once when stuck; after drawing you may play one card if legal, then your turn ends.
Declaring the Cards
As always, I started by defining the deck — all numbered cards per colour, plus action cards (Skip, Reverse, Draw 2) and wild cards (Colour , Draw 4).
The Network Layer
The most interesting part was the net code. I defined Flask routes like draw_card() and play_card(). The frontend passed the player's ID from the URL as an argument, and play_card() also received which card the user clicked. The server then validated legality (already visualised in the frontend with red/green card borders), updated the game state, and flipped whose turn it was.
The UI also showed each player's remaining card count in real time. You could scale the deck size and number of wild cards to support more players if needed.
One fun quirk: if you changed the player ID in the URL mid-round you could play cards for your opponent. No protection was built in — for a small local-network project it doesn't really matter.
The Color-Picker Fix
I actually came back to this project faster than usual. The "choose a colour" dropdown for wild cards was confusing, so I redesigned it.
Much cleaner now — four big colour buttons instead of a dropdown.
A "UNO!" call button when a player is down to one card would be a nice addition. The dark theme is also on the list, though it's not trivial to retrofit. No deadline set though.