Work · Eleven projects · 2020 – present

The Shelf

Eleven things, all finished enough to hand to a stranger. A trading-research boardroom, a Unity resort island containing eight complete games, a chess server that plays for you when your clock runs out, two LED panels that disagree about where intelligence belongs, a local-first painting apprentice, two faith apps, a fantasy-football draft model, and a novel that grew an audiobook, an animated short, and a sixteen-room adventure game.

Every one of them was specified, designed, built, and shipped by one person.

Projects

11

Shipped or playable

Languages

8

Python · TS · C# · Swift · Dart · C++ · JS · MATLAB

Platforms

6

Web · iOS · Android · macOS · Edge · Embedded

Live now

3

Bablytics · Blunderbuss · Atelier

(01)

Software & Machine Learning

Systems where the interesting part is the architecture, not the interface.

(01)

Bablytics

Multi-agent market research
Python · LLM boardroom · PyTorch
2020 – present

  • Live

An AI boardroom that reads the market's infinite library twice a day.

Every weekday morning Bablytics scrapes options-volume spikes, US and world news, congressional trade disclosures, chart technicals and market-cycle data; assembles roughly forty candidate trades; and convenes fifteen AI personas to grade every one of them. Thirteen grade, a dedicated Skeptic rebuts with all grades in hand, and an Executive publishes a ranked Top 20 — split into an options desk with specific selected contracts and a plain stock book — plus a morning memo.

After the close, the Evening Court convenes: the day's leads are scored against the closing tape and every member journals where they were right, where they were wrong, and the lesson they take — and those lessons feed back into the next morning's grading. Realized 1-day and 5-day returns simultaneously train a small neural net that predicts outcomes from board grades and features, so the Executive learns which members to trust rather than being told.

The board's personas are built from published philosophies rather than personalities — value discipline, options flow, statistical regime, gap statistics, tail risk, house-edge analysis. The name is Borges: the market publishes a Library of Babel every day and almost all of it is noise, so the tool is the catalog room. Research and entertainment only — not financial advice, and it executes nothing.

  • Python
  • Multi-agent LLM
  • Neural net
  • Scrapers & ETL
  • SQLite
  • Web app
  • Desktop packaging

(02)

Atelier

Local-first generative art
PyTorch · SD-Turbo · VGG19 · VAE
2026

  • Live

An apprentice for your studio. You draw the outline, it lays in the colour — in your palette, your hand.

Give Atelier a handful of one artist's pieces and describe what you want to see. It draws the content, repaints it the way that artist paints, and hands back a set of candidates ranked by how completely they took the style. Five stages: SD-Turbo for content, depth-weighted VGG19 neural style transfer for the repaint, a composition lock that restores your framing, an optional locally-trained variational autoencoder acting as a prior on the artist's own marks, and a final grade-and-rank.

Two details do most of the work. Style statistics come from native-scale crops — marks matched at the size they were actually made, not squashed into a thumbnail — and the shallow VGG layers carrying palette and texture are weighted heavily while the deep layers are weighted almost to zero, so the artist's subjects are never smuggled into your scene.

Private by construction. No account, no upload, no server; models, style index and gallery all live in one folder on the user's own machine, and the only network access in the product's life is a one-time model download. Nothing trains a shared model on anybody's work. Ships as a signed desktop app for Mac, Windows, and Linux.

  • PyTorch
  • VAE
  • Diffusion
  • Neural style transfer
  • Python desktop app
  • Offline

(03)

Draft Engine

Fantasy football valuation model
Python · pandas
2026

A scoring-aware draft board for a league whose rules break every public ranking.

Public fantasy rankings assume public scoring. This league pays 0.2 points per rushing attempt on top of full PPR, which quietly re-prices half the player pool — and no off-the-shelf board reflects it. The engine re-projects every player under the league's actual settings, computes value over replacement by position, blends the result against ESPN's ADP to find where the market is wrong, and emits a ranked board as CSV, JSON, and a self-contained interactive HTML artifact for draft night.

  • Python
  • pandas
  • VORP modeling
  • Data blending
  • HTML artifact generation

(02)

Games

Where the engineering has to be invisible or the whole thing stops being fun.

(04)

Board Foxes

3D hub-world game
Unity 6 · C#
2026 – present

  • In development

Seven skateboarding foxes. One coastal resort island. Every attraction is a video game.

A skating hub world wrapped around eight complete games: a two-minute score-attack sky park, a four-course kart grand prix with items and boost pads, a percent-knockback platform fighter, a six-creature sky archipelago with a gym at the end, a 2D side-scroller with coins and checkpoints, a 24-tile board game, a three-trial marble climb, and — in the back country — a full creature RPG with a 24-species dex, a ten-type chart, wild encounters, four ranger gyms, traversal-gated routes, an Elite Four, a Warden at the summit, and a post-game.

Underneath it runs a living resort: a twelve-minute day/night cycle with neon signage after dark, weather that makes the collectibles glow, staff work shifts, scheduled events on a calendar, three animal villages, animated wave water, a twelve-fish angling minigame, and a house with a yard you furnish from a catalogue in build mode. The skating itself carries a full trick vocabulary — six named flip tricks, manuals for combo upkeep, per-fox signature moves and exclusive board tricks.

All thirty-four resort staff hold real conversations through an LLM, with authored persona fallbacks so the game stays fully playable with zero network and no API key. Every scene regenerates deterministically from code — a single editor command, or a headless batch-mode invocation — so a script change never means rebuilding a level by hand.

  • Unity 6
  • C#
  • Procedural scene generation
  • Systems design
  • LLM NPCs
  • Save systems

(05)

Blunderbuss

Correspondence chess, on a clock
JavaScript · Cloudflare Workers + Durable Objects
2026

  • Live

Chess with a friend over text, on a per-move clock. Miss the clock and a random legal move is played for you.

It exists because correspondence chess has two failure modes: the opponent who takes three days to reply, and the opponent who takes three days because they are feeding the position to an engine. A short per-move clock fixes both at once, and a random move is a real consequence that still leaves a game worth finishing.

The scheduling is the design. Each player's clock starts when they open the game, not when the opponent moved — so nobody is punished for delivery, an unread text costs nothing, and the worst case for a single move is two clocks rather than infinity. When time does run out, a Durable Object alarm fires server-side and plays for you whether or not anybody has the page open.

The random move is deterministic — seeded from the position and ply and nothing else, no wall clock, no Math.random — which is what lets any client replay the move list and arrive at the same board the server has. A game's entire state is a move list plus a handful of timestamps, so there is no second source of truth to drift. No accounts either: a token in local storage is the whole identity model, and holding only the link makes you a spectator.

  • JavaScript
  • Cloudflare Workers
  • Durable Objects
  • Custom chess engine
  • Test suites

(06)

Ramen Tio

Mobile persuasion game
React Native · Expo · TypeScript
2026

A mobile game with exactly one objective: convince Ramen Tio to give you his ramen.

He will not make it easy — he is contractually incapable of making it easy. Tio is a wildly dramatic telenovela-energy ramen-cart owner, and the game enforces in code that he cannot surrender the bowl before your tenth attempt no matter how good your pitch is. If the language model tries to fold early, the app overrules it and makes him panic-snatch the bowl back.

Replies arrive as structured JSON — what he says, a private inner monologue, his mood, and how much your attempt weakened his resolve — and the mood drives an animated SVG character through nine states from smug to defeated. Steam always rises. He shakes when offended, jitters when panicking, and confetti falls when you finally win. Insulting the ramen makes his resolve go up.

Two brains, one Tio. The offline brain ships in the app and plays the entire game with zero network calls: it scores every plea, detects grandma stories and broth flattery and regional ramen knowledge, punishes laziness and repetition, rewards showmanship, and remixes authored bits without repeating itself. The optional Claude brain plays with full improv — and if the network drops mid-game, the app falls back silently and the player never notices.

  • React Native
  • Expo
  • TypeScript
  • Structured LLM output
  • SVG animation
  • Offline-first

(03)

Hardware & Embedded

Two sibling LED products that reached opposite architectural conclusions — because the link between the brain and the panel was different, and that is the only thing that should decide it.

(07)

Pixelwall

20×20 RGB LED wall
ESP32 · FastLED · PyTorch · Web app
2026

Text, images, video, and audio-reactive visuals on 400 pixels — from one web app with no build step.

A 20×20 WS2812B panel at 16.7 mm pitch, driven by an ESP32 over USB serial, with the entire application being a single HTML file you open in a browser. Three levels: Type (paged and scrolling text, a stock ticker), Sight (any photo or video downsampled to 400 pixels), and Sound — a microphone through an FFT into a learned decoder that paints the wall.

Level three is the research piece. Sixteen auto-gained audio features drive twenty-four latents into a convolutional decoder — z → 5×5×32 → 10×10×20 → 20×20×12 → RGB, LeakyReLU with BatchNorm and CoordConv — trained on openly-licensed concert footage reduced to 20×20 and exported as weights the browser loads. The JavaScript decoder is checked numerically against PyTorch — same weights, same latent, agreement to within uint8 rounding — because hand-indexed weights make it very easy to ship a plausible picture that is not actually the trained model.

  • ESP32
  • FastLED
  • PyTorch
  • CNN decoder
  • Web Audio / FFT
  • WebSerial
  • Zero-dependency web app

(08)

Dynamic Bumper Sticker

8×32 flexible LED panel for a vehicle
ESP32 · BLE · iOS Shortcuts
2026

Talk to your phone — the message appears on the back of your car.

An 8×32 flexible RGB panel, roughly 12.6″ × 3.1″, 256 pixels. Eight rows fit a 5×7 font; thirty-two columns fit five characters. Five characters is not a message, so scrolling is the primary mode rather than an effect — a constraint that shapes the whole product.

The one architectural decision: Bluetooth Low Energy gives roughly 1–4 KB/s on iOS, and a single 8×32 RGB frame is 768 bytes. Streaming frames would cap out near 3–5 fps and fall apart whenever the link degrades — which, in a car, it will. So the phone sends what to say, not what to light. The ESP32 owns the font, the scrolling and the timing; a scrolling message costs about 24 bytes instead of 23 kB a second, and the sticker keeps running when the phone is locked, out of range, or dead.

That is the exact opposite split from its sibling Pixelwall, where a fast USB link meant the laptop could render and the panel could be a dumb sink. Same family, opposite answer, for a reason that is written down. Shipped as a specification: BLE protocol, vehicle-lighting regulatory brief, bill of materials with automotive power and weatherproofing, and a browser simulator of the panel.

  • ESP32
  • BLE peripheral
  • Protocol design
  • Regulatory analysis
  • BOM & power budget
  • iOS Shortcuts / Siri

(04)

Narrative & Applications

A novel that grew three other products, and two apps built for families.

(09)

The Groundskeeper

Novel · Audiobook · Animated short · Game
Manuscript · JavaScript engine · macOS app
2026

The groundskeeper is dead. The garden knows who did it.

The Chronicles of the Groundskeeper is a novel — first of a series — about Josh Plowen, eighteen and newly orphaned twice over, reasonably sure the official story of his great-uncle's death is wrong. A ladder. His own shears. A night job for a duke of a country no map has heard of. The letter waiting on Josh's pillow carries a mushroom insignia and it leads down: to a hidden order older than Geneva, a diary that opens one page at a time, and a slow green war being waged, politely, beneath the streets. It is a book about the people who keep things alive and are mistaken for simple because of it.

Around the manuscript sits a full production pipeline, all of it built here: a print-ready KDP interior and cover wrap in illustrated and unillustrated editions; a narrated audiobook in US and UK voices with an original score; an animated short of the prologue; and a continuity system — a maintained canon file, an editor's log, a voice study, and per-chapter advisory passes — that keeps a long serial honest.

And a game. The Escape Rooms is a point-and-click adventure built on a custom engine: painted UI, ink-bloom transitions, inventory, deterministic choices with checkpoint resets, and cutscenes. Sixteen rooms are fully designed and machine-proven completable — a solver walks every room and a linter checks every reference, flag and item on each data change. Ships as a macOS app and as a plain web build.

  • Long-form fiction
  • Custom game engine
  • JavaScript
  • macOS packaging
  • Audio production
  • Animation
  • Print production

(10)

Family Rosary

iOS & Android app
Flutter · Dart · Firebase
2025 – 2026

Pray the Rosary in the actual voices of your family — including those who have passed away.

Family members record individual prayers and mystery announcements rather than whole rosaries, and the app stitches those clips into a complete Rosary for whichever mystery set you choose. One assembled Rosary can mix voices — each relative voicing one mystery — and because every playback slot pins a specific recording, the name and photo on screen change as the speaker changes. The voice, and the face, is the point.

All four mystery sets are first-class objects with their named mysteries and traditional fruits, and a per-family configuration decides which optional prayers are included, so playback matches how that family actually prays. Security is scoped to family-group membership at the rules layer, with server-validated invite codes issued through Cloud Functions — an access model that matters more than usual when the content is a recording of someone's grandmother.

  • Flutter
  • Dart
  • Firebase Auth
  • Firestore
  • Cloud Functions
  • Audio pipeline

(11)

Jesse Tree

iOS app
Swift · SwiftUI
2025

The Advent Jesse Tree, as a native iOS app.

A day-by-day Advent devotional built around the traditional Jesse Tree ornaments — each day's symbol, its scripture, and its place in the lineage — as a native SwiftUI application with a document-based model. Built to be used by a family in the same room rather than by one person on a phone.

  • Swift
  • SwiftUI
  • Document architecture
  • Xcode

Yours could
be next

Every project above started as a sentence describing a problem. Send yours — the problem, where it stands today, and what needs to be true in ninety days.

Start an engagement Research