BUILD LOG ACTIVE

PROJECTS

Things I've built, most of which live on this site.

// SITE ONLINE // GAMES LOADED // TOOLS RUNNING // SIGNALS ACTIVE //

> SAYERH.NETLIFY.APP

This site. A personal space: part arcade, part toolbox, part notebook. Built from scratch with HTML, CSS, and plain JavaScript — no framework, no build step. Started as a way to learn frontend development and turned into something I actually use and update.

The terminal aesthetic wasn't planned — it grew from early builds and keeping what worked. Everything is static, hosted on Netlify, and always being updated.

html / css / js netlify static ongoing

> NOOM'S TD

A tower defense game built entirely with Canvas 2D and the Web Audio API. No libraries. You place towers to stop waves of enemies reaching the end of the path. It escalates — waves get modifiers, enemies get harder, the game starts to feel like it's pushing back.

Built because I wanted something more substantial than a clone: actual progression, boss mechanics, and a procedurally generated audio system running entirely in the browser.

canvas 2d web audio api tower defense

> ARCADE COLLECTION

15 games, all built in-browser as single HTML files. Snake, Tetris, Pac-Man, Asteroids, Space Invaders, Breakout, 2048, Minesweeper, Pong, Memory, Text RPG, Typing Test, and a few others. Each one started as a clone to understand the mechanics, then went further.

> TOOL COLLECTION

14 tools. Cipher, hash generator, regex tester, colour picker, password generator, base converter, timestamp converter, ASCII art, matrix rain, and others. Built when I wanted the thing to exist and didn't want to use an ad-covered version.

> PRIME CHECKER

More than a primality test. Handles factorisation, Goldbach's conjecture verification, twin prime detection, and a Sieve of Eratosthenes visualiser. The sieve was the reason this got built — I wanted to see the pattern and couldn't find a version that showed it the right way.

> [REDACTED]

Something else was built. It is on this site. It is not linked from here.

// SIGNAL_CORRUPTED — if you are looking for it, you already know where it is