Product R&D · Applied AI

Experiments

Give me the problem. I investigate it, build a working answer, test it, and tell you what we learned.

These are working investigations, not concept projects. Each starts with an uncertain product or technical problem. I investigate the constraints, frame what would make the idea true or false, build the smallest serious system that can answer it, test that system against reality, and record what changed in my understanding.

01
Problem
What is actually uncertain?
02
Investigate
What would have to be true?
03
Build
Make the question testable.
04
Test
Put the answer under constraint.
05
Learn
Record what changed.
EXP.01

zinepic

App Store · iOS

Problem

Can generative layout feel art-directed rather than random?

Working answer

A local-first iPhone app that turns ordinary photos into art-directed zine pages. The engine analyses each image once at ingest, generates pages from a constrained visual grammar, and stores the resolved plan behind every composition. The system may choose, but the product must remember what it chose: reload a zine and every page reconstructs exactly, because the plan is data, not chance.

Build

  • EngineZineKit, a pure Foundation and Core Graphics composition layer: no UI framework touches it, so every layout decision is testable on the host
  • AnalysisVision and Core Image, run once at ingest, persisted by image hash and analysis version; never re-run on a determinism-sensitive path
  • GenerationSeeded SplitMix64 randomness through a single generation context; positions, rotations and treatments quantised before a plan persists
  • RenderCore Graphics and Core Text at any output scale; restore and export replay the plan, never regenerate
  • DisciplineTest-first engine development; every user-visible generation persists its resolved render plan

Test

Shipped on the App Store. Restore and export replay the saved plan rather than regenerate it, and the engine was built test-first.

Learned

What it taught. Generative systems become trustworthy when surprise is separated from reproducibility. Delight lives in the generation; trust lives in the replay.

GENERATE PLAN KEPT
Fig. E1 · The plan is data, not chance
EXP.02

driftspeak

30 volumes · 8 languages

Problem

Can language learning behave like listening to an album rather than completing a lesson?

Working answer

A bilingual audiobook format anchored to the albums and films people already love: a sentence in the target language, a sentence in English, then slower. Thirty volumes across eight languages, from Japanese to Brazilian Portuguese. Behind the catalogue sits the real experiment: a production system that can hold format, taste and review at scale, because a generative-media product without one is a demo.

Build

  • FormatA bilingual chapter grammar with anchor lines and controlled variation: the format is the product, the model is staff
  • CastingA multilingual TTS casting desk: voices audition for a part, a take once locked is never re-rendered
  • ReviewNative-language review and pronunciation gates before any chapter masters; evaluation logs on every pass
  • TruthStructured manifests as the source of truth for every volume and chapter; render tooling replays them deterministically
  • SurfaceNext.js and Stripe storefront at driftspeak.com; native iOS listening app in App Review

Test

Thirty volumes in eight languages, each through native-language review and pronunciation gates, with evaluation logs on every pass. The storefront is live at driftspeak.com.

Learned

What it taught. The model is not the product. A durable generative-media product needs format, taste, review, and a production system that preserves all three at volume thirty as strictly as at volume one.

SCRIPT CASTING REVIEW MASTER
Fig. E2 · A take, once locked, is never re-rendered
EXP.03

memnant

MCP server · public

Problem

What should an agent remember, when yesterday's correct decision may be wrong today?

Working answer

Every agent remembers now. Remembering was never the hard part. The hard part is that remembered decisions go stale, get superseded, and contradict each other. A stale decision confidently injected into context is worse than a forgotten one. memnant is a decision ledger, not a notebook: memory is what happened; institutional knowledge is what is still true. memnant maintains the second.

Build

  • LedgerAppend-only records; when a decision changes, a supersession chain forms rather than an overwrite
  • StalenessSemantic staleness scoring as the code underneath a decision moves; contradictions flagged between builders
  • RetrievalLocal vector embeddings and semantic recall; synthesis cites its sources, so the current position stays traceable to evidence
  • ShapeSQLite, offline-first, git-native team sync, worktree-aware for agent fleets; exposed to any agent over MCP

Test

Released as a public MCP server. It runs as the decision ledger under the studio's own agent sessions.

Learned

What it taught. Long-term agent usefulness depends less on retaining more context than on knowing which retained context is still true. Memory without staleness detection gets more dangerous as it grows.

SUPERSEDED STALE?
Fig. E3 · What happened vs. what is still true
EXP.04

Circuit

Production system · live

Problem

What should a room know about its own door, when an RSVP is a promise and not an arrival?

Working answer

A production system for the people who run rooms. Guest lists and check-in at the door, turnout forecasting, payments, and physical tap cards a phone can read. One verified presence record per guest per event, however they came in. The bet is that a room that remembers who actually turned up plans a better next night than one that remembers who said they would.

Build

  • DoorGuest lists, check-in from a phone, and tap cards fixed to the room; one presence record per guest per event, however they arrived
  • ForecastAn expected turnout, calculated from attendance history by arithmetic; no model call anywhere
  • ReturnInvitations ordered by who showed up before; reconfirmation the day before, waitlists, and held places that expire

Test

Running in production at meetcircuit.com. The forecast makes no model call, so every expected number traces back to recorded attendance.

Learned

What it taught. A system cannot record an absence it never looked for. A no-show only exists once the door has been run, so the hard part of measuring a room was never the arithmetic. It is the minute at the door.

EXPECTED AT THE DOOR AGAIN
Fig. E4 · The promise, and the door
EXP.05

Nemolines

App Store · iOS

Problem

Can learning lines feel like playing an instrument rather than rereading a document?

Working answer

A local-only native iPhone app for actors. Paste a monologue and it becomes a first-letter recall drill, paced against a metronome: read, flash, teleprompter. One canonical script body is the single source of truth; the first-letter view is derived at render time, never stored. One small transformation, committed to completely, produces a new rehearsal behaviour.

Build

  • StackSwiftUI and SwiftData, Swift 6 strict concurrency, Liquid Glass native
  • ArchitectureBusiness rules in a fully unit-tested store; pure text-analysis functions; thin SwiftUI views
  • DisciplineSwift Testing against in-memory SwiftData; XcodeGen, the project file never committed
  • StanceNo backend, no accounts, no analytics: the rehearsal room is private

Test

Shipped on the App Store. Its business rules are covered by Swift Testing against in-memory SwiftData.

Learned

What it taught. A small transformation produces a new behaviour when the interaction commits fully to the user's real task. Restraint is a feature that ships.

THE SCRIPT FIRST LETTERS
Fig. E5 · Memory against the beat
EXP.06

The Routed Authoring Harness

In production · private

Problem

Can a generative writing system preserve one voice, without loading the whole identity into every context window?

Working answer

The studio's oldest running experiment. A portable authoring system that classifies each task, loads only the relevant craft and identity files, resolves disagreements through an explicit hierarchy, and evaluates output against a regression corpus. More context does not mean more fidelity. A strong system knows what not to load, and has a way to detect when its own operating rules begin to loosen.

Build

  • RoutingThirty routes, one per kind of task; each names the files an agent reads, in order, under a context ceiling it must not exceed
  • HierarchyOne file read before everything: position, precedence, what decides when rules disagree. One file read last: the refusals
  • AuditsMechanical checks before model checks: grep-level tics caught by script, judgment failures caught by adversarial read
  • RegressionA frozen fixture corpus; any change to the system's laws runs against it before merging

Test

In daily production as the studio's writing system. Any change to its laws runs against a frozen regression corpus before it merges.

Learned

What it taught. The system's value is not in what it can produce; any operator can get competence from a frontier model now. The value is in what it declines to produce, and in noticing when its own walls move.

ROUTE A ROUTE C ROUTE B TASK THE PAGE
Fig. E6 · A smaller room with harder walls

The questions are old

My 2016 computer-science dissertation asked whether images help machines translate language, multimodal work supervised by Prof. Lucia Specia, years before multimodal was a product word. My UCL Human-Computer Interaction thesis took a prize for studying how people express themselves in social augmented space, in 2018. The technologies changed. The questions stayed consistent.

Underneath the experiments sits ten years of product: functions stood up from zero inside a global retailer, conversion work at marketplaces, hackathons run across EMEA for Google at twenty-one. The studio's method is documented in the open: what gets scripted, what gets inferred, how output is verified.