Security and privacy, in practice
Why /.well-known/security.txt matters, and how to serve it properly
RFC 9116 answers the one question a stranger needs answered about your site: who do I tell about a vulnerability. What the file must contain, why the expiry date belongs in a test, and the routing trap that makes an SPA host serve it as HTML at 200.
2 Aug 2026
·
8 min read
Security and privacy, in practice
I didn't need an MCP gateway, I needed a smaller credential
I put an MCP server on the public internet so an AI client could file todos onto my private kanban board. The interesting part wasn't the protocol — it was making the dangerous call unrepresentable.
1 Aug 2026
·
7 min read
Security and privacy, in practice
A fourth host on the same jar: taking my kanban board off localhost
My kanban board had no authentication at all and handed its entire database to any caller. Putting it on focus.zakaria.lu meant a fourth host on the jar that was already running - plus a disclosure bug caught in review, and one cookie dot that 500'd every sign-in.
30 Jul 2026
·
8 min read
Working with Claude Code
82 agents, one bug: running Claude's security scanner on my own code
I pointed the new claude-security plugin at this very site. It spawned 82 agents, proposed 10 vulnerabilities, and then argued itself out of 9 of them. The one that survived was real — and it shipped to prod the same afternoon.
24 Jul 2026
·
6 min read
Shipping an AI feature into my own product
·
Part 3
Adding a job description match to my AI Concierge
I added job-description matching to the AI concierge on my career site. It shipped with no new bean, no new table, and no migration — because the leverage was in a seam I'd already built. A design note on shared streaming cores, streamable structured output, and treating a pasted JD as hostile.
13 Jul 2026
·
11 min read
Security and privacy, in practice
Four security headers, and the CSP I deferred on purpose
The cheapest security win on a single-container stack lives at the reverse proxy. Here's the four-header Traefik middleware I shipped, the two things I deliberately held back, and the report-only CSP rollout I'm lining up next.
8 Jul 2026
·
6 min read
Shipping an AI feature into my own product
·
Part 2
I red-teamed my own AI concierge
My site has an 'Ask Zakaria' AI box that answers untrusted recruiter input. So I spent an afternoon trying to break it — prompt leaks, tool-call injection, XSS, a cross-language jailbreak. Here's what held, and why the real defense isn't a clever prompt.
7 Jul 2026
·
5 min read
Security and privacy, in practice
Docker secrets: the delivery channel is the whole game
Five ways to hand a secret to a Docker container, ranked by who can read it back out. The source is just plumbing - environment variable vs file is what actually decides your exposure.
20 Jun 2026
·
5 min read