projects

Things I've built

FLAGPOST

flagship

The modern, open-source CTF platform. After years of running an international competition on a patchwork of plugins, Discord bots and spreadsheets, I built the platform I wanted to exist: one self-hosted system that handles the whole lifecycle of a CTF.

  • Real-time everything — WebSocket-driven scoreboards, presence and notifications, with public spectator boards built for projection.
  • A visual automation engine — no-code rules that trigger announcements, hints, score adjustments and board freezes on time or event conditions.
  • CRDT-backed collaborative notes on every challenge, so teams work together without a separate doc.
  • A built-in support desk — ticket queues, staff assignment and private notes, the feature CTFs always improvise badly.
  • Dynamic decay scoring, prerequisites, scheduled releases, deep role-based permissions, CTFtime-compatible feeds.

Self-hosted via Docker, AGPL-3.0 licensed, and your competition data lives in your Postgres — yours forever.

PythonPostgreSQL WebSocketsDocker AGPL-3.0creator & maintainer

CTFd Support Ticket Plugin

open source

Before Flagpost there was this: a CTFd plugin that adds a proper support ticket system for remote competitions. Participants submit tickets and attach screenshots; admins triage and respond inside the platform instead of chasing DMs. Battle-tested on a 1,900-player event.

PythonCTFdHTML

tbcsec.io

this site

The site you're reading. A fully static Astro build with a hand-rolled Three.js glitch engine: a ping-pong feedback buffer smears the hero type with block-quantised displacement (the datamosh effect), presented with RGB channel separation — and a decoy 2009-grade homepage that gets taken over on arrival. No trackers, no analytics, no cookies; served as static assets from Cloudflare's edge with strict security headers.

AstroThree.jsWebGLCloudflare