Alex Toohey

← Back to the workshop

From the workshop bench

ProbatePilot

Python · FastAPI · Next.js · Claude API · Redis · Google Cloud Run · July 2026

When someone dies, the executor is usually a grieving family member, not a lawyer. They’re personally liable if a deadline slips or creditors get paid out of order. Most families figure this out alone, over 100+ hours, with no one telling them what’s coming next.

ProbatePilot reads the estate’s documents and surfaces the next action before it becomes expensive. Upload a will, a bank statement, a deed, or a creditor notice and Claude extracts the assets, debts, beneficiaries, and dates into a running estate record. The core of the system is a deterministic California probate rule engine that evaluates the estate against real statutory deadlines with no LLM involvement. Claude gets a bounded tool-use loop to rewrite the alerts in plain language, but it can’t drop or invent one. If the model returns something invalid, the deterministic output wins. A bad API response and a missing key both degrade to the same correct alerts, just plainer prose.

The chat is real RAG. Every uploaded document is chunked, embedded with OpenAI’s text-embedding-3-small, and stored in a per-estate Redis 8 Vector Set. Each message retrieves the most relevant chunks from that estate before Claude sees anything. Voice input runs through Deepgram. Creditor notices, bank notifications, and beneficiary updates are drafted from the estate’s actual facts. Every Claude call is traced in Arize Phoenix, and an LLM-as-judge eval scores the DeadlineAgent’s output quality on real traces.

Built at UC Berkeley AI Hackathon 2026 with Davyn Paringkoan, Sameer Rahman, and Sherry Shen in 24 hours for the technology-and-social-impact track. I owned document intelligence: the upload pipeline that reads PDFs and images, routes by document type, extracts structured facts with Claude vision, and embeds chunks for retrieval. After the hackathon I refactored the codebase and took it to production solo. The backend runs on Google Cloud Run under a least-privilege IAM service account and the frontend on Vercel, both auto-deploying on push via path-scoped triggers so a change to one doesn’t kick off a rebuild of the other. Demo sessions get their own isolated copy of the seed estate and self-expire via a Redis TTL.

See the source ↗