Self-taught and project-driven. I design, build, and ship real software end to end — authentication, payments, grounded LLM features — and I document the decisions, trade-offs, and failures behind every build.
Most portfolios describe what someone can do. This one is the proof: everything below is either live in production right now, or on a public roadmap — each item labeled honestly, never blurred together.
One push rebuilds two independent clouds in parallel. Step through a flow, or click any service to follow it.
The "Ask my AI" chat retrieves from Samuel's real documents, answers only from them, shows the sources it used, refuses what they don't cover, and never exposes the API key.
A Python API with Pydantic models that validate every request and response against a schema.
Push to GitHub and the backend redeploys on Render while the site redeploys on Vercel — two clouds, automatically.
The API accepts browser requests only from approved origins — locked down, and configurable per environment.
A pytest suite exercises the API and guards the assistant's honesty — the tests fail if the bot ever overclaims.
Interactive OpenAPI documentation at /docs, generated straight from the typed schema.
Every request gets an ID and a structured JSON log line; each answer carries a timing trace, and /metrics reports live latency, request counts, and running cost.
terraform plan round-trips clean against liveShippedThis is the real path a message takes when you ask the assistant something. Every layer below is pulled from the code that is actually running — not a diagram of how it might work. Click through them.
The X-ray above follows one request; this is the entire build in prose — plain-English enough for a newcomer, exact enough to defend to an engineer. Every number, file name, and constant in it was read straight from the source code.
The request lifecycle, the RAG pipeline, evals, observability, the agent and MCP server, streaming, containerization, and the infrastructure-as-code underneath — one document, end to end.
Open the architecture document ↗The assistant is graded on a fixed set of 108 questions with known-correct behaviour. A deterministic harness scores the objective parts; a stronger model grades answer quality as a judge. Every number below is from one real run — the full results live in the repo.
Early on, asked whether Samuel had shipped response streaming and Terraform — both still in progress at the time — the live bot answered yes, he's shipped them. The judge flagged the overclaim. The grounding rule was tightened, the fix re-measured on the failing cases, then deployed and verified on production — the bot went back to calling that work in progress. (Both have since shipped for real, the honest way.) Measure → find a real bug → fix → re-measure → deploy → verify. Closing that loop is the point of the module.
A stronger model (Claude Sonnet 5) grades what the runtime model (Haiku 4.5) wrote. These are uncalibrated: a judge is only trustworthy once it's shown to agree with a human on the same answers. A 24-item blind hand-labelling slice is built and waiting; until it's scored, these numbers carry this label instead of a headline. Publishing a judge score as fact before that check would be the exact overconfidence this module exists to catch.
Read live from the API's /metrics endpoint as this page loads — request counts, latency, and running cost since the current server process started. They reset when a new version deploys, and the line below says exactly when that was.
Process-local and honest about it: a single free-tier instance with no metrics database, so these are the numbers since this deploy — not lifetime totals, the same discipline as the rest of the site. If the panel says the API is waking, the backend is a free instance that sleeps when idle and is spinning back up.
Give it a task — a job description, work you need built, a question about fit. It decides which tools to call over Samuel's real data, loops until it can answer, and shows every step. This is the real draw of agents: autonomous, multi-step tool use grounded in real information — not a single canned reply.
The agent calls the live API and a real model, so each run costs a fraction of a cent and takes a few seconds. Tools are read-only — it looks things up, it never takes an action.
Productized packages with transparent "starting at" pricing and two revision rounds on every build. Bigger scopes we shape together on a short call.
A grounded customer-support chatbot on Claude or OpenAI — honest refusal and a clean human handoff, like the live demo.
Everything in Starter, plus real integration into your existing app and the plumbing behind it.
A production feature or app, built end to end — typed, tested, and deployed.
A fast, framework-free responsive site built for conversion.
Ongoing care after your build ships — so it keeps working and keeps getting better.
RAG with citations (pgvector), source attribution, and an eval pipeline. From $6,000.
Start a project →Agentic tool use with integrations, error handling, observability, and containerized deployment. From $4,000.
Start a project →Wrap your APIs and data as an MCP server — auth, rate limiting, logging, Claude/OpenAI clients. From $6,000.
Start a project →There's a real typed API behind this form: every field is validated server-side by Pydantic, then stored.
POST /inquiry
{
"name": string, // required
"email": string, // required, RFC-validated
"company": string | null,
"package_interest": string | null,
"message": string // required
}
→ 201 { "status": "received" } · 422 { field errors }