Eric Wilson
← Home
// COLOPHON

How this site was made

There's a line on my About page about still being the kid who wants to know how things were made. This is that, for this site: the decisions behind the type and the color, and the architecture behind the assistant.

Most of it is small choices that only matter in aggregate. The assistant is the part people ask about, so it gets the most room.

THE TYPE

I keep coming back to Swiss design, and to Futura's particular kind of boldness. Jost is the open-source geometric that gets closest, so headlines are set in it: large, tight, and doing the work on their own.

IBM Plex Mono handles eyebrows, captions, and labels.

Case studies here are dense, and someone skimming for structure needs something visually distinct from prose to anchor on. Labels set in mono read as wayfinding rather than as more content to process.

Body copy is set in the system sans, so no third face has to download before you can read a sentence.

THE COLOR

The palette starts as personal taste. I have a long-standing weakness for cyberpunk and retrowave, and teal on near-black is where that lands. It suits the work too: this site is mostly screenshots of enterprise software, and white interfaces sit better in a dark frame.

Teal reads well on near-black, but the value that passes as text fails as a fill behind text, and the value that works as a fill is too dark to read against the page. So the accent is split — one for type and links, one for fills and rules — each clearing 4.5:1 on its own terms.

It looks like one color. It isn't.

LIGHT AND DARK

Both themes are designed independently. In light mode the accent shifts to a deeper green, because the teal that carries on near-black goes weightless on white. The glow in the corner of the header changes value with the theme rather than being switched off in one of them.

The dark canvas is near-black rather than pure black, which would be harsher than it needs to be around those screenshots.

Nothing moves on its own for long, and nothing flashes. Under prefers-reduced-motion every animation and transition is cut to nothing you can see, and the assistant checks the preference at the moment it scrolls rather than trusting the stylesheet to have caught it.

ACCESSIBILITY

None of this was a pass at the end. The split accent above exists because contrast was a constraint from the start, the themes were checked as they were built, and reduced-motion was designed in rather than bolted on. What's tested, what isn't, and the known limitations all have their own page.

Accessibility statement →
THE ASSISTANT

Everything the assistant can tell you is already on this site, a click or two away. It isn't a source of new information. It's a faster way through the existing one, and a way to ask something the navigation doesn't answer.

I built it because I wanted to know whether I could make one that doesn't lie.

It can't make anything up.

Every factual sentence it produces has to trace to a numbered fact in a corpus I wrote. If it can't cite one, it isn't allowed to answer. It says so and gives you my email instead. That's a harder constraint than asking a model to be careful, because it fails closed.

What it won't discuss.

It can't talk about compensation, interview feedback, or the details of my home network. Those aren't guardrail instructions. That material simply isn't in the corpus. A prompt can't leak what it doesn't contain.

The corpus holds only material I own or have cleared for public discussion. No confidential customer, employee, or company information.

Instructions embedded in a question get ignored. If you tell it to forget its rules, it answers the real question underneath, if there is one.

Why it can't run up a bill.

The account runs on prepaid credit with auto-reload off, which is the only true hard stop in a system like this. Above that sit layers: a global daily ceiling, per-visitor and per-session limits, caps on how long a question and an answer can be, and a bot check at the edge. Counters increment before the API call rather than after, so a crash loop can't walk straight through the limiter.

The API key lives as a secret on a Cloudflare Worker and never reaches the browser. The Worker is the only thing that talks to the model.

I'm not publishing the specific thresholds, for the obvious reason.

Privacy.

Your question goes to Anthropic's API to generate an answer. The Worker writes down nothing but a counter, visitor IPs are hashed rather than kept in the clear, and the conversation stays in your browser. I do keep the question itself, through the analytics below — the question, never the asker. The privacy page is the full account.

WHAT THE ASSISTANT GETS WRONG

A few things, stated plainly, because the ones that matter are never in the marketing copy:

  • It runs on a small, fast model over a fixed corpus. On a long or subtle question the answer will be thinner than what you'd get by asking me.
  • It refuses things it could probably have answered. The citation rule is strict and I would rather it under-answer than guess, so the errors run in that direction on purpose.
  • It has a daily budget. If that's spent you get a message and my email.
  • It only knows what I wrote down. Where my notes are thin, its answers are thin, and it has no way to tell you which is which.
  • It isn't me. It can't negotiate, commit to anything, or tell you what I'd actually be like in your organization. For any of that, email me.
MEASUREMENT

For most of this site's life it measured almost nothing, and I was a little proud of that. I changed my mind. You can't claim to design for people and then decline to look at what they actually do — it's the first thing I'd want from any team, so I don't get to skip it on my own work.

So it's instrumented now: which pages get read, how far people scroll, what they click, and whether anyone actually uses the assistant. Enough to tell whether the work is landing, and where it quietly isn't. Guessing was never a defensible answer, and I'd rather hold my own site to the standard I'd set for a team's.

No ad networks and nothing sold. I do keep the questions people put to the assistant, because what someone wants to know about the work is the most useful thing they can tell me — but I keep the question and not the asker, and the site never asks you who you are. The full account, every tool and how to opt out, is on its own page.

Privacy & analytics →
BUILT WITH

A static Astro site: no client framework and no CMS. Every page is HTML on disk before a visitor asks for it, with its stylesheet inlined so navigation never flashes. Images are built to AVIF and WebP with a JPEG fallback. Hosted on DreamHost, deployed over FTP by a GitHub Action on every push to main. The assistant runs on a Cloudflare Worker in front of Anthropic's API, with Turnstile at the edge and KV for the counters.

Designed and built by me, working with Claude Code. Photography on the About page is mine.

LAST REVIEWED · JULY 2026