Skip to content

← back to projects

tbssnch.dev

This site. A portfolio where the terminal is the entire UI (full-viewport on touch, a bounded desktop-app-style window on a mouse) built so that turning JavaScript off leaves a complete, semantic site behind rather than a blank page.

Every route exists twice. Each one server-renders a real baseline page (heading structure, prose, links, the resume PDF) that stands on its own with no JavaScript. The terminal is a progressive enhancement layered over that same content: one virtual filesystem, one route map, so cd and cat walk the actual site. The two trees are kept in sync by construction, not by hand.

The ask command is a public, streaming Q&A grounded in the site's own content: a system prompt assembled from the pages, a reply streamed token by token from the Claude API, a per-instance rate limit, and length guards on both the client and the server. With no API key configured the endpoint returns 503 and the command degrades to a plain "offline" message instead of erroring.

Color is a single source of truth: tokens.ts holds the semantic palette, tokens.css mirrors the same values as custom properties, and a test in the suite recomputes WCAG contrast from the token values and fails the build on any drift below 5.5:1, a floor set deliberately above AA.

The motion budget is exactly three animations site-wide: the terminal caret blink, a one-time identity reveal on the home screen, and the baseline's page-load entrance fade. All three are dropped entirely under prefers-reduced-motion, and the animation library the identity reveal depends on is lazy-loaded, so routes that don't animate ship none of it.

Under the terminal is a headless engine (parser, command registry, buffer model, session) with no React, no DOM, and no framework imports. A purity test enforces that boundary and fails if a framework import leaks in, which keeps the engine unit-testable on its own.

You're reading the server-rendered baseline of this page right now; the terminal prints the same text.

links

next.js, typescript, design-systems, anthropic-api