AI Agent Architecture
Two AI agents that never talk to each other — by design. A personal assistant lives on a local machine, handling email, calendar, scheduling, and memory. A communications director lives in the cloud, watching the scientific literature, scoring papers, and publishing weekly digests. They run on separate hardware with separate identities, and the only way data moves between them is through a staging layer where I review everything first. The split started as a security decision and turned into a design philosophy.
AI-Assisted Research Pipeline
I wanted to sit down to write a grant and have an AI that had actually read my papers — not summarized them, but really read them. So I built a pipeline that converts ~1,000 scientific papers into searchable markdown, enriches them with PubMed metadata, and indexes everything for semantic search. Now a Claude Code session can search the collection, query PubMed, cross-reference findings, and tell me what's missing. The pipeline runs itself; the value is the conversation it enables.
Research Digest
Keeping up with the literature is a losing battle — hundreds of papers a week across a dozen journals. So I built an agent that does the first pass for me. It polls PubMed, embeds abstracts against my research interests, and scores candidates for both relevance and surprise. The best papers land on a scout page where I can skim, save, or request full-text summaries with "why this matters" context. It's like having a really diligent postdoc who reads everything and never forgets what you're working on.
Faculty Budget Dashboard
Managing research budgets across multiple grants, cores, and institutional accounts is genuinely complicated — split salaries, carry-forward rules, burn rates that shift every pay period. I built this dashboard to visualize all of it in one place: funding accounts, employee allocations, projections, and risk alerts. The demo uses fictional data, but the scenarios are real ones I deal with regularly.
AI Assisted IACUC Form
This site is under development, but the goal is to assist users in completing Institutional Animal Care and Use Committee applications. The user can either fill a replica of the standard form, or begin with the experimental design and work through the process. AI-assistance is provided in appropriate places. This project is helping me learn to build database backends, API calls to various LLMs, and consistent UI across multiple pages.
Task Scheduler
I kept losing track of tasks that weren't on the calendar — the kind of work that needs to happen but never gets a meeting invite. This reads my calendar via ICS, finds the gaps, and fills them with prioritized tasks using a greedy scheduling algorithm. Miss something? It quietly reshuffles. Finish early? The next task slides in. It ties into the personal assistant agent for daily plans and end-of-day reviews. Still in active development.
LLM-Council
A multi-LLM deliberation system where multiple AI models collaborate to answer questions through a structured 3-stage process. Forked from Andrej Karpathy's original project, I extended it with a PostgreSQL database backend for persistence, multi-user authentication with per-user encrypted API keys, and downloadable markdown reports.
PDF Keyword Search
This was the first app I built. The goal was a fast keyword search tool for large PDF documents, enabling searches for risky keywords across grant applications and other documents. It started with a simple Python script, but grew into a much larger app that allows multiple uploads, checks the PDF files for quality, and gives various output forms.
Battery Required
This is a simple personal site for my electric F150 Lightning. It calculates the battery percentage needed to reach a destination, including multiple stops. The point is that I can easily determine how much percentage I need to get to the next destination or charger, and whether staying extra at the first charger allows me to skip a second charger.