Blog
Essays and observations. For org updates, see News.
- Persisting agent work as a node graph
Linear chat lies about parallel agent work. Persist a node graph on disk; spawn children when topic forks; parent and child record each other's address.
- Making model assumptions transparent
Assistant chat treats guesses and researched facts as the same confident prose. Trust needs provenance on the tokens themselves — so you can see what the model assumed before you pay for the mistake.
- Seeing parallel agents as a task grid
Twelve concurrent repo jobs should not serialize into one scroll. A task grid with status lights and fork chats shows parallel work as parallel.
- When the browser flattens working memory
Professional desktop software separates the model from controls about the model. The web collapsed that into one viewport — not because the platform forbids windows, but because SPAs optimized for mobile parity. Spatial web windows restore the cue.
- Color fonts as theme integrity: COLRv1 and Nabla
COLRv1 adds gradients, blending modes, and compositing to the earlier COLRv0 layer model—making rich, palette-tunable text feel like a rendering contract, not a brittle SVG stack.
- Config UI as the field vocabulary
A settings UI is not chrome on a text file. It is the shared list of legal fields — including the ones the author never wrote.
- An alternative to URLs
Why treat the string you typed as the thing itself? Pretty URLs stay for people — systems need another way to find, cite, and depend on a resource.
- Broken links after a URL rename
Rename a docs URL for clarity, and every README that baked the old string becomes a broken link — the cleanup is still yours.
- Ecosystem nav at the screen edge
Suite apps stuff new platforms into the header until you lose which world you are in. Context Edge moves that travel to thin rails on the shell — wireframe maps, stable overlays, optional path color.
- Making settings follow the activity
Settings far from the work force you to rebuild context. Context-bound settings show only what applies to the current activity — beside it, not across town.
- Grouping forge assets under a brand
Humans nest brand → product family → repository. Forges flatten that into org → repo and spend “Projects” on boards instead. The missing middle layer is a schema failure with UX teeth.
- When the file tree owns the first viewport
GitHub repo pages still open on empty owner CTAs and a directory dump. Visitors want the README. Progressive disclosure and sticky README | Code tabs fix the altitude without hiding real Releases.
- ClearType Tuner in Windows
ClearType is a text clarity system in Windows that uses subpixel rendering to improve text sharpness for reading.
- Choosing a file handler without the context menu
Default open is a one-way handoff. Desktops still lack a first-class gesture that asks which app should run — Ctrl+double-click and middle-click on files are unused candidates for an open-with interrupt.
- Titles as orientation
A title should place the reader in a mental room — not equate two rigid nouns, jam the org name into every headline, or leave modifiers floating without an object.
- Fundamental contexts for portable UI
Maybe portability is not one mega-spec but a small set of fundamental contexts — structure, placement, events, 2D/3D surfaces, zoom — composed on purpose.
- Navigating by content
On menu-style docs for multi-platform install guides — one decision at a time, nested continuations, shareable paths, and an Antora extension that makes it real.
- Sequence as top-level organization
When a system applies rules in order, the processing-map surface should show that order as one spine — not scatter steps across settings pages until the machine contradicts itself.
- Sharing the IR, not the pixels: a strategy for multi-ecosystem UI prototypes
For interaction-heavy prototypes, share meaning and behavior — domain IR plus a headless controller — and hand-write thin views per ecosystem. Do not aim to auto-convert full UI.
- When example files lose their type
Meta-suffixes like .example and .template are badges on a real file type — Explorer’s last-suffix rule throws the type away, and Windows never grew a pass-through association kind.
- Attention is not inventory
Software that spends your attention for you is disrespectful. HCI should treat cognitive budget as a hard constraint — not a growth funnel.
- Human intuition over backwards convention
Consistency with the past has value — but it is not absolute. When a convention inverts human meaning, fix it.
- Many small tools under one roof: scoped UX architecture
When an app coordinates many capabilities, give each tool a hard job boundary and a shared shell — then use feedforward inside those tools, not as a synonym for the architecture.
- Theme as a contract
Previews, diagrams, and chrome that refuse the host theme are not aesthetic preferences — they break immersion and trust.
- When 'non-technical' products lie
Marketing a tool as friendly while forcing archaeology through CSS hierarchies and secret modes is an HCI failure — not a documentation gap.
- When the UI hides what counts
If the engine already knows and the first-class UI does not ask, the product is lying about involvement — that is an HCI bug, not a power-user gap.