Writing · 20 posts
Writing
Notes on the projects and how they are built.
-
7 Sep 2026
How I stopped an LLM from fabricating citations
An ancient-coin museum where an LLM writes the story but can never invent a fact, a URL, or a citation about my actual coins. Here is how it works.
-
6 Sep 2026
How to illustrate a stamp you are not allowed to show
A modern stamp design is under copyright, so the atlas never shows a scan. Instead it draws original engravings from the stamp's subject, generated once and kept forever.
-
6 Sep 2026
Photograph once, reprocess forever
The albums are old and fragile, so the collection is photographed one time and never handled again. Everything the public site knows is reprocessed from those photographs and a log of facts.
-
6 Sep 2026
My stamp collection will take a decade to verify, so the site does not wait for me
How a machine is allowed to propose facts about a stamp without being allowed to decide them, and why the public site fills in from candidates instead of stalling on my approval.
-
6 Sep 2026
The stamp atlas that would rather say "I do not know"
A public site for a lifetime of stamps that shows only what it can honestly stand behind, and says "not yet known" out loud instead of guessing.
-
6 Sep 2026
How this blog works: a plain collection, a small plugin, and a strict CSP
You are reading this on NimbusCMS. The post is not special, it is a row in a content collection, and almost everything that makes it feel like a blog lives in one small plugin on purpose.
-
6 Sep 2026
My plugins cannot read your content, and that was on purpose
The first thing I refused to give a NimbusCMS plugin was the one thing you would expect a CMS plugin to have: the ability to read your content. Here is why, and the narrow door I opened when my own app needed it.
-
6 Sep 2026
A permission a wildcard can never widen
Most permission bugs are not exotic. They are a wildcard grant that reached one step further than anyone meant it to. Building a CRM full of personal data, that was the failure I wanted to make impossible.
-
6 Sep 2026
I let a 2014 restaurant app decide what belongs in my CMS core
The hardest question in building a CMS is not which feature to add next, it is whether a feature belongs in the core at all. I stopped guessing and let a real application answer.
-
6 Sep 2026
How a portfolio CMS turned into a platform when I stopped guessing
NimbusCMS started as a portfolio project, a small PHP CMS an agent could run and a human could read. The turning point was the day I made a rule that stopped me adding features to it.
-
6 Sep 2026
HTTP finally has a QUERY method, so I wrote the client for it
@danmat/query-fetch is a zero-dependency TypeScript client for HTTP QUERY (RFC 10008), with the fallbacks and retries the spec actually allows.
-
6 Sep 2026
I replayed the money I actually invested into portfolios I never owned
Divvy is a Python backtester that replays your real contribution dates and amounts into a counterfactual portfolio, dividends included.
-
6 Sep 2026
A stamp grader that shows its work and refuses to guess
Stamp Grader measures centering from a photo with classical CV, draws the result on your image, and treats cannot-determine as a valid answer.
-
6 Sep 2026
Three small apps that keep one anime list honest
AniYears, mal-rater, and a review-first Crunchyroll to MAL sync: three tools around one MyAnimeList account, built on one API and one rule.
-
6 Sep 2026
Audible has no API, so I registered a fake device and built my audiobook year anyway
Earshot pulls my Audible library nightly with a device token, whitelists what it may keep, and renders a static, copyright-safe audiobook retrospective.
-
6 Sep 2026
Your Google Timeline is the most sensitive file you own, so I built a map that never uploads it
droppin turns a Google Timeline export into a travel map entirely inside the browser tab, with a Web Worker, an offline gazetteer and d3-geo doing the work.
-
6 Sep 2026
I wrote an arcade engine from scratch, and seven games share one leaderboard
A vanilla-JS game engine, seven games built on it, and one multi-tenant Cloudflare Worker plus D1 holding every high score, keyed by game id.
-
28 Aug 2026
I made my trading system grade itself against just buying the index
A trading bot can show a rising equity curve and still be worse than doing nothing. Aegis compares every account to putting the same money in the index on day one, and records how each trade behaved, so it can ask not just did it win but did it win safely.
-
27 Aug 2026
My trading system writes down why every trade failed, then refuses to learn from most of it
An AI handed a pile of losing trades will happily invent a lesson from noise. Aegis lets a model propose lessons but never accept them, and a sealed out of sample test does the accepting. So far it has accepted zero, which is the right answer.
-
26 Aug 2026
I run eight trading accounts in parallel to measure a single idea
You cannot A/B test a trading strategy on one account, because the market is the noise. Aegis runs eight paper accounts that differ by exactly one thing each, so any gap between them is that thing and not luck.