WreckTheWeb
Turn any web page into a destructible arena — alone or with friends.
A Chrome extension game that freezes the page you're on and lets you smash it apart with a khukuri, guns, rockets and fire — alone, or with up to eight friends in real-time multiplayer. Press Esc and the page is exactly as it was.
- Design + Engineering
- 2026
- Shipped

Demo
Overview
WreckTheWeb turns the real page in front of you into a game. Click the icon and the page photographs itself screen by screen, its layout is read into hundreds of breakable pieces with materials — glass images, wooden headlines, paper text, metal menus — and a WebGL canvas takes its place. You walk it top to bottom as a small Nepali agent and tear it apart: cards crack and collapse along Voronoi fractures, the khukuri cuts pieces in two, fire spreads and burns text away, and the debris falls under physics and piles up at the bottom. Nothing is actually touched; leaving the game removes the canvas and the page is unchanged. In multiplayer the host shares a picture of their page with a room on Cloudflare, friends join with a six-letter code, and everyone fights on the same page in timed Versus rounds. It's published on the Chrome Web Store.
Problem
"Destroy a website" games load the target inside an iframe or a scraped copy, which breaks on most real sites — frame blocking, logins, missing assets — and never looks like the page you were actually on. Doing it properly means wrecking the live page without touching it, keeping it smooth on any layout, and letting friends who can't even open that page play on it together.
Approach
Run where the page already is: a content script on the live, already-loaded tab. Photograph it, read its layout once, and draw the game over the picture — destruction is painted onto the screenshots, never done to the DOM, so restoring the page is just removing one overlay. For multiplayer, share the host's capture with the room instead of syncing state, so every player builds the identical world and only the inputs travel.
Architecture
A Manifest V3 extension built with WXT, needing only activeTab, scripting and storage. The content script scrolls the page while the background worker screenshots each screen; a scanner turns the DOM into breakable elements with materials and HP. PixiJS renders the page tiles, debris meshes textured from the screenshots, a GLSL burn shader and particles; matter.js runs the debris, which is baked into a texture once it settles. Every shot goes through a Transport — echoed locally offline, or sent over a WebSocket held by the background worker to a Cloudflare Durable Object per room, which orders shots, keeps health and rounds, and validates every message with Zod.
Key interactions
- The whole page, captured screen by screen, becomes a world you walk from navbar to footer
- Damage lives on Voronoi cells: elements collapse past 60% with ragged edges left clinging
- The khukuri splits pieces along its cut; fire spreads and burns pieces away with a shader
- Debris falls under physics and bakes into a rubble pile you can dig back through
- Seeded shots break the page identically on every player's screen
- Late joiners catch up silently; dropped players reconnect as themselves
- Sound synthesised at play time with Web Audio — no audio files shipped
Technical decisions
Paint over the page, never change it
Every bit of destruction is drawn over screenshots; the real DOM is only read. That made the restore guarantee trivial — remove one overlay and the page is as it was — and it meant the game never fights the site's own scripts or styles.
Sync inputs, not state
A wrecked page is hundreds of elements, thousands of cells, craters and fires. Instead of streaming that, the room stamps each shot with an order and sends it to everyone; seeded randomness makes every client break the page the same way. A shot is a few dozen bytes.
The host shares their page
Matching elements across players' different layouts was fragile. Uploading the host's capture to the room means everyone plays the identical world — positions are plain pixels — and it works on logged-in pages friends could never open themselves.
Watch for silence, not for closed sockets
A dropped Wi-Fi leaves a WebSocket open for minutes. Both ends now treat 15 seconds of silence as a drop, and a returning player's token takes over their old connection, so nobody is left frozen on the others' screens.
What I took from it
- The hard part of a browser game isn't the game; it's living politely inside someone else's page.
- Destruction only reads as destruction once it leaves ragged edges — the first version looked like redaction.
- Real networks drop silently; the reconnect path deserved as much design as the happy path.