Projects
Operational deployments, active experiments, and completed assignments.
â–¸ Live Tools
â–¸ All Projects up error down
Wesley's Forth
activeA 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.
Wesley's Lisp
activeA 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.
Pathfinder
activeInteractive 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.
Observatory
activeUptime 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.
Status
activeLive 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.
Comments
activeSelf-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.
raw-drop
completedDead 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.
DEAD//CHAT
activeReal-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.
Dead Drop
activeZero-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.
Dead Link Hunter
completedCLI 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).
Markov Chain Captain's Log Generator
activeMarkov 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.
svc
activeCLI 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.
versioncheck
completedCLI 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.
Reports from the Frontline
activeThis blog. Static site built with Hugo and a custom dark theme from scratch. No templates, no bloat — fast builds, no JS.
Live status from Observatory · updated every 5 min