JORDAN DOERKSEN

Jordan Doerksen — portfolio & index

Software, documented.

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

Contents

§ 00
  1. 01System: Wardenthe workspace · the whole desk inside
  2. 02System: Clear BoardCROR qualification trainer
  3. 03System: Spectrumlocal-LLM news pipeline
  4. 04Game: Fulfillmentdeterministic Godot roguelite
  5. 05Categoriesseven, registry-driven
  6. 06Full indexevery project, one row each

§ 01 — System: Warden

Warden

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.

WARDEN — SELF-HOSTED WORKSPACE · THE DESK LIVES INSIDE records read-only mount session context [ READ-ONLY — NO ORDER SURFACE EXISTS ANYWHERE ] the desk watches and reads; it cannot act [ THE MODEL IS LOCAL — NOTHING LEAVES THE MACHINE ] analyst and council run on Ollama; no cloud, no API keys TWS / IBKRlive market data SENTINEL SUITEobserve + record · host TAPES + REPORTSsession artifacts ENGINE BRIDGEthin adapter · returns JSON imports the suite's real engines — the math is never re-implemented DESK PANELSevidence · iceberg · backtest0DTE skew · scoreboard LOCAL MODELOllama · analyst read COUNCILfour-persona second read
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.

market state signals records exports tapes tapes report pins math parity parity [ READ-ONLY — DATA FLOWS ONE WAY, IN ] no order surface exists anywhere in the code TWS / IBKRlive ES/NQ data SENTINEL-CORERust · pinned kernels PRO COCKPITTauri · observe + record DISCORD WEBHOOKdata-free signal feed TAPESrecordings/*.jsonl.gz SESSION REPORTsentinel.session.v1 ANALYSTOllama EOD read · Python STAGE 2evidence tables · Python ICEBERG STUDYabsorption FSM · Python GOLDEN VECTORS · 47cross-language math oracle [ ONE ORACLE — 47 VECTORS PIN THE MATH IN RUST AND BOTH PYTHON PORTS ]
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

Key decisions

  • 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.

verified items only one mastery model grades write back trust firewall deploys on green same bundle CN CONDUCTOR TRAINERrule question bank SWITCH-LISTsolver-verified puzzles CROR-SIGNALSsignal aspect encodings TRAINING-ASSISTANTverbatim CROR + definitions CITED CONTENT LIBRARYfour verified JSON fileseach item cited + trust-flagged COREone profile · SM-2-lite FIVE STATIONSHome · Reference · DrillThe Yard · Radio NPM RUN CHECKsolver + trust gates REACT + VITE BUILDGitHub Actions → Pages TAURI V2 DESKTOP EXEClear Board.exe · ~18 MB copied untouched — nothing re-derived from scratch [ NEEDS-REVIEW = REFERENCE-ONLY — NEVER DRILLED, NEVER GRADED ] a red check gate blocks the deploy entirely
FIG 02 — CLEAR BOARD CONSOLIDATION & TRUST PIPELINE

Stack

React 19TypeScriptViteTauri v2HashRouterSM-2-liteNode check harnessGitHub Actions

live — web + desktop exe · 19/19 puzzles proven winnable · open: PWA + app icon

Key decisions

  • 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.

TAURI 2 CONTROL PANEL — start · stop · dry-run · tuning · log fetched once unseen only classified once cleared cardsseverity ≥ floor dripped RSS FEED POOL34 sources · four bands SEEN STOREfingerprints · cap 4000 CLASSIFY-ONCE LLMOllama · llama3.1:8b BAND ROUTERfour bands · card skinscategory picks the webhook DRIP QUEUEstrongest first · paced MONEYDiscord webhook POLITICS (+TECH)Discord webhook+ tech, in its TECH skin CATASTROPHEDiscord webhook [ CLASSIFY ONCE, NEVER TWICE ] every headline is fingerprinted the moment it's read; one LLM pass per story, across all feeds [ THE READ IS FULLY LOCAL ] no cloud model, no API keys — the only thing that leaves the machine is the finished card, to Discord first run seeds the backlog silently — no day-one dump
FIG 03 — SPECTRUM CLASSIFY-ONCE PIPELINE

Stack

RustTauri 2Ollama (llama3.1:8b)Discord webhooksRSStokio + reqwestvanilla JS panel

M0–M5 complete · verified live to all three channels · predecessors retired

Key decisions

  • 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.

DETERMINISTIC SIM — 60 HZ · SEEDED RNG · POOLED STATE loaded once one-way read draws replay must match [ SAME SEED, SAME RUN — DETERMINISM IS THE CONTRACT ] all gameplay state lives in pooled data; the RNG is seeded, and a diverging replay fails the probe, not the player [ THE RENDERER READS — IT NEVER WRITES ] gameplay never depends on what is drawn both probes run without a GPU — verified before it is ever played BALANCE RESOURCEStyped .tres configsnothing hardcoded WAVE DIRECTORescalation · 6 bosses ARSENALdraft · Mk I–III tiersMk★ fork · 18 finals METAGAMEscrip · depot riders · save GAME WORLDpooled entitieselement wheel · 4+1 HYBRID RENDERERbatched swarm layer+ real ship & boss nodes COCKPIT HUDglass + glow · shift review HEADLESS PROBESlayout walk · autopiloted full run
FIG 04 — FULFILLMENT: SIM/RENDER SPLIT & VERIFY GATE

Stack

Godot 4.7GDScripttyped .tres configsseeded RNGheadless probesprocedural synth audio

full loop built · title → run → review → depot → back in · both probes green · in play-test

Key decisions

  • 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.

Categories

§ 05 — Seven categories

Full index

§ 06 — Every project