More projects · Side project

The Dossyer

An interactive AI newsletter with cited answers and honest sourcing. One editorial voice, and one rule governing the engineering: systems, not bandaids.

v01.42

A single self-contained HTML file in vanilla JavaScript: a briefing feed you can interrogate. Ask a follow-up about any story and get an answer with numbered citations kept globally sequential by a registry, and an honest line between what is confirmed and what is unknown. The concept in one line: Morning Brew's warmth, Perplexity's cited answers, and Ground News's transparency in a single product.

Stack

Single HTML file, vanilla JS + Anthropic API

Built with

Claude, QA via Playwright

Scale

43+ versions, seven living documents

Status

At v01.42, foundation audited

How it was built

Claude wrote the code; I directed, tested, and pushed back. Every change was rendered with Playwright and reviewed as screenshots by both of us before it shipped, and every session closed with a synchronized audit of the seven living documents that govern the project. The defining moment was cultural: I kept catching the AI patching symptoms instead of fixing systems, so systems thinking became the project's first written rule and reshaped everything from the token architecture to the chat engine.

The living documents

The rules the system runs on. Three of the seven documents that govern the project, each an example of what a news agent has to follow to stay consistent: the token-based design system, the voice and tone bible, and the engineering rules whose Rule 0 is systems, not bandaids.

The real work here is the system, not any one screen. The Dossyer has to sustain itself against an endless news cycle, so it is built as a set of rules an agent can follow without a person in the loop: how a story gets voiced, how a citation gets numbered, how a fix gets made. The living documents above are those rules written down, so the pipeline stays consistent no matter how much news runs through it.

The clearest proof came from a dead end. Early on I had the app rebuilt in React to fix a real bug: two input fields competing in the conversation UI. The fix was right. Everything around it was not. An audit against the spec documents found the rebuild had drifted in nearly every other detail: wrong fonts, wrong reds, hardcoded colors, no citation processing. The documents caught what a glance would have missed, the rebuild was abandoned, and the single file stayed the mainline. Without a written system, an AI will confidently rebuild your product as something else.

Systems beat bandaids.

What it taught

The notification redesign proved it: two overlapping components became one source of truth with a doorbell tab, and every fix since gets asked the same question. Does the system work this way, or did we just patch that one thing?

Where it's headed

The foundation is audited and solid, so the next arc is the journalist bot: an automated pipeline of research agents, source scoring, editorial voice, and citation verification, gated behind a proper data contract for the story schema. Nearer term, a modal focus trap closes the last accessibility gap.

Next side project

Voxel Game

A browser sandbox of fine voxel cubes: deterministic worlds, a sculpted character, and everything designed as data.