Self-taught Python developer building AI agents, RAG systems and automation backends. I ship things I can explain end to end, with tests, evals and docs. No black boxes, mine included.
Featured: lookup-agent
A chatbot agent that looks things up before it answers. It searches policy documents, queries a Postgres database safely, and calls a live exchange-rate API, then shows exactly where each fact came from.
- LangGraph agent with tool calling, memory and a step cap
- Hybrid search (pgvector + keyword + reranker) and a read-only, locked-down SQL tool
- Evals with real numbers: 40/41 on the main set, 15/15 on a set of trap and reasoning questions
- Production basics: FastAPI, Docker Compose, CI, 93% test coverage, Langfuse tracing
- A chat page with sources, light and dark mode, and a stop button
| Project | What it does | Built with |
|---|---|---|
| lookup-agent | AI agent over documents, a database and a live API, with sources and evals | LangGraph, FastAPI, Postgres + pgvector, Docker |
| Steadfast | Reliability layer for LLM APIs: retries, rate limits, provider fallback, tool calling, validate-and-retry. On PyPI as steadfast-llm |
Python, Pydantic, httpx |
| ragdocs | RAG chatbot for your documents, with an eval layer | FastAPI, Chroma, Streamlit |
| leadhound | Scrapy scraper pulling real estate agent listings | Scrapy, Python |
| Switchyard | n8n workflow that cleans, dedupes and scores leads, then lands them in Airtable | n8n, Docker |
| Hearth | Discord bot for onboarding, moderation and a server-specific FAQ | Python |
Next up: a full-stack lead-gen agent platform that turns leadhound and Switchyard into a multi-agent pipeline with a human-approval step.
Building a freelance track record on Upwork: AI agents and RAG, FastAPI backends, scraping (Scrapy, Playwright) and automation (n8n, Docker).



