gabrielwang.ai
Real systems, rebuilt to share

AI you can click,
not AI you read about.

I build AI for the work between the trade and the audited number — in funds and in physical commodities. NAV and mark-to-market, reconciliation and month-end close, counterparty management and the receivables ledger, documentary compliance on cargoes, proprietary research and due diligence, market intelligence that reads short- and long-term relative strength. The work taught me both languages of the problem — capital and controls on one side, Python and LLM agents on the other — and the systems built with them run unattended, in production, every day. What's here are working rebuilds — cut down several grades, onto synthetic data and fictional names, so they can be shared.

The idea

Most AI content tells you what's possible. This shows you — on the workflows you sign off on.

Each edition takes one real workflow from fund or physical-trading operations and ships it as a demo you can poke at. No signup wall, no pitch.

01

One real workflow

NAV and mark-to-market, position and cash reconciliation, LC document checks on physical cargoes, receivables and payables against counterparty limits, month-end close, due-diligence screens, market briefings — the work around every trade, from first look to audited number.

02

A demo you can click

Interactive, in your browser, on synthetic data. Step through the pipeline, break something, watch how the system responds.

03

Guardrails over magic

The interesting part isn't that AI drafts the number — it's the integrity gates that stop a bad number from ever reaching stakeholders.

04

The CFO's read

What it costs to build, where it breaks, what it does to control, risk and the cost of running the function — and whether it's worth doing. If it wasn't worth building for myself, it isn't here.

A workshop, not a storefront

Nothing here is for sale — no pricing, no booking link, no funnel.

I built these systems because I needed them, and they've paid for themselves many times over — in hours, and in errors that never happened. Sharing the working patterns costs me little and might save you a quarter of trial and error. That trade seemed obviously worth making.

What you see is deliberately de-tuned.

The originals run in production with real money, real counterparties and real consequences. Out of respect for privacy and confidentiality, every demo is rebuilt several grades down before it's published: synthetic data, fictional names, generic workflows, and a fraction of the moving parts. What a five-minute click-through can't carry — live data feeds, multi-entity books, the edge cases and watchdogs accumulated through years of production failures — is exactly what the originals are made of. The plumbing, the guardrails and the judgment calls shown here are the real thing. The numbers, and the difficulty, are not.

In the workshop

Eleven interactive demos, one synthetic world — a fund, a physical commodities book, and a two-outlet café. Start anywhere — they cross-link.

001

The principal's relationship memory. Live demo

30 seconds of WhatsApp voice after each meeting; the bot files people, threads, promises and personal anchors. Months later: trip briefs that surface your own overdue promise before you land, a Thursday promise sweep, and quiet-relationship flags tuned to each contact's own rhythm.

Launch the demo →
002

Daily NAV & reconciliation — with integrity gates. Live demo

Step through a fund's daily NAV build on synthetic broker data. Then inject a failure — a wrong price, a missing trade, an odd-lot — and watch reconciliation catch it and hold distribution. The system that refuses to send bad numbers.

Launch the demo →
003

Your AI can read the fund — not touch it. Live demo

An assistant wired to Edition 001's fund through a read-only MCP server: seven tools that answer anything — NAV, P&L drivers, weights, recon — and zero that can write, book, mark or send. Ask it to trade, and watch the wire refuse.

Launch the demo →
004

Shock the book. Live demo

Stress Edition 001's fund on purpose: the FX move that hits one sleeve, Nvidia −30%, the coordinated bad week — then a 20% redemption priced at post-shock NAV. Honest arithmetic, renormalised weights, and the cash ladder. No risk theatre.

Launch the demo →
005

The million-dollar paper trail. Live demo

A US$14.8M iron-ore cargo is paid on documents, not ore. Eight strict-compliance checks — exact strings, dates, wet-to-dry tonnage maths — five ways to fail them, and the cure memo for each, before the bank finds it first.

Launch the demo →
006

The month-end pack that writes itself. Live demo

One click closes the month: grid column, compounded YTD, attribution that foots exactly, signed capital flows. Then break it — run it twice (idempotent), fail the recon (pack HELD), drop funding mid-month (NAV moves, P&L doesn't).

Launch the demo →
007

Dormant counterparty reactivation — the desk sheet that ranks who to call. Live demo

A trading desk spots counterparties who've gone quiet against their own buying rhythm — not a blunt 90-day rule — ranks them by revenue at risk, and drafts the outreach.

Launch the demo →
008

LLMs judge, code counts. Live demo

Three judge personas score four listing candidates in words, with reasons. Code does every number: robust medians, weighted lenses that flip the ranking live, and a disagreement queue routed to humans — the split that makes AI scoring auditable.

Launch the demo →
009

Automation that can't fail silently. Live demo

The ops doctrine behind unattended systems: three-outcome probes, page only on confirmed-down, quiet hours that defer but never drop, delivery gates that escalate before the deadline. Break the fleet six ways and watch what reaches the phone — and what deliberately doesn't.

Launch the demo →
010

The agent perimeter. Live demo

Fire six messages at a 24/7 WhatsApp AI — a stranger, a prompt injection, a request for its keys, a phone swap. Five layers decide what it answers, what it confirms first, and what it never even sees. The empty pane is the product.

Launch the demo →
011

The roster writes itself. Live demo

Sunday night, two outlets, students with scattered hours, a backup you'd rather not use. One click plans the week — priced in wages, every unfilled slot explained — then the 7am "boss, I'm sick" text arrives and gets covered in one click too. A full product: manager board, worker phone links, swaps, chat.

Launch the demo →
012

The harness is the product. Live demo

Same request, same model, twice. The chat window writes a data-extraction rule any engineer would approve in review — it matches zero records. The harnessed agent runs what it writes, scores 0 of 24, finds the reason, fixes it, and locks the correction into a test. The regexes on the page really execute.

Launch the demo →
013

The suite is green. The code it tested is gone. Live demo

Five ways a test passes while the thing it verifies is broken: a lock asserting a docstring, an alarm tested without its constant, stale bytecode certifying deleted code, an assertion satisfied by finding nothing, and one anchored to a byte offset. Revert each fix yourself and watch what the lock says.

Launch the demo →
014

You can't stop a screenshot. You can make it carry a name. Live demo

A sensitive report behind an e-mail gate: allowlist, one-time code, and a page stamped with your own verified address and view time. Try to copy, print or capture it and watch the audit trail record it against you. Honest about the limit — a browser cannot prevent capture, so the goal is attribution.

Launch the demo →
015

Four documents. One truth, or none. Live demo

Board pack, bank covenant certificate, LP report, audit-query pack — all generated from one source. Change a number once and all four move. Then try to bend one: round a figure, drop a covenant line, reorder the periods, slip a restricted number into the external pack. The build refuses and names the rule.

Launch the demo →
016

The report is finished. Now get it to them. Live demo

Five requirements, five channels, and a solver that keeps telling you the same thing: nothing does all of it. One bridge abandoned after a deterministic crash, one built and verified then parked because the owner locks his laptop, one shipping, one priced and declined. Pick the requirement you're giving up.

Launch the demo →
017

The findings are identical. One of these is usable. Live demo

One verification run, two documents. A management scorecard buries the three things to act on behind tiles and a chart; the other leads with them and puts the evidence beside them. Play the front-line role in each — the distance is measured, not asserted. Plus the five phrases that were struck out, and why.

Launch the demo →
018

Under-counting is silent. Live demo

A handwritten fuel sheet, read by a real parser. Bend the handwriting the way handwriting bends and 618 litres vanish — while the ingest log still says no errors and every consistency check reports normal. Then switch on the pump meter, a second axis that doesn't depend on the reading, and it names the exact row.

Launch the demo →
019

It ran every day. It stopped working in March. Live demo

Ninety days of a scheduled job's life. It ran, it exited zero, it produced output — and on one of those days it quietly stopped doing its job. Four rot patterns, simulated live. Pick the day you think it died, then see how long it went on reporting success, and which single number would have caught it.

Launch the demo →
020

Voice in. Audio never out. Live demo

The decision that matters in a voice pipeline isn't which model — it's which class of data may leave the machine. Move each stage across the boundary and watch what crosses. Then break it: an enrichment that fails must not block delivery, and a dependency's process-wide timer can kill the runner rather than its own stage.

Launch the demo →
021

The report is a chat message. The quirks are the spec. Live demo

Three outlets post the night's takings into a chat group. One types a seven-digit date every single night; one posts yesterday's figures the next morning; one total wraps onto the next line. Switch a handler off and watch the ledger go wrong without complaining — and meet the +B that means two different things.

Launch the demo →
022

It didn't fail. It's still running. Live demo

Demos die on the model; production dies on the operating system. Configure a scheduled job and find out which layer kills it: a minimal environment that can't find the interpreter, a grant attached to a path the next update moves, or a protected read that hangs forever — immune to the timeout you added to catch it.

Launch the demo →
023

Save the file. Five jobs change. Live demo

Five unattended jobs import one module straight out of a synced folder — no install step, no version, no rollback. Make an edit and see who breaks, what the shared check can see, and what breaks silently. Change only a return value and nothing that inspects imports could ever have caught it.

Launch the demo →

Who's behind this