Projects

Each project leads with its outcome, says how it was measured and states its limits. 11 projects.

Software Development Engineer (SDE)

1,000 concurrent orders for 100 units, and exactly 100 confirmed

Never oversells stock, even when many orders arrive at once or a service crashes mid-order. Built for order and fulfilment systems.

Eliminated overselling under load, with exactly 100 of 1,000 concurrent orders confirmed for 100 units (a check-then-write baseline accepted 921–969), by using a conditional UPDATE backed by a CHECK constraint.

SDEShipped

Oversold under 1,000 concurrent orders
0
Baseline: 921–969 of 1,000 told yes by a check-then-write
1,000 concurrent HTTP orders for 100 units at 100 clients, then nine cross-store invariants (scripts/ordering-harness.py); the baseline is measured at the reservation layer, three runs
The FulfillOps ops floor, a 3D view of orders moving through the saga

A job queue where a crashed or zombie worker can't apply an effect twice

A durable job queue for background work that must not be lost or applied twice, for Go services on PostgreSQL.

Applied every job's effect at most once, with 60 of 60 jobs completed and zero fencing violations under crashes, pauses, a Postgres restart and dropped connections, by guarding writes with fencing tokens.

SDEShipped

Throughput, 500 jobs
1,243 jobs/s
Baseline: River 298–643 jobs/s, by fetch setting
4 worker loops × 8 in flight, debounced NOTIFY, same Mac and Postgres 17 for both (results/benchmarks-2026-10-08.json); start latency is the cost, p50 23 ms against River's 2 ms at its fastest setting
The Conveyor dashboard showing the default queue with 60 completed jobs

An OCR pipeline that never acts on a number it can't prove

A personal timesheet-OCR project, built and benchmarked on synthetic data, that verifies hours against each sheet's own totals.

Read 96 of 220 held-out synthetic timesheets exactly, against 27 for Tesseract 5, by locating the grid with OpenCV and recognising each cell on its own crop.

SDEAI/MLShipped

Held-out sheets read exactly
96 of 220
Baseline: Tesseract 5, 27 of 220
220 held-out generated sheets, each with one degradation (blur, skew, noise, JPEG, shadow, low resolution, stamps, pen marks, handwriting, simulated photos), read on x86-64 in CI (docs/ocr-benchmark.md). Synthetic data only
VeriTrack AI analysis results on synthetic data, listing two employees whose timesheet leave is missing from the leave register

Fit a WebGPU particle world into 304 KB, loaded after first paint

This portfolio: a WebGPU particle world held to strict performance, accessibility and testing budgets.

Kept the 3D engine to 304.6 KB after first paint, within a 320 KB budget, by running every formation through one branch-free compute kernel on WebGPU and WebGL2.

SDEAI/MLLLMShipped

Graphics engine
304.6 KB
Baseline: 320 KB budget
Gzipped JavaScript the engine adds after first paint, measured on the built site by scripts/budgets.ts in CI
A still of the world in its AI/ML formation, captured from the high tier on a machine with a GPU (POSTER_TIER=high npm run capture-poster)

A real-time whiteboard on my own CRDT engine, with zero lost edits under network faults

A real-time collaborative whiteboard on a CRDT engine I wrote, for people editing the same board at once.

Held edit-to-remote p95 at 47 ms for 50 editors, against a 300 ms target, and under target to about 150 editors, by fanning edits out through Redis.

SDEIn progress

Edit-to-remote p95, 50 editors
47 ms
Baseline: 300 ms design target
Concurrent edits measured until applied on every other replica, 2 server nodes sharing Redis and Postgres on one Apple M5 (results/scale.json); p95 stays under 300 ms to about 150 editors and breaks between 150 and 200
Line chart of Tandem's edit-to-remote p95 latency by editors on one board: 12 ms at 20 editors, 47 ms at 50, 186 ms at 150, crossing the 300 ms target between 150 and 200, and 938 ms at 300

LLM Engineer

An LLM extractor that drops any task it can't quote from the message

Turns Slack and email into a verified list of who owes what by when. Built for startup founders.

Extracted commitments at 0.981 item F1 on 80 held-out synthetic messages (0.734 on a harder outsider-written set) by verifying every LLM output against an exact quote.

LLMShipped

Item F1, held-out test
0.981
Baseline: Offline rules 0.848
GLM 5.3 Flash on 80 held-out synthetic messages, items matched one-to-one, 95% CI 0.950–1.000 by seeded bootstrap. On a harder set written by two outsiders it scored 0.734
The cos run command printing a prioritised table of action items from a synthetic Slack and email sample, with owner, due date, source and the reasons for each priority

Question answering over long technical documents that refuses rather than fabricates

Answers questions about long technical handbooks with citations it has checked, for technicians and students.

Answered 19 of 22 development questions correctly (0.86, a small set) by combining hybrid retrieval, reranking and a refusal when a quoted span isn't in the retrieved text.

LLMShipped

Answer accuracy
0.86
19 of 22 questions on the development answer set, Gemini 3.5 Flash-Lite, judged by script (results/answer_eval.json); 22 questions is a small set
The SpecPilot demo page, with a question box and example questions about FAA handbooks

AI/ML Engineer

Multilingual scam detection for Indian SMS and WhatsApp, measured against a cheap baseline

Flags payment scams in code-mixed Indian SMS and WhatsApp messages, for the people who receive them.

Raised scam-detection F1 from 0.908 to 0.998 on a largely synthetic 1,554-message validation set by fine-tuning XLM-R with adversarial augmentation.

AI/MLLLMShipped

Scam F1, validation
0.998
Baseline: TF-IDF + logistic regression 0.908
XLM-R base with adversarial augmentation on a 1,554-message validation split of a largely synthetic corpus, threshold 0.5, 95% CI 0.995–1.000 (results/evaluation_with_ci_aug.json). Evidence about the method, not real traffic
ScamShield flagging an example English scam message, with its urgency and suspicious-link tactics and the evidence for each

A recommender whose most important finding is that recency-weighted popularity wins

Recommends each shopper's next products from a catalogue of over a million items, with a reason for each.

Showed that recency-weighted popularity (HR@20 0.024 on 20,000 warm users) beat every learned model, including two-tower at 0.00025, by evaluating on a strict global timeline.

AI/MLIn progress

Warm-user HR@20, best source
0.024
Baseline: Two-tower 0.00025, ALS 0.0053
Recency-weighted popularity on 20,000 warm users, exact full-catalogue ranking, one held-out target each (results/evaluation_electronics_0core.json); every learned model's paired-bootstrap difference against it excludes zero
Bar chart of RankStack's HR@20 on warm users by source: recency-weighted popularity 0.02395, popularity 0.0069, ALS 0.00525, co-occurrence 0.00295, two-tower 0.00025

Remaining-useful-life prediction for turbofan engines, with the test engines still unopened

Predicts how long each turbofan engine has before maintenance, with an honest error bar. A research demonstration.

Reduced remaining-life error to 7.40 cycles RMSE, against 8.90 for cycle count alone, in cross-validation over 19 engines, by training a 1D CNN; 10 test engines are unscored.

AI/MLIn progress

RMSE, best model (cycles)
7.40
Baseline: 8.90 from cycle count alone, with no sensors
1D CNN, 5-fold cross-validation grouped by engine over 19 engines (results/phase3_sequence.json), 95% interval 4.61–10.20 resampled by engine; the 10-engine test group has not been scored yet
Bar chart of Prognos RMSE by model with 95% intervals: 1D CNN 7.40, Transformer 7.43, LightGBM 8.15, cycle count only 8.90, LSTM 13.00, training mean 23.76, per-channel trend 25.87

Interactive demos

Three small demos, one for each kind of work I do. Each one loads only when you open it, and each works with a keyboard.

Train a network in your browser

AI/ML

Click the field to place points of two classes, and a small neural network learns to separate them while you watch. The shading is what the network predicts for every point. Beside it, the network itself: thicker edges are larger weights, and pulses show how a point's values pass through.

This demo needs JavaScript.

Watch attention

LLM

A language model reads a sentence as tokens, and each token looks back at earlier ones to decide what comes next. Pick a sentence and a token to see where it looks, layer by layer and head by head. Brighter arcs carry more attention.

This demo needs JavaScript.

Scale a system

SDE

Requests flow through a load balancer, service replicas, a cache, a queue and a database. Turn up the traffic until it breaks, then add replicas or a cache, or crash something, and watch p95 latency, throughput and errors respond.

This demo needs JavaScript.