Hello comrade! Tap Tap Revolution — a clicker where you start a revolution, take power, and immediately regret it

Hello, comrade!

The movement is called Tap Tap Revolution. It currently consists of you, 15 rubles and a cough. It needs taps.

Tap → supporters. Supporters → donations. Donations → reading circles, an underground printing press, a newspaper, and eventually men with Mausers. Ordinary incremental arithmetic, except the secret police subscribes to your newsletter.

Get too loud and you're arrested. That's not a debuff, it's a whole mode: dig with the spoon your aunt baked into a pie, bribe the warden, blow the escape, watch them fill the tunnel back in. Nobody clicks past that one.

Then you storm the palace, and the actual nightmare begins: hold power for 100 days. Bread runs out. A general sends threatening telegrams with three misspellings of your surname. The treasurer takes the party funds to a spa town for his nerves. The cat gets a ministry.

Free, browser, works on a phone, no signup, about three days to finish. Nine languages. Fictional empire, comedy throughout, the anarchist holds a patent on bombs.

Link in the comments. Tap Tap Revolution — vote early, vote often.

AI disclosure: built with heavy AI assistance — art, code, text and the translations.

reddit.com
u/SomeRussianMike — 5 days ago

Quake3 Arena meets Roblox!

I've been building out a small browser games portal, and the last one got out of hand: a Quake 3-style arena shooter with blocky Roblox-looking characters. One HTML file, 2513 lines, ~200 KB. Three.js from a CDN, no build step, no bundler, no npm install. You open the file and it runs.

Some things I learned that I think are worth sharing:

The map is a config object, not a level editor. Everything lives in a MAP const at the top — weapon set, ammo spawn points, health pickups, whether corpses drop crates and how long they last. Ammo points are just [x, y, z, weaponType]arrays. Moving the sniper to a different tower is editing four numbers. This turned out to be the single best decision in the project, because iterating on the arena with an AI is much easier when the whole level is 8 lines of data instead of scattered geometry calls.

I had to give it a grid rule. Early on the arena looked like melted Lego — every generated wall was at a slightly different offset. So I wrote the rule down explicitly: 1 m grid, walls are 4 m cubes, XZ faces snap to whole meters, Y allows half-steps for stairs, masonry offsets are 0 or ±1. Once that constraint was in the prompt, the geometry stopped drifting. Constraints beat corrections.

The bug I'd never have found on my own: adding and removing lights in Three.js recompiles every shader in the scene, so each rocket launch froze the frame for a beat. The fix is a fixed pool of six PointLights that get grabbed and released instead of created. Same for the death effect — the grayscale filter makes the canvas a stacking context, which silently ate the HUD until I set explicit z-indexes.

Multiplayer is 176 lines and no game logic. The server is a dumb WebSocket relay that does rooms and host election, nothing else. Clients trust each other — it's a friends-by-link game, not ranked. Each client owns its own HP, the room host simulates the bots, and the shooter computes hits and tells the victim. State goes out at 20 Hz with snapshot interpolation and an adaptive delay of about 2.2× the packet interval. Pickups still aren't synced. It's fine. It's a prototype.

Six weapons: machinegun, shotgun, rockets, railgun, a knife with infinite swings, and a scoped sniper that one-shots and has deliberately terrible spread if you fire it from the hip. Bots don't get the sniper, because that was miserable.

Still desktop only — pointer lock and WASD, no touch controls yet, so mobile gets an honest "desktop only" screen instead of a broken one.

Link in the comments. Happy to answer anything about the netcode or the single-file setup.

u/SomeRussianMike — 18 days ago