Projects

These are products I designed, built and shipped on my own time. I build them with AI coding assistants, which I think is worth stating plainly rather than hiding: the interesting part of this work is no longer typing the syntax, it is specifying the thing completely enough that it survives contact with real users. Each entry below says what the product does, what I decided, and what building it taught me about AI products.

AI Trio live

GPT-5, Gemini and Claude in one conversation, arguing with each other.

The problem. Ask one model an ambiguous question and you get one model’s answer, presented with total confidence. Its blind spots are invisible because nothing contradicts them.

What I built. A question fans out to all three models simultaneously. They stream back in parallel into a shared conversation where each can see and challenge what the others said. A Voice Room lets you talk to all three at once, and a safety layer runs alongside responses doing prompt-injection detection, output validation and rate limiting.

The decision that mattered. Treating disagreement as the product rather than a defect. Most multi-model tools aggregate or compare; putting the models in conversation changes the interaction from “get three answers” to “watch a debate,” which is what actually surfaces the hidden tradeoffs in a decision.

What it taught me. Roughly 95% of specified features worked on first generation — but that number hides everything not in the spec. Edge cases and security had to be named explicitly, and the architecture was sound only because I designed it. Deployment, cost monitoring and security architecture still needed me. The bottleneck moved from writing syntax to specifying requirements completely. Running it also taught me why pay-per-token pricing is fair but unpredictable, and pushed me toward hybrid pricing with a predictable floor and user-set spending caps.

Stack: GPT-5, Gemini, Claude APIs · real-time streaming · speech-to-text · built with Claude Code

Sign in with Google; the free tier covers 10 messages a day.

FashionMateAI live

A wardrobe assistant that remembers your closet and your taste.

The problem. Style advice from a general model is generic, because it knows nothing about what you actually own or what you have worn and liked.

What I built. A GPT-4o assistant over a LlamaIndex retrieval layer, combining multi-turn memory with retrieval-augmented personalization so recommendations are grounded in your actual closet rather than in fashion generalities. Built as the capstone for Stanford Continuing Studies' Large Language Models for Business with Python.

The decision that mattered. Putting the wardrobe in a retrieval layer instead of the prompt. Personalization that lives in context windows evaporates; personalization that lives in an index compounds as the closet grows.

Stack: GPT-4o · LlamaIndex · RAG · multi-turn memory

ServiceOpsAI agentic co-pilot

Incident triage for SREs, in minutes instead of hours.

The problem. An SRE opening a page at 3am spends most of the incident just assembling context — which service, which recent change, which runbook, what happened last time.

What I built. An agentic LLM co-pilot that uses RAG over operational knowledge, function calling into live systems, and structured reasoning to assemble that context and propose a triage path. Built as the capstone for Stanford Continuing Studies' Generative AI for Product Managers.

The decision that mattered. Scoping it to triage rather than remediation. The agent assembles evidence and proposes; the human still acts. In an incident, a confidently wrong autonomous action is far more expensive than a slow one.

Stack: Agentic LLM orchestration · RAG · function calling · structured reasoning

CareersChatAI guidance platform

Turning a vague career question into a concrete plan.

The problem. People arrive at career decisions with fuzzy intent — “should I move into product?” — and generic advice cannot translate that into next steps specific enough to act on.

What I built. An LLM-driven platform that interprets user intent and maps it to curated resources and a concrete action plan, rather than returning prose advice.

The decision that mattered. Constraining the output to a curated resource set instead of letting the model free-associate. A plan you can start on Monday beats an eloquent paragraph.

Stack: LLM intent classification · curated retrieval · action planning