Work

Twenty-three projects. Ten are alive, six were built in a weekend, and seven are dead. The dead ones are here on purpose — a portfolio with no failures in it is a portfolio that is lying to you.

Telos Building2026 — A résumé that echoes the job description is a search result. A person who gets placed is the answer. AI candidate sourcing for IT staffing. Ranks on placement history rather than keyword overlap, syncs live from JobDiva, and is in the hands of a real firm. 23 merged releases. FastAPI · Pinecone · Supabase · GPT-4o · JobDiva · PDL Goodhart Research2026 · hackathon If the grader can be gamed, training harder just produces a better cheater. Automatically hardens RL verifiers against reward hacking. A red-team swarm finds answers that pass the grader but fail an independent oracle; a green team patches the grader. Reports a before/after robustness number against held-out ground truth. Python 3.12 · Anthropic SDK · FastAPI + WebSocket · pytest Envoy Shipped2026 · hackathon An agent worth delegating to is one that holds your details under pressure. A voice agent you hand a real errand to — it calls the venue, negotiates with a live host and books it. Holding your details while it works is what makes the self-written guardrail matter: one rule took credential-leak refusal from 0/5 to 5/5 under an independent judge. Pipecat · NVIDIA Nemotron · Gradium TTS · Twilio · Cekura Hindsight Shipped2026 · hackathon Memory teaches an AI your facts. This teaches it how you tend to be wrong. A self-reflection layer for GBrain: extracts your past predictions, grades them against what actually happened, and corrects future advice for your specific blind spots. The concept shipped into GBrain two days later as the named "Hindsight calibration wave". TypeScript · Express · Chrome extension · GBrain skills Yaad Shipped2026 · hackathon A fluent wrong answer about someone’s grandson is worse than admitting you don’t know. A bilingual (Hindi/English) voice companion for people with dementia. Answers are grounded in a retrieved memory graph or not given at all — the failure mode of confabulating someone's life is worse than saying "I'm not sure". LiveKit · Pipecat · MiniMax TTS · Moss · FastAPI · Supabase Vibecheck Shipped2026 Real scanners find the bug. The model only translates it and writes the fix. Paste a GitHub repo, get a plain-English security and launch-readiness report — then one click opens a PR that fixes the top issues. Real static analysis, with an LLM only for translation and patching. Next.js · FastAPI · Semgrep · Gitleaks · OSV · Claude · Upstash Strata Shipped2026 · v1.0 Every hard constraint came from the crawl space, not the model. AI field guidance for licensed plumbing contractors. Camera diagnosis, voice-first input, and full offline operation from a local FTS5 cache — because the crawl space has no signal. 56px touch targets for gloved hands. React Native (Expo) · FastAPI · GPT-4o Vision · Pinecone · SQLite FTS5 pipecat-firewall Shipped · PyPI2026 A blocked turn never reaches the model, so there is no prompt left to argue with. A drop-in security firewall for Pipecat voice agents. Blocks, flags, or redacts prompt injection and PII extraction before the LLM runs — deterministic regex detectors, zero added latency, no API key. On refusal it speaks a canned reply, so there is no prompt to argue with. Python · published on PyPI · MIT · CI Sentry Shipped2026 · hackathon A demo that hides its seams is a demo you cannot trust. Call it, socially-engineer it into leaking a card number live, then watch it cluster its own failure, rewrite its guardrails, hot-swap config mid-call, and refuse the same attack seconds later. The README is unusually honest about which parts are real and which are replayed. NVIDIA Nemotron · Pipecat · Daily WebRTC · Deepgram · ElevenLabs RepairSync ↗ Shipped2026 · hackathon A referee only works if it is one neither side wrote. A neutral AI referee for auto-repair disputes. Audits collision estimates against live parts pricing, flags overcharges and skipped safety steps, and issues a report all sides trust. TypeScript · Convex · web dashboard Signal ↗ Shipped2026 The scheduler owns the send. The dashboard only manages it. An AI-curated daily newsletter. Fetches RSS, uses Claude to select and summarize, sends via Resend, archives to Supabase. The pipeline runs on a GitHub Actions cron; the Next.js dashboard only manages it. Node · Claude · Resend · Supabase · GitHub Actions · Next.js InternTracker ↗ Shipped2026 Tracking is the easy half. Parsing the email that changes the status is the product. Internship application tracker with AI company research and email parsing — paste any recruiting email and it extracts company, role, status, and deadline, then updates the board. Next.js · Supabase · Claude Meeting Prep ↗ Shipped2026 A brief is only useful before the meeting. Generates investor briefing documents ahead of meetings by pulling live web search, CRM notes, and fund thesis context into one structured brief. Built against M13's workflow. FastAPI · Tavily · OpenAI · FAISS · Airtable · React Kalshi vs. options IV Research2026 A negative control is what makes the positive result worth reporting. Do prediction markets give a cleaner probability signal than options markets? On unemployment markets, Kalshi Granger-causes VIX at a two-day lead (p=0.024, 222 days). CPI markets show nothing — which is the control that says I'm not cherry-picking. Python · Kalshi API · yfinance · statsmodels Transaction Pattern Analyzer ↗ Research2026 Interpretability mattered more than model complexity, so the features did the work. Anomaly detection on business transaction data — 10 engineered contextual features, three detection methods compared, Isolation Forest against rule-based scoring. Deliberately a prototype: the notebook is honest that interpretability mattered more than model complexity. Jupyter · scikit-learn · pandas Trialsignal ↗ Dead2026 I built the interface before proving I could get the data. Wrong order. Alternative-data platform to forecast consumer class actions before they file. The thesis was good and the data acquisition was the whole problem — I built the front end before I could prove I could get the signal. Wrong order. Next.js · shadcn/ui · TypeScript Tab Memory Agent Dead2026 I did not want to run always-on capture on myself. A Chrome extension that gave your browser persistent memory of intent, not just URLs. Passive capture of every page you spent 15+ seconds on. Killed it: the privacy cost of always-on capture was not worth the recall benefit, and I did not want to run that on myself. Chrome extension · mem0 · Cartesia · Python SpendLens ↗ Dead2026 It worked. It was a feature, and features do not survive as products. Upload a bank CSV, ask questions in plain English, get charts. Worked fine. Died because it is a feature, not a product — every bank and budgeting app ships this now. Python · Streamlit · GPT-4o-mini Referral Hunter Dead2026 · private The interesting half of the problem became Telos. Automated finding warm referral paths into companies. Shelved — the interesting half of the problem turned into Telos, which is the same matching question pointed at a market that pays for it. Python P-oker ↗ Dead2026 A good excuse to learn self-play that never left the toy environment. Agentic poker AI — simplified environment, self-play agents, opponent modeling, an EV and win-rate dashboard. A good excuse to learn self-play; never got past the toy environment. Python · Supabase DoubleJack ↗ Dead2026 A class project, finished and left alone. Pantry Tracker & Flashcard SaaS ↗ Dead2024 The two Next.js tutorial projects everybody builds. Including them because this is where I started, and pretending otherwise would be silly. Next.js · Firebase NeetCode submissions ↗ Ongoing2026 Not a project. Just the receipts. Python