Playground

Things I built because I wanted to find out whether they would work. Nothing here is a product. Most of it is one file of vanilla JavaScript, and all of it is clickable right now.

The Wall

A shared 64x64 canvas. Everyone gets one pixel every ten minutes, rate-limited server-side by a Cloudflare Worker, so the picture is whatever visitors collectively decide it is.

Cloudflare Worker Canvas Multiplayer

Earth Observatory

A 3D globe plotting live natural events from NASA's EONET feed — wildfires, storms, volcanoes — fetched at runtime and rendered on a rotating sphere.

NASA EONET WebGL Live data

Terminal

The whole site behind a command line. Type `help` and navigate the portfolio the way you would navigate a filesystem.

Vanilla JS Alt navigation

Generative Art

Flow-field experiments that redraw on every run and export to PNG. Same algorithm, never the same output twice.

Canvas Generative

Code Golf

Solve small challenges in the fewest characters possible. Scored on length, which is a good way to learn how little code a problem actually needs.

Challenges JS

Ten Small Games

Hangman, Code Snake, Whack-a-Bug, a typing test, dev bingo, an emoji clicker and more. All vanilla JavaScript, no framework, no build step.

Vanilla JS 10 games

Developer Tools

QR codes, colour palettes, password and lorem generators, Base64, JSON formatting. Client-side only, so nothing you paste ever leaves the tab.

Client-side 6 tools

CSS Art

Illustrations built from pure CSS — no images, no SVG. Mostly an excuse to find out how far box-shadow and gradients can be pushed.

CSS only

Guestbook

A retro guestbook backed by Google Sheets instead of a database. Sign it if you got this far.

Google Sheets No DB

There is also a page that is not linked from anywhere. The footer knows where it is.