Work
18 projects since 2024. Most of them check their own output before anyone relies on it.
FIS Practice Gym
A deliberate-practice web app for psychotherapists based on the Facilitative Interpersonal Skills (FIS) framework (Anderson et al., 2009). Adaptive scenarios, scored by Claude Opus 4.6 against FIS-style rubrics, with three-layer feedback: a sharpened version of the user's response, an alternative from a different therapeutic tradition, and a "master class" showing how Yalom, Rogers, or Linehan would handle the moment.

DRAKON Chart Skill
An agent skill that turns procedures, requirements or code into genuine DRAKON flowcharts, the visual language built for the Buran space program, and refuses to hand over a chart it hasn't proven. A requirements interview, a machine-checked trace from every source clause to a chart item, strict topology validation, and a headless render check.

Elsewhere: Playable Economics
A ten-chapter economics crash course you play instead of read: markets, housing, congestion, trade, banking, causal evidence and behavioural defaults. Each chapter runs prediction, then experiment, then explanation.

Everything else
Newest first. Open any project for the full story.
Open Inquiry LabNov 2026Reproducible computational research on how public knowledge corpora represent societies.
Reproducible computational research on how public knowledge corpora represent societies. First study: Japanese and Greek Wikipedia, read as editorial records rather than surveys of populations. Every check returns pass, fail or unknown, and unknown is never reported as pass. Results are labeled exploratory or confirmatory, and confirmatory claims only touch a sealed holdout set.
Python · uv · Wikipedia dumps
One-Person AI Operations SetupOct 2026Claude Code configured as a standing assistant for my corporate and general affairs work.
Claude Code configured as a standing assistant for my corporate and general affairs work. At its core is a Karpathy-style wiki: source files are add-only, every page records its sources and how each fact was derived, and each fact lives in one place. Core rules are enforced by hooks, not just stated in prompts. A fresh-context verifier must sign off before any file is sent to another person, and every handoff is frozen so that edits can be turned into rules. A weekly scheduled run does mechanical checks, a 20-question retrieval test, claim-by-claim verification against sources and pre-approved fixes, and every check can return pass, fail, or unknown.
Claude Code
Byzantium History GameSep 2026Turned a Greek 5th-grade history textbook into playable lessons with dilemmas, teasers and a full lesson episode.
Turned a Greek 5th-grade history textbook into playable lessons with dilemmas, teasers and a full lesson episode. Static sites, no live AI: every line traces to the textbook. Five design pivots, each logged with what it superseded.
HTML · JavaScript · Claude Code
Blind EvalAug 2026A tool that grades finished work (an app, a website, an essay) in a fresh context with zero knowledge of how it was made, so the score can't be swayed by the build story.
A tool that grades finished work (an app, a website, an essay) in a fresh context with zero knowledge of how it was made, so the score can't be swayed by the build story. Rubric scoring plus an expert-panel review, a hard dollar cap enforced before every API call, and a hash manifest recording exactly what was judged. First run on its own repo cost $1.74.
mako-kitAug 2026My shared building blocks.
My shared building blocks. One tested copy of each primitive I had rebuilt across ~20 projects: LLM JSON extraction with repair, retry and PII scrubbing; spend ledgers with hard caps; phase gates with wall-clock limits; multi-provider LLM clients. A block only enters by diffing 2–4 existing copies and reconciling them, so the reconciliation doubles as the audit. 88 tests.
FlywheelJul 2026An interest-discovery agent that writes its own model of what I care about from my digital exhaust, scouts the internet daily against it, sends a brief over Telegram, and sharpens the model from my verdicts.
An interest-discovery agent that writes its own model of what I care about from my digital exhaust, scouts the internet daily against it, sends a brief over Telegram, and sharpens the model from my verdicts. Private by architecture: the model and evidence never leave my machine. Metered APIs run under a $10/day hard cap with retry caps.
Python · Claude · OpenAI embeddings · YouTube Data API · Telegram
Alumni Association PlatformJul 2026Members platform and public site for a university alumni association in Japan (~500 alumni), replacing a Wix site.
Members platform and public site for a university alumni association in Japan (~500 alumni), replacing a Wix site. Forked from the Our-Pins community platform. Behind it, a maintained alumni roster with embeddings and clustering for thematic dinner seating.
Next.js · Supabase · Python · SQLite · embeddings
Alumni Career Portal (concept)Jun 2026A proposal and clickable mock-up for an alumni portal for graduates of a professional training programme.
A proposal and clickable mock-up for an alumni portal for graduates of a professional training programme. Core job: a career pipeline, so alumni find work in their industry and stay discoverable for future hiring. Directory, cohorts and messaging exist only to support that.
HTML · JavaScript
Local Semantic Search & Enrichment Pipelines (SQLite + Embeddings + LLMs)May 2026Local SQLite as source of truth, vector embeddings for retrieval, LLM-driven enrichment, and budget-aware API pipelines.
Local SQLite as source of truth, vector embeddings for retrieval, LLM-driven enrichment, and budget-aware API pipelines. A Python CLI that ingests Substack archives, embeds each article with OpenAI's text-embedding-3-large, and supports natural-language search with author, date, and word-count filters. A discovery subcommand traverses Substack's category leaderboards and peer-recommendation graph to surface candidate newsletters.
Python · SQLite · OpenAI text-embedding-3-large · Claude Haiku 4.5
Private Community Map AppMay 2026Invite-only Next.js 15 / React 19 web app for a private group to crowdsource and comment on places discoverable via Google Maps.
Invite-only Next.js 15 / React 19 web app for a private group to crowdsource and comment on places discoverable via Google Maps. Tap any place on the map to see Google's info plus community vouches and comments. Built with Supabase (Auth, Postgres with RLS, Storage, Realtime), Google Maps JS + Places API (New), and Tailwind 4; implemented end-to-end with Claude Code on the web and deployed via Vercel.
Next.js 15 · React 19 · Supabase · Google Maps JS + Places API (New) · Tailwind 4 · Vercel
Cross-Cultural Perception Pipeline (YouTube + Claude + Embeddings)May 2026End-to-end Python pipeline that turns hundreds of foreign-language travel vlogs into a structured perception study of how one country is depicted to another.
End-to-end Python pipeline that turns hundreds of foreign-language travel vlogs into a structured perception study of how one country is depicted to another. YouTube Data API discovery → Claude classifier and rule-based triage → per-video structured extraction (locations, 12-dimension aspect sentiment, likes/dislikes, bilingual summary) into SQLite → voyage-3-large embeddings → NotebookLM-ready Markdown corpus. Locale config is parameterized so any source-language × target-country pair is a one-line swap.
Python · YouTube Data API · Claude · SQLite · voyage-3-large · KMeans · Altair
AI-Orchestrated Research & Financial Modeling PipelinesApr 2026A research-build-audit pipeline in Claude Code.
A research-build-audit pipeline in Claude Code. The research layer adapts Karpathy's LLM wiki structure (cross-linked markdown with atomic facts and citations), enriched with Gemini deep-research-pro for retrieval. The builder generates Excel models programmatically from the wiki to reduce hallucination risk. An adversarial auditor runs in a separate context across 2–3 rounds per workbook. A second project runs an end-to-end research workflow with Exa, Perplexity, and Firecrawl APIs, using sub-agents for parallel annotation and a verification pass that fetches every retrieved URL before final output.
Claude Code · Gemini deep-research-pro · Excel · Exa · Perplexity · Firecrawl
AI Screening InterviewerApr 2026A personal prototype of a structured AI interviewer: candidates answer adaptive questions, and assessors review scored transcripts in a separate dashboard.
A personal prototype of a structured AI interviewer: candidates answer adaptive questions, and assessors review scored transcripts in a separate dashboard. An applied test of whether LLMs can run consistent free-text assessment.
Next.js · Claude
AI-Assisted Matching for a 60-Person Alumni EventMay 2025Designed the survey and matching logic for a university alumni networking event.
Designed the survey and matching logic for a university alumni networking event. Collected attendees' goals, sharing vs. learning topics, conversation style, and career stage via Google Forms, then used ChatGPT o3 to tag and score responses. Assigned participants to two rounds of 4-person tables balancing shared interests with complementary expertise.
Google Forms · ChatGPT o3
No-Code Payroll Reconciliation for a Large Event WorkforceJul 2024Used Claude with Google Apps Script to reconcile ~25,000 timesheet records for 1,200 hourly staff across two incompatible systems.
Used Claude with Google Apps Script to reconcile ~25,000 timesheet records for 1,200 hourly staff across two incompatible systems. Merged data, removed outdated entries, recalculated pay, and added formula-based checks to flag improbable hours. Helped ensure on-time payouts.
Claude · Google Apps Script