Builds
A handful of projects built end to end: real-time multiplayer servers, minimalist web apps, and a personal productivity tool. Each one is about solving one hard problem properly.
12 years industry experience.
Projects
A personal markdown notes and task app, with optional end-to-end encrypted private notes and a few games built in for downtime.
⚙ Under the hood
Per-note encryption is built on industry-standard cryptography (AES-256, with the key derived from your chosen password) applied entirely client-side, so the server only ever stores ciphertext and never sees the password or the plaintext note.
The checkers opponent runs a negamax search with alpha-beta pruning, sensible move ordering, and a tuned position evaluation layered on top, strong enough to give a genuinely tough game rather than an easily-beaten scripted AI.
A minimalist Bible reading app built on the public-domain Berean Standard Bible, with accounts, notes, and cross-references.
/read/GEN/1) preserving poetry line breaks, section headings, Psalm superscriptions, and "words of Jesus" styling.⚙ Under the hood
The Bible text is imported from the official BSB USJ export straight into SQLite via an idempotent, safely re-runnable import script. Translator footnotes are deliberately dropped; everything structural is kept.
Sessions run through a hand-written SQLite-backed express-session store rather than a third-party one, written specifically to avoid pulling a GPL-licensed dependency into a project chosen from the ground up to be free of licensing entanglements.
A Club Penguin-style social MMO with free-movement plazas, a player economy, and a room full of minigames, built with no framework and no sprite art.
⚙ Under the hood
The server runs one authoritative 120ms tick, so nothing happens the instant a message arrives; it just queues. Updates go out as a single binary buffer per player per tick, split into zone broadcasts (everyone in the room) and private messages (just you); a tick with nothing to report sends nothing at all.
Every duck, pet, and piece of furniture is depth-sorted by its real floor position. Rather than hand-tuning where each sprite's "feet" are, the server renders each one once to an offscreen canvas and measures its true lowest opaque pixel automatically, so a duck can correctly walk behind a bookshelf without anyone manually tuning an offset.
An isometric tile-based skilling MMO, merging a tick-based tile world with Club Duck's avatars and architecture.
⚙ Under the hood
The whole world still runs on one authoritative 280ms tick, nothing happens until the tick fires, using the same zone-broadcast / private / single-binary-buffer wire scheme as Club Duck.
A random asset id is generated on every server restart and injected into the client; the client echoes it back on join as its protocol version, so a stale client that hasn't refreshed since the last restart gets rejected outright instead of quietly desyncing.
Every interactable, a resource node, a shop, a portal, an NPC, a mob, resolves the same way: click a tile, walk to it, and whatever's standing there fires automatically. There's no separate gather, talk, or attack command. Shop buy/sell prices also keep a fixed, genuine gap in both directions, so the only ways to actually profit are gathering or the Leatherworking processing chain, never arbitrage against a shop's own prices.
A collection of multiplayer board games, each paired with its own AI opponent. There's no shared engine; each game gets whichever technique actually suits it.
⚙ Under the hood
Rather than reusing one general-purpose engine across every board, each game's AI is built around whatever technique actually fits its structure: search-based opponents for games with small branching factors, sampling-based ones for games where deep search doesn't scale as well. The difficulty and play style end up tuned per game, not a one-size-fits-all bot.
Other projects