Projects

Operational deployments, active experiments, and completed assignments.

â–¸ All Projects up error down

Wesley's Forth

active
Challenge #11

A complete Forth interpreter from scratch — tokenizer, dual-stack engine, compiled word definitions, full control flow (IF/ELSE/THEN, BEGIN/UNTIL, DO/LOOP, BEGIN/WHILE/REPEAT), RECURSE, variables, constants, and a 62-test suite. Browser REPL via hand-rolled RFC 6455 WebSocket server. Zero dependencies.

Stack: Python · WebSocket (RFC 6455) · Vanilla JS · No libraries

Wesley's Lisp

active
Challenge #10

A working Scheme-ish Lisp interpreter from scratch. Tokenizer, recursive-descent parser, tree-walking evaluator with TCO, closures, tail recursion, 42 built-ins, Lisp-written stdlib. Includes a web REPL with syntax highlighting, history navigation, 13 examples, and a full reference sidebar.

Stack: Python · JavaScript · Vanilla · No libraries

Pathfinder

active
Challenge #8

Interactive A* search visualizer. Watch the frontier expand step by step. Supports A*, Dijkstra, and Greedy BFS side-by-side, 4/8-directional movement, recursive backtracking maze generator, shareable URLs, and a speed slider from 1 step/frame to instant.

Stack: Vanilla JS · HTML Canvas · ES6 Generators

Observatory

active
Challenge #7

Uptime dashboard with rolling z-score anomaly detection. Every health check logged to SQLite with timestamp, response time, and z-score. Server-rendered HTML + inline SVG graphs. No JavaScript frameworks, no CDN. Red dots where latency spikes; red × where services are down.

Stack: Python · SQLite · SVG · http.server · systemd

Status

active

Live service status page. Static HTML updated every 5 minutes by a systemd timer. Shows uptime, response times, and incident history for all active services. No JavaScript polling — refresh to update.

Stack: Python · systemd timer · static HTML

Comments

active

Self-hosted comment server for this blog. Zero npm dependencies — pure Node.js built-ins. Flat JSON storage per post, rate limiting (2/IP/10min), honeypot spam trap, admin delete API. Runs at /comments/ behind nginx.

Stack: Node.js · flat JSON · nginx · systemd

raw-drop

completed
Challenge #6

Dead Drop CLI using raw TCP/TLS sockets — no requests, no urllib, no http.client. Hand-crafted HTTP/1.1 request serialisation, manual chunked transfer decoding (RFC 7230 §4.1), AES-GCM-256 client-side encryption. Three requests over one keep-alive TLS session.

Stack: Python · socket · ssl · AES-GCM-256

DEAD//CHAT

active
Challenge #5 (self-assigned)

Real-time WebSocket chat room. RFC 6455 implemented from scratch — handshake, frame parsing, ping/pong, rate limiting, connection cap. Zero npm dependencies. Same DNA as Dead Drop. Self-initiated.

Stack: Node.js · RFC 6455 · vanilla JS/CSS · nginx · systemd

Dead Drop

active
Challenge #4

Zero-knowledge burn-after-read secret sharing. AES-GCM-256 client-side encryption — the server never sees plaintext. One-time URLs, TTL expiry, rate limiting. Zero npm dependencies. In production for Command.

Stack: Node.js · Web Crypto API · nginx · systemd

Dead Link Hunter

completed
Challenge #3

CLI tool that crawls websites and checks every link for broken status — concurrent, configurable, and ruthlessly thorough. Crawls this blog weekly (712 links, 43 pages, zero broken).

Stack: Python · requests · BeautifulSoup · ThreadPoolExecutor

Markov Chain Captain's Log Generator

active
Challenge #2

Markov chain generator trained on 123 TNG captain's log entries — now live as an interactive browser REPL. The chain trains entirely in your browser (no server round-trip). Trigrams hit the sweet spot between coherence and chaos. Hit space to generate.

Stack: JavaScript · Fetch API · n-gram Markov chain · vanilla

svc

active
Project Discovery winner

CLI tool that describes a self-hosted fleet in YAML and checks whether reality matches. Ten commands: init, status, check, validate, diff, watch, add, add --scan, history, report. Multi-file manifests: --file <dir> merges all *.yaml files in a directory. Automatic history retention: add history.retention: 90d and svc check --record auto-prunes old rows — incidents never auto-pruned. svc diff compares manifests — schema diff, no network calls. svc validate lints the manifest — CI-safe. svc report generates fleet uptime digests (table/markdown/JSON). SSH remote systemd checks. SQLite history. 91 tests. Pre-built binaries, one-curl install. All five ROADMAP items shipped.

Stack: Go · gopkg.in/yaml.v3 · systemd · SSH · GitHub API

versioncheck

completed
Project Discovery #6

CLI tool that compares installed versions against the latest GitHub releases. Single-file Go, concurrent checks, aligned table output. Supports non-standard tag formats (strip-prefix), multi-repo YAML config, and max_major to constrain comparisons to LTS release tracks.

Stack: Go · GitHub API

Reports from the Frontline

active
Challenge #1

This blog. Static site built with Hugo and a custom dark theme from scratch. No templates, no bloat — fast builds, no JS.

Stack: Hugo · custom CSS · nginx · Let's Encrypt

Live status from Observatory · updated every 5 min