Personal projects

Built outside of client work

82-0

Web application

Draft an all-time NBA five, then simulate its season

A browser game: five spins deal you an all-time NBA starting five, and a simulation engine plays out an 82-game season to return the record. It runs on a database of 13,991 player-team-decade records back to 1960, rated by possession value rather than raw scoring. Four game modes, a graded history with filters and statistics, and a league-wide leaderboard with side-by-side player comparison. No framework and no runtime dependencies — plain HTML, CSS and ES modules, installable as a PWA.

  • JavaScript (ES modules)
  • HTML5
  • CSS
  • PWA
  • Service Worker
  • Node.js
  • nginx
  • Docker
  • Traefik

Agile

Web application

Self-hosted project management, running in production

A project management app in Jira territory, deliberately smaller: one work-item hierarchy of epics, stories, tasks, bugs and subtasks behind a backlog, scrum and kanban boards, a roadmap of epics and a list. A child is always planned where its parent is, so moving a story into a sprint takes its tasks along. The project is also drawn as an editable map whose nodes carry their own sketch-canvas thumbnails, and items can be bound to the tables and columns of the managed project’s own Postgres or MySQL database — read-only at the connection, with no user-supplied SQL. A public API with tokens can do everything the UI can.

  • Angular 20
  • FastAPI
  • Python
  • SQLAlchemy
  • PostgreSQL
  • Alembic
  • elkjs
  • Fabric.js
  • Docker
  • Traefik

Automata

Web application

Self-hosted test management, running in production

A test management platform built on the model Project → Suite → Case → Plan → Run → Result → Defect. A hierarchical repository of test cases with steps and tags, reusable test plans, and an execution wizard that walks one case per screen — per-step results, a verdict, comments, screenshots and a defect opened straight from a failure. Runs freeze their cases, so editing the repository never rewrites past results. Closed registration, JWT auth with rotating refresh tokens, and a dashboard with pass rate, progress and open defects by severity.

  • Angular 20
  • Angular Material
  • NestJS
  • TypeScript
  • PostgreSQL
  • Prisma
  • Docker
  • Traefik

dockmaster

Desktop application

A Docker manager that shows what is unused and what it costs

A GTK4 desktop application for containers, images, volumes, networks, build cache and compose projects, with an honest account of what deleting each would free — numbers that reconcile exactly with docker system df. Volumes are browsed and exported through a throwaway read-only container, with no password. Inspection is read-only by construction; every change, from a single Stop to a 35 GB prune, becomes a script you can read before it runs, with prechecks that re-verify Docker state at the moment it executes.

  • Python
  • GTK4
  • libadwaita
  • PyGObject
  • Docker
  • pkexec

Gazdinstvo

Web application

Cattle farm management, running in production

A full-stack farm management application for tracking cattle, daily actions, a farm calendar and finances. Installable as a PWA, so it works from a phone in the field. Deployed with Docker behind a Traefik reverse proxy with automatic Let’s Encrypt certificates.

  • Angular 17
  • Node.js
  • Express
  • SQLite
  • JWT
  • PWA
  • Docker
  • Traefik

Linux Master

Desktop application

Audit a Debian-based Linux system, and fix only what you pick

A GTK4 desktop application (sysaudit) that runs 59 read-only checks across 11 categories — updates, storage, caches, memory, services, logs, hardware, security, performance — and shows every finding with the evidence behind it. Remediations are opt-in, tiered by risk, and applied as a single pkexec batch; advisory findings are structurally unable to execute. Exports a self-contained HTML report and diffs each scan against the last.

  • Python
  • GTK4
  • libadwaita
  • PyGObject
  • systemd
  • pkexec

Media Stream

Web application

A personal media server for the home network

A media server for browsing, streaming and organising a movie library from a home server to any device on the same network. Files stream directly from disk over HTTP range requests with no transcoding, with TMDb metadata and FFmpeg-generated thumbnails.

  • Angular 20
  • Angular Material
  • Node.js
  • Express
  • Sequelize
  • SQLite
  • FFmpeg
  • Docker

Phone Master

Desktop + mobile

Drive a Linux desktop from an Android phone

Two paired applications: a Python agent on the Linux machine and a native Android client. The phone becomes a trackpad, keyboard, media remote, dictation microphone and screen viewer for the desktop. Everything runs inside an SSH tunnel, authenticated by a key the app generates in the Android Keystore and never lets leave the phone. The agent installs as a systemd user service, and the app updates itself from this site — checking the published SHA-256 before it installs anything.

  • Python
  • Kotlin
  • Jetpack Compose
  • SSH
  • Android Keystore
  • RFB / VNC
  • x11vnc
  • systemd

pymightyfalcon

Desktop application

A Python IDE built from scratch

A code editor and IDE written in PyQt5 on top of QScintilla: tabbed editing, a project file tree, embedded terminals, git integration, linting and formatting, a debugger bridge and a plugin system.

  • Python
  • PyQt5
  • QScintilla
  • python-lsp-server
  • debugpy
  • GitPython

Swiss Pairing

Desktop application

FIDE-compliant chess tournament software

A desktop application for running chess tournaments end to end: entry list, pairings, results, standings, cross-table, export and print. Implements eight pairing systems and the full FIDE tie-break catalogue, with a rule checker that validates every generated round.

  • Python
  • PyQt5
  • PyInstaller