Let’s talk
Selected work / 01—03

Three systems for information that degrades in transit.

Ringi captures the disagreement a thread leaves implicit, Phantom keeps inference accounting attached to a stream that may terminate early, and Kizuki checks a proposed update against the evidence already on record. I built each one from the interface down to the data layer underneath it.

01 / AI × collaboration

Ringi

Ringi operates as a structured decision instrument inside Slack. On session initiation, the platform messages each stakeholder independently, capturing their position and the constraints underneath it before anyone sees another participant’s answer, then synthesizes those responses into a brief that names the crux, presents the options, and returns a recommendation to the people the decision affects.

Read the case study
02 / AI × infrastructure

Phantom

Phantom operates as an OpenAI-compatible inference gateway with prepaid keys. The platform verifies the key and its available budget before routing a request through Vercel AI Gateway, captures usage while the response streams rather than after it completes, and settles every request in integer micro-USD against a PostgreSQL ledger — including requests the client abandons mid-stream.

Read the case study
03 / AI × developer tools

Kizuki

Kizuki operates as a local-first intelligence layer that organizes scattered work activity into a Markdown vault on the user’s own filesystem. The agent returns a structured payload and deterministic JavaScript applies the write, which keeps file mutation separate from model reasoning, preserves handwritten notes outside the managed section, and attaches a source receipt to every signal so any claim can be traced back to the meeting or update that supports it.

Read the case study
04 — Exploratory work

Smaller projects, built to answer a single question.

Match data and music, treated as systems worth reading carefully.