I build Python backends and AI integrations, and I check every claim against real output — tests, logs and the data underneath, not the explanation on top.
APIs, background workers and databases — FastAPI, Celery, Redis, PostgreSQL — built so a failure can be traced to its cause.
02
AI integrations
Search over real document sets and agents that call real tools — hybrid retrieval, reranking, LangGraph, MCP — with answers that cite where they came from.
03
Full-stack products
Next.js / TypeScript front ends on top of the backend, owned end to end — from the data model to the interface people actually use.
A support agent for the pydantic/pydantic repository. It reads a new issue, searches ~1,500 issues that were actually solved, and drafts a reply that cites them. Celery pollers keep the knowledge base current: when an issue closes, it is promoted only if it was really fixed.
Running: INTAKE → RESEARCH → DRAFT as a LangGraph state machine. Hybrid retrieval — pgvector plus Postgres full-text search, fused with reciprocal rank fusion and reranked. The research step calls the GitHub MCP server as a client through a read-only, ten-call allow-list. The biggest fix was in the data, not the prompt: storing solutions instead of closed tickets.
A RAG assistant over the Spanish INSHT / NTP occupational-safety corpus. It answers regulatory queries with retrieved evidence and grounded generation — every claim traceable to a source.
A full-stack agent (RepoDoctor) that clones any repo, auto-detects its stack (Python / Node + package manager), installs dependencies, and runs its own test / build / lint suites to diagnose and explain what's failing. Built as a LangGraph state machine — clone → detect → install → diagnose → report — with every claim grounded in real command output. Each repo runs in an isolated sandbox with async subprocess execution and per-command timeouts; the Next.js frontend streams progress live via server-sent events.
Fast-tracked past intermediate interview rounds. Built a PowerPoint-to-PDF async conversion service: upload triggers a Celery worker via Redis, LibreOffice converts server-side, the result lands in S3, the frontend polls for completion.