Things that shipped, and one that didn't.

Four projects. Three are in testers' hands; the fourth was researched and dropped.

Concept artwork from One of Them Is Lying: an empty office at dusk, one desk lit.
Case artwork · One of Them Is Lying
A—01

One of Them Is Lying

A bilingual detective game where the suspects are language models, and they lie.

On TestFlight
A suspect portrait, composed and unbothered.
Composed
The same suspect, beginning to look uneasy.
Nervous
The same suspect, visibly rattled.
Rattled
The same suspect at the moment the story breaks.
Caught
Problem
A suspect who lies has to lie the same way twice. The story has to hold across a whole interrogation and break in exactly one place.
Decision
Everything runs on the phone, on Apple’s ~3B Foundation Models. No server, no cloud model, no ad SDK. Universal conduct rules live in the engine; case files carry content only, and a linter fails the build if a rule leaks into one.
Outcome
56 cases in English and 简体中文 — 112 files. A 24-archetype portrait library, four states each. Every case embeds a solve path the test suite replays against the live model.
  • Cases 56 × 2 languages
  • Runs on Device only
  • Portraits 24 × 4 states
  • Gate Live-model solve paths
A—02

LittleSpoon小勺

A bilingual solid-food tracker two parents share, with nothing on anyone else’s server.

On TestFlight
LittleSpoon home screen showing the day’s log.
Today
The food library, filterable by group and status.
Food library
Insights, showing allergen progress and coverage.
Insights
Problem
Two parents, two phones, two languages, one picture of what a baby has eaten. Without an account, a subscription, or a company holding the record.
Decision
Local-first. iCloud does the syncing, each parent on their own Apple ID. No accounts, no backend, no subscription, no ads. Written against a spec before any code.
Outcome
188 foods seeded, 55+ of them Chinese staples, 21 compound dishes. 91 unit tests. The screenshots here came out of an automated run that walks the logging flow in both languages.
  • Foods 188 seeded
  • Tests 91 unit
  • Sync iCloud, no account
  • Languages EN · 简体中文
A—03

Aloud

Menu-bar dictation that runs entirely on the Mac.

Signed & notarised
The Aloud application icon.
Problem
Dictation is either fast or accurate. Streaming models give you words as you speak and cost precision; whole-utterance models are right and late.
Decision
Speech recognition sits behind one Swift protocol. The audio, hotkey, HUD and text-injection layers never learn which engine is running, and engines swap at runtime. Native Swift and SwiftUI on Core ML. No telemetry, no analytics, no network call except a model download you ask for.
Outcome
Signed, notarised, in testers’ hands. Two engines behind one interface. The same abstraction carried a C#/.NET port to Windows.
  • Runs on Device only
  • Engines 2, swappable live
  • Built with Swift · Core ML
  • Also Windows port
R—01

AlgoTrade

A trading strategy, researched and not deployed.

Not shipped
An equity curve from the AlgoTrade research analysis.
One rejected candidate’s equity curve
Problem
The same 17.5 months of market data had been searched about ten times. On the eleventh pass, a good-looking result is as likely to come from the searching as from the market.
Decision
The strategy was dropped and the failure mode written up as a standing rule sheet: discovery split from validation, and the arithmetic of multiple comparisons applied before any deploy decision.
Outcome
Nothing went live. What exists is a research loop that can tell a finding from a coincidence, and a written reason for every rejected candidate.
  • Data 17.5 months
  • Search efforts ~10 on one slab
  • Deployed None
  • Output A rule sheet

Yours would be the first with a client's name on it.

Send the problem. You will get a scope and a price.