Skip to content

Lab

The Lab

Interactive experiments and live demos. Launch any of them right here.

Small, self-contained things I’ve built: music theory, retro computing, generative art, systems, and AI agents. Click a card to run it in the browser; most link to a full write-up over in projects.

Showing all 21 experiments

Circle of Fifths

Click around the circle of fifths to hear each key and see how they relate.

Audio

Circle of Fifths

CGDAEBF#DbAbEbBbFClick
C Major
Relative minor: Am

Perfect Fifth: G

Perfect Fourth: F

Click any key to hear its root note. The outer ring shows major keys, inner ring shows relative minors.

DosKit

Boot classic DOS software in your browser via WebAssembly. One click, no install.

Retro Computing

DOS Emulator Preview

[ SYSTEM OFFLINE ]
Power

Gopher Client

Browse Gopherspace in a modern client. The pre-web protocol, live.

Retro Computing

Gopherspace Browser

gopher://demo.server/
=== Welcome to Gopherspace ===
Click a menu item to view its content. Directories [DIR] open submenus, documents [TXT] show content here.
GopherGemini

The MCP server provides AI access to both Gopher and Gemini protocols - the "small internet" movement.

Retro Floppy

A tactile 3.5-inch floppy you can label and flip. Pure CSS nostalgia.

Retro Computing
Starting demo…

Zero-Crust Architecture

Step through a zero-trust edge architecture as an interactive diagram.

Systems

Architecture Explorer

Main ProcessCashierCustomerHistoryDebugger
Main Process

Trusted process: MainStore, PaymentService, BroadcastService, IPC handlers

Pattern: Centralized State + Command Handler

Security: Zod validation, sender verification

Click nodes to explore. Watch IPC messages flow between processes.

Accessibility Techniques

Toggle accessibility techniques on and off to feel the difference each makes.

Accessibility

Accessibility Features

Documentary Film

An archive of civil rights documentaries spanning five decades.

WCAG AA color contrast: 4.5:1
Focus indicators visible
Semantic HTML structure

Tab through the buttons to see focus rings. The site uses semantic HTML and Schema.org markup for discoverability.

Frostpane

A frosted-glass panel component you can tune in real time.

Systems

Interactive Demo

Liquid Glass

Adjust the controls to see real-time changes to the frosted glass effect.

Electromagnetic Spectrum

Sweep the electromagnetic spectrum from radio to gamma rays.

Generative

Spectrum Explorer

Visible Light
556 nm
GammaRadio

Frequency: 430-750 THz

Energy: 1.7-3.1 eV

The only portion of the spectrum visible to human eyes.

Uzumaki

A hypnotic, interactive generative spiral.

Generative

Spiral Gallery

Fibonacci Aurora spiralFibonacci Aurora
Vogel Sunflower patternVogel Sunflower
Uzumaki Neon spiralUzumaki Neon
Curlicue Matrix fractalCurlicue Matrix

Available Platforms

Uzumaki on iPhoneiOS
Uzumaki on Apple WatchwatchOS
Uzumaki on MacmacOS

AT Protocol MCP Tools

Call AT Protocol MCP tools against Bluesky and watch the structured responses.

AI Agents

MCP Tool Explorer

atproto-mcp
# Request
{
  "tool": "get_profile",
  "handle": "bsky.app"
}
get_profile

Fetch a user profile by handle or DID

This is a simulated demo. The actual MCP server processes requests from AI assistants like Claude.

New

Skills Radar

A self-cycling radar of the stack. Watch each category sweep into focus, or grab the wheel.

Generative

Frontend Skills

React8 years
TypeScript7 years
CSS/Tailwind15 years
Next.js4 years
Astro2 years
New

ActivityPub MCP

Call Fediverse MCP tools against Mastodon and watch WebFinger discovery and outbox responses come back.

AI Agents

MCP Tool Explorer

activitypub-mcp
# Request
{
  "tool": "webfinger_lookup",
  "account": "@user@mastodon.social"
}
webfinger

Discover a user via WebFinger lookup

This is a simulated demo. The actual MCP server processes requests from AI assistants like Claude.

New

OpenZIM MCP

Search millions of Wikipedia articles through MCP with the cable unplugged. Zero network.

AI AgentsSystems

MCP Tool Explorer

openzim-mcp
# Request
{
  "tool": "zim_search",
  "query": "quantum computing",
  "limit": 5
}
search

Search for articles in the ZIM knowledge base

This is a simulated demo. The actual MCP server processes requests from AI assistants like Claude.

New

Clarissa

Watch a terminal agent reason and act: read a file, run git, diff, fetch the web. The ReAct loop, tool by tool.

AI Agents

MCP Tool Explorer

clarissa
# Request
{
  "tool": "read_file",
  "path": "./src/agent.ts"
}
read_file

Read the contents of a file

This is a simulated demo. The actual MCP server processes requests from AI assistants like Claude.

New

ClarissaBot

Ask a plain-English question about a vehicle and watch the agent fan out to live NHTSA tools: recalls, complaints, crash ratings.

AI Agents

MCP Tool Explorer

clarissabot
# Request
{
  "tool": "check_recalls",
  "make": "Honda",
  "model": "Civic",
  "year": 2019
}
check_recalls

Find recall campaigns affecting a vehicle

This is a simulated demo. The actual MCP server processes requests from AI assistants like Claude.

New

Step Sequencer

Tap out a beat on a 16-step grid and hear it loop. Drums and bass, no install.

AudioGenerative

Step Sequencer

Stopped

Kick
Snare
Hi-hat
Bass

Click cells to arm steps, then hit Play. Sounds are synthesized live with the Web Audio API — no samples, no install.

New

Contrast Lab

Drag two colors together and watch the WCAG ratio pass or fail in real time.

AccessibilityGenerative

Contrast Lab

The quick brown fox

jumps over the lazy dog

Sample text at 4.83:1

4.83:1
Contrast ratio — passes 3 of 4 WCAG checks
AA normal textPass
AA large textPass
AAA normal textFail
AAA large textPass

Ratios follow the WCAG 2.x relative-luminance formula. AA needs 4.5:1 for normal text (3:1 large); AAA needs 7:1 (4.5:1 large). “Suggest a fix” nudges the text color toward black or white until AA-normal passes.

New

CRT Terminal

Type into a green-phosphor terminal with scanlines, flicker, and a blinking block cursor.

Retro ComputingGenerative

CRT Terminal

guest@rye.dev:~$
rye terminal v1.0 — type `help` for commands
 

Try help, about, or echo hi. It is all client-side — no real shell behind the glass.

New

Subnet Calculator

Drag the CIDR slider and watch network, broadcast, and host range recompute bit by bit.

Systems

Subnet Calculator

IPv4 address
Network address
192.168.1.0
Broadcast address
192.168.1.255
Subnet mask
255.255.255.0
Wildcard mask
0.0.0.255
First usable host
192.168.1.1
Last usable host
192.168.1.254
Usable hosts
254
Network 192.168.1.0 slash 24, mask 255.255.255.0, broadcast 192.168.1.255, host range 192.168.1.1 to 192.168.1.254, 254 usable hosts.
New

Reaction-Diffusion

Paint into a Gray-Scott reaction and watch organic Turing patterns spread.

GenerativeSystems

Reaction-Diffusion

Pattern regime
f = 0.0545, k = 0.0620

Simulation paused

Paint into a Gray-Scott reaction and watch organic Turing patterns spread.

New

Lexicon Inspector

Pick an AT Protocol record type and see the lexicon schema and a sample record side by side.

AI AgentsSystems

Lexicon Inspector

app.bsky.feed.post.json
# Lexicon schema
{
  "lexicon": 1,
  "id": "app.bsky.feed.post",
  "type": "record",
  "key": "tid",
  "record": {
    "type": "object",
    "required": [
      "text",
      "createdAt"
    ],
    "properties": {
      "text": {
        "type": "string",
        "description": "Post body (max 300 graphemes)"
      },
      "createdAt": {
        "type": "string",
        "format": "datetime"
      },
      "langs": {
        "type": "array",
        "description": "BCP-47 language tags"
      },
      "reply": {
        "type": "object",
        "description": "Parent + root refs"
      }
    }
  }
}
record.json
# Sample record
{
  "$type": "app.bsky.feed.post",
  "text": "Hello from the AT Protocol.",
  "createdAt": "2026-06-27T10:15:00.000Z",
  "langs": [
    "en"
  ]
}
Record:
Valid — conforms to app.bsky.feed.post.

Lexicon is the AT Protocol schema system. Each record is validated against its NSID's schema (required fields + types) before it's written to a repo. Schemas here are faithful, abbreviated subsets of the real Bluesky lexicons.

Want the full story behind these?

Most experiments started life as a project. Read the write-ups, or get in touch.