Hi, I'm Sean.
Co-founder & CTO at B3, building a crypto agent & decentralized inference. Previously Coinbase. I sweat the small details in software, and leave the good parts (components, free tools & writeups) out in the open here.
Components
all →
ASCII Text
3D text rendered to a wavy three.js plane, then re-sampled every frame into live ASCII characters that shimmer and follow your cursor. From B3's ai-arena.

Compact Cartridge
A 2D game-cartridge card: a clip-path cartridge silhouette with layered noisy borders, an inset media well, a label tab, and a vertical Game NFT stamp. From basement.fun.

Loading Beam
A laser-beam loading bar: a fill that races to 100% on an eased, jittery curve with a flickering glow and a blurred light at the leading edge. Pure CSS. From basement.fun.

Infinite Terrain
An endless procedural WebGL scene — streamed grass, trees, and wind lines with a physics ball you steer — that you can reskin live across six moods: night, aurora, synthwave, sakura, ember, noir. Restyled from mesq's MIT r3f original.

Isometric Cube
An isometric 3D cube in pure CSS transforms — three faces tinted from one base color (lighter top, base front, darker right), optional logo on top, optional slow spin. Extracted from explorer.b3.fun.
App Icon
A glossy iOS-style squircle app icon: SVG squircle clip, a top sheen, an inset rim, and a glare that sweeps on hover. Extracted from explorer.b3.fun.
Writing
all →
An agent that hallucinates a transaction is an incident
A chatbot that's wrong wastes a sentence. An onchain agent that's wrong moves money you can't claw back. The moment you point a model at a wallet, the interesting part stops being the model. Here's what 'everything around it' actually is.

Onchain, vibe coding breaks in week two
Vibe coding is the right tool for a prototype because nothing's at stake. Onchain, a wrong output is a wrong transfer, so the demo working tells you almost nothing about whether you can trust it with a wallet.

Let the model propose. Let deterministic code dispose.
Every onchain bot I've shipped has the same hard boundary: probabilistic judgment on one side, deterministic consequences on the other. The model turns messy language into a number. Code the model can't touch turns that number into an action. Every time the boundary blurs, the blur is where the loss came from.

Rendering mermaid diagrams as hand-drawn tldraw, at build time
Mermaid's default output is fine, but it always looks like a tool drew it. tldraw can redraw the same diagram in a warm, hand-sketched style, and if you do the conversion at build time, you ship plain SVGs with zero client JS. Here's a framework-agnostic remark plugin that does it, with light and dark variants and content-hash caching.

Prefetching on intent: a library that loads the page before you click
The same prediction that warms a focus ring as your cursor approaches can do something far more useful: start loading the next page. intently watches where the cursor is heading, prefetches the link you're aimed at, and prerenders the one you're committed to via the Speculation Rules API. Why I built it when quicklink, instant.page, and ForesightJS already exist, and where it actually helps.

Interfaces that move before you do
Most UIs wait for a click. The good ones react to intent: a focus ring that warms as your cursor approaches, a button that leans into you, a nav item armed before you arrive. The math is a point-to-rectangle distance and a falloff curve, and it's a few lines of pointermove. Plus where it earns its keep and where it quietly breaks accessibility.