Skip to content

114 job descriptions read end to end, then held against my own work

26 of 41 demonstrated.
Here are the other 15.

I read 114 job posts from clients who actually pay, wrote down every requirement and every screening question, and then scored my own work against the list instead of against a shortlist I liked the look of. A script checks it, not me: to count as demonstrated a page has to be live and contain the thing it claims, or the claim fails and the build fails with it.

The gaps are on this page at the same size as the wins. A portfolio that lists only what somebody can do is a portfolio you have to take on trust.

Things you can open and operate right now

run it/consolePoint it at your own website and get the fixed files backrun it/agentAn agent that plans, calls these tools, fails, retries, and gets refused by a gaterun it/integrationWalk the GitHub API: auth, pagination, rate limits, retries, ETags. Run it twicerun it/pdfA Python service on its own box that reads a PDF and says what it could not readrun it/ragSearch this codebase, and read how often the right file comes back firstrun it/extractPull structured fields out of text where every value has to cite the textattack it/guardTry eight real bypasses against the guard that lets it fetch a stranger’s addressattack it/webhooksFire seven deliveries at a receiver, including a tampered body and a replayed oneattack it/mcpOpen a scoped session and try to escape the grantread the number/evals34 pages scored on precision and recall, fixture split against holdoutread the number/costThe same question four ways, with the tokens read off the responseread the number/statusReal uptime from a job on a VPS, where the guard probe passes only if an attack is refusedread the number/automationsHow many automations are running, counted off the API rather than rememberedread the record/claude-codeFour things the agent got wrong building this, and what caught each oneread the record/what-brokeEleven defects, each with the wrong diagnosis I tried first

Every requirement, ordered by how many of the 114 clients named it

The count is the most any one search slice gave it. The slices overlap, so adding them would inflate every number on this page.

22API integration, REST
Type a repository and watch every request: auth, Link-header pagination, the rate budget read before being refused, retries, and ETags. Run it twice and the budget stops moving.
62 tests on the decisions with no network in them. Two exist because the official Anthropic SDK gets Retry-After wrong in two ways.
/integration
20Python in production, not notebooks
A FastAPI service in a container on its own box, reading PDFs with PyMuPDF, deployed by a script that waits for the health check rather than assuming.
86 pytest tests, 72 of them on an address guard rewritten in Python from what the TypeScript one’s 74 tests taught.
/pdf
18Agents, agentic workflows, tool calling
An agent that plans, calls the other tools on this site, retries a failure with backoff, and is refused by a gate in code rather than a rule in a prompt. The whole trace is streamed.
42 tests with no model and no network. A checkbox removes the rules from the prompt and the same calls are still refused.
/agent
16Workflow automation
A real scheduled job in n8n on a VPS probing every service every ten minutes, writing rows, and going red in the execution list when something is down.
Never a platform cron. One place to see what is scheduled and one place a failure shows up.
/status
15Production deployment, operating a live system
Everything is deployed and probed on a schedule, with real uptime and latency from recorded history rather than a check made when the page loads.
/status
14Evals, graders, rubrics, regression testing
A golden set of 34 pages scored on precision and recall, fixture split against holdout, run fresh on every request.
/evals
12Error handling, retries, idempotency, failure modes
A failing tool retried with backoff and then handed back to the model, and a failed WRITE never retried because it may have succeeded before the answer was lost.
Two of the retry tests exist because the official Anthropic SDK gets Retry-After wrong in two ways.
/agent
12Databases, SQL, Postgres, data modelling
Six tables across three migrations, run through the Management API rather than pasted into an editor, behind the status history, the MCP audit log and the webhook idempotency store.
A unique violation on the idempotency key is handled as a lost race rather than an error, which is the case that only appears under concurrency.
/status
12MCP server development
A public MCP endpoint whose tools write, with the tool list filtered by the session grant.
/mcp
11Claude Code as a daily tool
The rules from the CLAUDE.md with the behaviour that caused each, four things the agent got wrong building this site with how each was caught, and what gets checked before a large diff is approved.
Three of the four defects were caught by something written down rather than by somebody noticing, which is the argument for the rules rather than for me.
/claude-code
10RAG, embeddings, vector search
Search this codebase and read how often the right file comes back first. 18 questions with an answer key written before anything ran, plus five it must refuse.
The eval found a corpus gap that looked like a retrieval failure: the file that answered one question had never been indexed.
/rag
10Monitoring, observability, tracing
Probes that do the smallest real version of each job, recorded over time, plus the agent trace and the MCP audit log.
The guard probe passes only when an attack is refused, because a control that stopped working looks healthy to a check that only wants a 200.
/status
9Tool calling, function calling
Real function calling against six tools, with the arguments the model chose printed in the trace.
/agent
9Webhooks
A public receiver you can fire seven deliveries at. Signature over the raw body, a window that looks both ways, and a repeat that answers 200 and does nothing twice.
25 tests with no network. The browser signs each delivery, so the signatures are genuine rather than prepared.
/webhooks
9n8n, Make, Zapier
The estate counted off the n8n API when the page loads, and the one workflow built for this site with its last self-triggered runs.
Names are never returned. Most of these are built for clients and the names say who.
/automations
8Claude Code Skills
Fifty-one skills counted off the filesystem by a script rather than from memory, with the date it counted. One of them, a 1,485 line n8n expression reference, has its rule table written as code and running on the page, so a visitor pastes an expression and gets the finding, the reason and the correction.
Names and sizes only. Several skills describe client outreach and their descriptions are deliberately not published.
/skills
8Structured output, JSON schema validation
A strict schema requested from the model AND validated here, with every field carrying the quote it came from and the quote looked up in the source.
30 tests with no API call. Asking a provider for strict JSON is not the same as checking it.
/extract
8Guardrails, gates, human-in-the-loop approval
Two gates. The refusing one turns down invented tools, duplicate writes and loops on the tool loop. The parking one stops before a public write, stores what the agent wanted to do, and finishes the run so nothing waits on a person.
Anybody can approve on the demo, and the page says so. Identity on the decide endpoint is the one thing a real deployment adds.
/approvals
8CI/CD, GitHub Actions
Three workflows. Every push checks the types and runs the offline suites and the Python service tests, and the run posts its own result to the site because the repository is private and a badge needs a public one. A separate scheduled workflow audits the live site against this ledger.
The Next.js build is not in the pipeline, because it reads environment variables CI does not hold. The page says so.
/ci
8Docker, containers
A two-stage image with the package manager deleted, running as a fixed non-root uid on a read-only filesystem with every Linux capability dropped, no-new-privileges, and hard limits on memory, swap, CPU and processes. The deploy waits on the health check the container defines, then reads every limit back off the running container and publishes it.
One container on one box. No orchestrator, no rolling deploy, no second copy, and the page says so.
/container
7Security: least privilege, audit trails, OAuth
Open a session, write inside the grant, get refused one step outside it, read the audit trail back.
Least privilege and audit trails are covered. OAuth is not, so this is not the whole requirement.
/mcp
5Token cost reduction, inference cost control
The same question four ways with token counts read off the response, cold, primed, warm and on a smaller model.
/cost
5Hallucination reduction, source traceability
Every extracted value cites a span, and the span is looked up in the text, so an invented citation is caught by a string search.
The page shows a live case where this FAILS: a real quote misread as answering a different question. That boundary is stated rather than hidden.
/extract
4Hooks (Claude Code)
The proposal gate hook, described with the failure that caused it: a job posted six minutes earlier collected fifty proposals while a deck was being rebuilt. It fires on any prompt mentioning a proposal or a cover letter and refuses to release client copy until a checklist is ticked.
Described rather than published. The hook body is the sales process itself.
/skills
3Model routing, choosing model plus reasoning settings
The same question on a large and a small model, both answers printed, both prices measured.
/cost
2Prompt caching
Cold against warm on an identical prefix, with the cached token count printed and the saving computed from it.
OpenAI caches automatically. The Anthropic half of the script shows explicit cache_control and needs credit.
/cost
10Cloud, AWS/Azure/GCP
Something running on a cloud primitive rather than a platform, with the cost and the failure mode stated.
not built
9CRM and ERP integration
One real CRM object created and reconciled, with the duplicate and rejection paths shown.
not built
8React, TypeScript
Six pages of it. Shown by existing rather than by being demonstrated, which is the weakest kind of evidence.
half done
7Self-hosted and open-weight models
An open-weight model answering the same question as the cost page, on the VPS, with the price per token computed.
not built
7Data pipelines, ETL
A pipeline with a row count that reconciles at both ends and a deliberately corrupt input that it rejects.
not built
6Memory stores, context management, persistent state
An agent that remembers across sessions, and a demonstration of what it forgets and why.
not built
5Prompt and model config versioning
Two versions of a prompt scored against the same eval, with the diff and both scores.
not built
5Document processing, OCR, extraction
Structure, headings, tables and text coverage come out. It says which pages need OCR rather than doing OCR, and that gap is stated on the page.
Not the whole requirement: it detects that OCR is needed and does not perform it.
half done
5Microsoft stack, Graph, Power Automate, Fabric
Lowest priority. Skip unless a specific job needs it.
not built
4Latency, first-token, sub-200ms decisioning
A decision endpoint measured under load, with the p50, p95 and p99 and the point it degrades.
not built
4Voice and telephony, Twilio, LiveKit, ElevenLabs
Latency broken down by stage on a real call, since that is what the voice posts actually ask.
not built
3Fine-tuning, LoRA, SFT, DPO, RL
Needs a GPU budget. Park it until a job justifies the spend.
not built
3Prompt injection defence, red teaming
A honeypot holding a secret the agent must never reveal, and the attempts logged.
not built
3Browser automation, scraping at scale
A scraper with the detection that tells you it broke silently, which is the half the client said they care about most.
not built
2Batch APIs
The same job through the batch API with the price and latency difference measured.
not built

Why this page exists in this shape

The first version of this work was six pages built against a seven item list I wrote myself, while the research had produced 41 requirements and 59 screening questions. Every progress report was true and the overall impression was false.

So the list is no longer mine. It is parsed out of the research document, and the only way to remove a requirement is to remove it from the evidence. A separate script reads the live site and refuses to let a row here say demonstrated unless the page answers and contains what it claims.

2 rows say half done. That word is doing real work: it means the code exists and nothing on this site lets you check it, which is worth less than it sounds.