Professional

Hello, world.

12 years in industry as a software engineer, building and running production systems. That includes working on an industry-leading lead management tool, handling complex calculations, big data and mapping intelligence; building auto-scaling processing workers to handle load, database administration, and turning customer requirements into systems that hold up at scale. These are the technologies I've used professionally:

Python JavaScript Node.js Express .NET React Vue MySQL SQL Server MongoDB Redis Elasticsearch Data processing Encryption Linux/Ubuntu WebSockets

Solo side projects

A collection of solo projects.

Built end to end in my own time: real-time multiplayer servers, minimalist web apps, and personal productivity tools. Mostly an excuse to solve a tricky problem or build a tool I needed.

Projects

Landing

Live

A personal markdown notes and task app, with optional end-to-end encrypted private notes and a few games built in for downtime.

Crystal Kemal MySQL Alpine.js E2E encryption PWA

Features

  • Freeform markdown note-taking alongside a simple task list, where each task carries one of three statuses: todo, doing, or done.
  • Any note can optionally be encrypted end-to-end with its own separate password, for anything meant to stay private.
  • A few built-in games 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.

izrite.com/landing →

Bible Reader

Live

A minimalist Bible reading app built on the public-domain Berean Standard Bible, with accounts, notes, and cross-references.

Node.js Express SQLite EJS Alpine.js PWA

Features

  • Clean chapter-by-chapter reading (/read/GEN/1) preserving poetry line breaks, section headings, Psalm superscriptions, and "words of Jesus" styling.
  • Personal accounts with notes attached to specific passages.
  • Automatic linking of Bible references mentioned inside your own notes.
  • Rate-limited, session-based auth with no third-party accounts required.

⚙ 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 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.

izrite.com/bible →

Paddlebrook

In progress

A calm, cosy online game about ducks, a pond and a home of your own. Fish, collect and dress your duck, with no combat and no hurry. No framework and no sprite art.

Node.js Express EJS Canvas 2D Web Audio ws Binary protocol PWA

Features

  • Fishing, bug catching, fossil digging and flower growing, with what's about following the seasons, day and night, and the rain, on one clock shared by everyone.
  • A museum to fill with what you find, and a cottage and garden of your own to decorate, grow and show off to visitors.
  • Villagers to chat with, bounties to earn stamps for rare rewards, and a boat out to a tropical island.
  • A duck you can dress up, that breathes, blinks and waddles.
  • Everything drawn from canvas shapes and synthesised with Web Audio, with no image or audio files.

⚙ Under the hood

An authoritative server tick and the same zone-broadcast / private / single-binary-buffer protocol as Otter Wilds. Every item is one row in a single registry that the shops, wardrobe and admin pages are all built from.

What's in the water and the grass is never sent over the wire: each player's fish and bugs are a pure function of their username and the clock, so the server and browser work out identical ones and only events travel. Daily changes work the same way, so no calendar is ever stored.

izrite.com/paddlebrook →

Board Games

V1

Five classic strategy games (Checkers, Hex, Othello, Breakthrough and Konane), played live against friends or against an AI opponent built specifically for each game.

Node.js Express Nunjucks Alpine.js ws SQLite Negamax / Alpha-Beta Monte Carlo tree search Worker processes PWA

Features

  • Real-time play over WebSockets, against another person or a built-in AI with a difficulty picker from gentle to genuinely hard.
  • Every game has its own dedicated opponent, built around whatever technique suits that game rather than one generic engine bolted on everywhere.
  • The server is the referee: it validates every move and decides when the game is won, so the browser can't cheat.
  • One shared interface across all five: animated moves, board themes, sound and a flippable view.
  • Accounts with rolling sessions, where changing your password signs you out everywhere else.

⚙ Under the hood

Checkers, Othello and Breakthrough use iterative-deepening negamax with alpha-beta pruning, transposition tables and quiescence or endgame search, each with an evaluation tuned to its game. Each rebuilt engine won every test game against the one it replaced: the new Breakthrough AI went 60–0, winning even on 30ms a move against the old one's 1.5 seconds, and Othello at under 10ms a move beats the old top level by over 40 discs a game.

Hex, where deep search doesn't scale, uses Monte Carlo tree search with RAVE at its top levels, beating the potential-field AI of the lower levels about nine games in ten.

All AI thinking runs in a pool of separate worker processes, so a deep search never stalls the game server for anyone else.

izrite.com/boardgames →

Kanban

Live

A KanbanFlow-style task board: To-do, Doing and Done columns, colour-coded tasks and as many boards as you like, in a single server-rendered page.

Node.js Express SQLite EJS Alpine.js PWA

Features

  • Drag-and-drop between and within columns, with the card moving live into place as you drag.
  • A colour legend per board: filter by colour, rename or recolour them, and untick the ones you don't use.
  • Open tasks live in the URL and browser history, so Back closes them and unsaved edits prompt before they're lost.
  • Accounts with rolling sessions, where changing your password logs you out everywhere else.
  • Light and dark themes with no flash on load, and installable as an app.

⚙ Under the hood

Moves are applied in the browser straight away using the same reordering logic as the server, then rolled back if the save fails. While dragging, the original card stays hidden in the page rather than removed, because browsers only report the end of a drag to an element that's still there.

izrite.com/kanban →

Other projects

🔲

Picross

50 active players

A nonogram-style picture logic puzzle, picked up by a small steady player base.

izrite.com/picross →
🦦

Otter Wilds

A cosy online survival-crafting game with otters: gather, craft and fight your way up through tiers of tools and gear.

izrite.com/otter-wilds →

Earlier experiments

🦆

Club Duck

A Club Penguin-style social MMO with shared plazas, a player economy and minigames.

izrite.com/quack →
⚔️

The First Light

An isometric, tick-based skilling MMO built on Club Duck's avatars and architecture.

izrite.com/tfl →

Favourite tech

SQLite Node.js Express Alpine.js Crystal Kemal Ubuntu Elasticsearch MariaDB nginx PM2