Caskey Engineering

Each view organizes the same portfolio differently. Every artifact link leads to the same canonical page.

Four doors into the graph: scale, markets, method, play.Filter the graph by kind, field, or status.Every artifact grouped by the system it belongs to.Scatter by machine/human scale and proof/play.Every artifact on one line, by date.

← Back to Blog

How this site is organized

About this artifact

essayon-the-recordmaintained

automation · since 2026

The navigation on this site is a build artifact. Every layout you can switch to from the homepage renders from one JSON file, /manifest.json, and that file is public. If you want to check whether the views agree with each other, you can diff them against the same source I do.

The file exists because I lost an argument with myself. This site had grown to 78 routes behind a five-item nav, and a single system would end up scattered across four shelves: the finance engine was a case study in one place, a tool in another, live data in a third, and essays in a fourth, with nothing connecting them. I spent an afternoon rejecting homepage designs. Doors named after subjects. Doors named after verbs. Doors named after how proven each piece of work is. Each one fixed the scattering by decreeing a taxonomy, and each one felt wrong for the same reason: no single taxonomy deserves to own the front door of work that genuinely cuts across categories.

The version that survived stopped picking. Store the metadata once, then let every navigation scheme be a projection. Each artifact on the site (a case study, an essay, a tool, a dataset, a visualization, a game) has one manifest entry: what it is, which field it belongs to, which system it is part of, how proven it is, whether it is still running. The homepage renders a default view over that graph, and a switcher offers the others. A faceted catalog where clicking any label on a card pivots the whole filter. A scatter plot with proof on one axis and machine-versus-human scale on the other. A grouping by system. None of them is the site. They are all renderings of the manifest, and adding an artifact once populates every view.

The part that keeps this honest is not the views. It is the contracts underneath them, because a projection system rots the moment the projections drift from the source. A CI script walks the static export after every build and fails if any content route is missing from the manifest, or any manifest entry points at a route that does not exist. Another check compresses the manifest and fails the build past a size budget. The epistemic labels (production, on the record, in progress, experiment) are one enum defined once, and a test computes WCAG contrast ratios for their colors in both themes from the actual token values, because the first amber I picked measured 3.37 to 1 as text and failed the standard. The border carries the amber now; the text stays ink.

The checks earn their keep by being embarrassing. The first time the chunk-budget check ran, it measured the "lazy-loaded" views at zero extra bytes each. That number looked like a pass and was actually the failure: nothing was split, and every visitor was downloading every view because all of them lived in one client bundle behind the switcher. The fix moved each view to its own route module, and the check now fails on zero, since a lazily loaded view that adds no bytes means the laziness is fiction. The shared bundle is still heavier than the budget I wrote in the spec, and the check says so on every build instead of letting me forget.

Private surfaces get the same treatment with less exposure. A few tools on this site sit behind a login because they touch my own portfolio state. They appear in the graph as locked entries so the views can show they exist, but the manifest serializer builds their public projection from an allowlist of fields rather than deleting the sensitive ones, and a regression test iterates the actual keys of every private entry so a future field stays private by default. Publishing the graph forced that discipline. A file nobody can fetch can be sloppy; a file at a public URL cannot.

If you run a site, a docs tree, or an internal portal with more than one honest way to slice it, the pattern transfers directly. One typed source of truth, projections instead of taxonomies, and a check that fails the build when the two disagree. The views were never the product. The contract underneath them is.

Keep reading

Post

The caskeycoding.com tech stack at a glance

A high-level tour of the technologies running this site: Next.js on CloudFront, Python Lambdas behind API Gateway, DynamoDB plus S3, Anthropic's API with a Bedrock fallback, and AWS CDK wiring it together.

Read
Post

When your method repo and your product repo don't talk to each other

I built a method as a public repo and the product that runs it as two private ones, and none of them treated the others as a source of truth. The domain enum lived in four places. A persona drifted between its lens file and its API contract. Here is what that cost, and the one structural change that turned the whole class of bug into a failing test.

Read
Post

A One-Day Security Baseline for a Solo Fleet

You cannot out-staff a security team when you are the whole team. But the failures that actually end a solo operation are a short, known list, and each has a cheap defense you set up once. Here is the catastrophic floor I stood up in an afternoon.

Read
Post

When CI Costs More Than It Saves

GitHub Actions' default minute allowance is priced for a team that types at human speed. At agent velocity the bill breaks before the engineering does. Here is how a forced workaround, a local CI mirror plus local deploys, became the better default.

Read
Post

Prompt caching is a prefix match, not a flag

Prompt caching looks like a flag you flip for a cheaper bill. It is really the reuse of a stored prompt prefix, governed by three rules, and applying it across four parts of my own system showed where it pays, where it quietly does nothing, and where it is not even my decision. With the token counts I measured to check.

Read
Post

Welcome: Building Platforms for Scale

Where this blog started: owning enterprise monitoring at Prudential and Amazon, an automation mishap that paged a whole support queue for ten minutes, and the throughline that still runs through everything I build, make the safe path the only path and then prove it.

Read

Follow the work

New tools and writing as they ship — pick a channel.

Written by Eric Caskey. I build AI tools you can actually use. Explore the Tools or see the case studies.