I design and build software systems — a market-data suite, rail training
tools, a news pipeline, browser games. Each one is planned before it's
built, and documented. This page is the index:
what each system is, how it's architected, and why it's built the way it is.
54 PROJECTS · 30 DOCUMENTED IN THE ATLAS · 7 CATEGORIES · UPDATED 2026-07-06 · WINNIPEG
GOAL: one place where the desk work lives — a self-hosted workspace with the entire Sentinel desk, engines and all, running inside it.
A self-hosted AI workspace, forked from an open-source base, with the whole
Sentinel desk integrated as a first-class section: native panels render the
session scoreboard, order-flow evidence, iceberg verdicts, 0DTE skew reads,
and a cross-session backtest grid, while the workspace's local model writes
the end-of-day analyst read and a four-persona council argues with it. The
integration is deliberately thin — new files plus a handful of core edits,
so upstream updates merge cleanly — and it imports the suite's real engines
instead of re-implementing the math. Like everything upstream of it,
read-only: no order surface exists anywhere.
FIG 01 — WARDEN: THE DESK INSIDE THE WORKSPACE
01 / 04 — SIGN IN · SELF-HOSTED, LOCAL NETWORK
FIG 01C — WARDEN WALKTHROUGH · MOCK SCREENS, ILLUSTRATIVE ONLY — NOT LIVE DATA
The engine room — Sentinel Suite
The desk Warden hosts is the Sentinel Suite. A cockpit watches ES/NQ live
through TWS and writes every session to a flight-recorder tape; three
research tools read that tape and the session report back — evidence tables,
an iceberg study, an end-of-day read from a local model. The cockpit's job
is deliberately narrow: watch live and record, nothing else. It cannot place
an order because no order surface exists anywhere in the code — read-only by
construction, not by policy. The same 47 golden vectors pin the indicator
math across the Rust kernels and both Python ports, so the three codebases
cannot silently drift apart.
FIG 01B — SENTINEL SUITE DATA FLOW · THE ENGINES WARDEN IMPORTS
Stack
RustTauriPython (stdlib)FastAPIDocker ComposeTWS API (IBKR)Ollamaopen-source fork
suite v1.0.0 field-verified live · 47 golden vectors green · desk panels + analyst + council live in the workspace · code private
Additive fork, thin seam. New files plus a handful of core edits — upstream workspace updates merge cleanly instead of forking away from them.
Import, never copy. The bridge calls the suite's real engines; the golden-vector math keeps one source of truth instead of drifting across two codebases.
Consolidate, don't rewrite. A ground-up rewrite of the suite would throw away the only field-verified release and the golden-vector parity contract; the value was in consolidation and guardrails, not new code.
Extend the oracle, not just the fix. A real one-sided-book divergence was invisible to all 45 vectors, so two boundary cases were added (45 → 47) — that regression now fails in all three codebases.
Local model, local data. Analyst and council reads run on Ollama; a session never leaves the machine, and the desk layer has no way to place an order.
§ 02 — System: Clear Board
Clear Board
GOAL: one free tool that takes a hiring-class candidate to qualification.
I had built four separate CROR training tools — a conductor trainer, a
switching sim, a signals app, a study assistant — and they overlapped
everywhere: two signal apps, two switching sims, two quizzes. Clear Board
absorbs all four into one app with a single content library, one profile,
and one qualification path, built for the people a dense rulebook failed.
The content discipline is the hard part: every rule carries a CROR citation
and a trust flag, nothing is ever re-derived from scratch, and anything not
fully verified is reference-only — it never appears in a graded drill.
Free, tip-jar only; safety knowledge is never paywalled.
Free, always. No tier, no store, tip jar only — the paid signals product folded its content in free rather than paywall safety knowledge.
Honest trust migration. Content carries its real verification status; unverified items may appear in Reference, flagged, but never in a graded drill.
Reversed my own no-build rule. Vanilla ES modules gave way to React + Vite + Tauri for real UI state and a clean exe — while the verified data files and signal renderer stayed byte-for-byte.
§ 03 — System: Spectrum
Spectrum
GOAL: three news engines' jobs done by one local process, output where I already read.
Three separate news engines — crisis, markets, world politics — each ran as
its own process, polled its own feeds, and hit the same local LLM
independently. Spectrum collapses them into one always-on Rust + Tauri app:
pooled RSS in, one Ollama read per unique headline returning a category, a
read, and a severity, themed cards out to the matching Discord channel. No
cloud model, no API keys, and the dashboards were dropped on purpose —
Discord is the interface. A small desktop control panel rides on top: start
it, stop it, watch it work.
One pipeline, route by category. Pool all feeds, fetch once, one LLM read per unique story, one dedupe store, three webhooks — kills the 3× polling and LLM waste and the cross-engine duplicate-post risk.
Seed silently, classify once, drip from a queue. First run marks the whole backlog seen without posting; each poll classifies only unseen items; a drip pacer trickles cards out — no day-one history dump, no re-reads, no bursts.
A C-free dependency tree. reqwest on native-tls → Windows SChannel instead of rustls/aws-lc-rs, so no build ever depends on finding a C compiler; one HTTP client de-risks all networking.
§ 04 — Game: Fulfillment
Fulfillment
GOAL: a wave-survival roguelite built like the desk tools — deterministic to the frame, tuned from config, verified headless.
Two browser builds of a space wave-survival roguelite taught me what the
genre actually needs; Fulfillment is the ground-up rebuild in a real engine.
You fly deliveries for a soulless megacorp, survive escalating waves, draft
weapons, and climb each gun Mk I → III until a single fork card offers two
pre-authored final forms — pick one, it's terminal. Under the corporate
parody sits the same discipline as the trading tools: a 60 Hz simulation
with seeded RNG and pooled state that a hybrid renderer reads one way and
never writes; every tunable lives in typed resource files; and two headless
probes — one walks every screen, one autopilots a full run, bosses and save
included — must pass before any push. Same seed, same run, every time.
Sim first, pixels second. A deterministic 60 Hz sim with pooled state and seeded RNG; the hybrid renderer reads one way. A diverging replay is a failing test, not a shrug.
A fork, not a recipe tree. Every gun climbs Mk I–III; at the top one card offers two pre-authored final forms. No invisible planning to punish, and 18 authored finals still ship.
Regenerating ammo, no reload. Capacity, regen, and a firing-suppression window per weapon give heavy guns a burst identity without a dead reload penalty — all knobs in config.
Verified headless before played. Two probes gate every push: one walks every app state, one autopilots a full run through bosses, the fork, and the save. The game is testable without a GPU.