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 .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 MongoDB Negamax / Alpha-Beta 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.
  • A polished checkers board with smooth move animations, five colour themes, sound and a flippable view.
  • Accounts with bcrypt-hashed passwords, where changing your password signs you out everywhere else.

⚙ Under the hood

The checkers opponent is the strongest engine on the site: an iterative-deepening negamax search with alpha-beta pruning, a Zobrist-hashed transposition table, killer-move and history ordering, and a quiescence search that resolves every pending capture before judging a position. Difficulty is a thinking-time budget from 0.1 to 3 seconds; with a second or more it routinely sees 15+ moves ahead, and in head-to-head testing it won every game against the site's previous engine.

Othello, Breakthrough and Konane use their own negamax searches, each with an evaluation tuned to the game: material and pawn structure for Breakthrough, mobility for Konane. Hex, where deep search doesn't scale, instead uses a potential-field AI that measures how close each player is to linking their edges through every cell.

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 →
🧩

Puzzle Games

A set of local, self-contained browser puzzle games, quick to pick up, no accounts needed.

izrite.com/games →

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 →