A workbench of things I made
19 apps, captured live from the source.
Health trackers, a laundromat back-office, floor-plan tools, pixel-display drivers, dev CLIs and AI agents — every screenshot below was taken from the real app booting on my machine, not a mockup.
Site Scout
Web appsScore a laundromat site 0–100 by demand vs. competitor supply near any address.
ripe → Divoom
Web appsPushes live ripe health stats to a Divoom Times Gate pixel display.
Tally
Web appsShared ledger for splitting expenses and settling up with roommates or partners.
ClaudeClaw
AI agentsA self-hosted fleet of Claude Code agents — each with a personality, tools and Telegram bot — driven from chat, web or voice.
personal-agent
AI agentsA deliberately minimal, hackable AI agent on Cloudflare Workers, reachable from Telegram.
agent-desktop
AI agentsA native, Rust-built desktop harness for running and supervising AI coding agents locally.
Voice OS
AI agentsRun your Mac by voice — open apps, click, type, run shortcuts and read the screen back.
diffscope
ToolsLive, read-only browser diff viewer for any local git repo — SSE-driven, real PTY.
$ rayc --help rayc — drive Raycast from the command line TRIGGER ACTIONS rayc open <author>/<ext>/<cmd> fire a command deeplink rayc link <raycast://...> fire a raw deeplink rayc run <shortcut> fire a saved shortcut rayc ai "<prompt>" send a prompt to Raycast AI READ DATA rayc list extensions [--json] installed extensions + deeplinks rayc list scripts [--json] managed script commands DIAGNOSTICS rayc doctor environment + readability check
rayc
ToolsDrive Raycast entirely from the command line — deeplinks, shortcuts, scripts.
$ bun bin/cli.js analyze baseline: 3,412 strict-type errors · 214 files $ bun bin/cli.js fix all eslint --fix ▸ 1,988 auto-fixed (−58%) $ bun bin/cli.js status ██████████░░░░░ 1,424 left · ETA ~3 batches $ bun bin/cli.js validate CI gate — exits 0 only at zero errors
ts-strict-cleanup
ToolsGrind a huge TypeScript codebase to zero strict-type ESLint errors, measurably.
$ bun add @divoom/display-control
import { TimesGateDevice } from '@divoom/display-control';
const gate = new TimesGateDevice({ ip: '192.168.1.42' });
await gate.setBrightness(90);
await gate.selectClock(61);
await gate.sendText(2, {
textId: 4, x: 0, y: 40, textWidth: 56, text: 'ripe',
});
// LAN-only · fully typed · zero runtime deps
@divoom/display-control
ToolsTyped, zero-dependency library to drive Divoom Times Gate & TimesFrame over LAN.
$ inq --help inq Usage: $ inq <command> [options] Commands: auth Log in to inq.live, store token in Keychain sync Pull pen notes and update topic docs $ inq sync ↓ 4 notebooks · OCR ✓ · 12 docs updated
inq
ToolsSync handwritten smart-pen notes into per-topic Obsidian docs, with OCR.
$ markitdown report.pdf > report.md $ markitdown slides.pptx -o slides.md $ markitdown invoice.docx $ markitdown https://example.com/article Convert PDF · Word · PowerPoint · Excel · HTML · images → clean Markdown.
markitdown
ToolsConvert PDFs, Office docs and web pages into clean Markdown from the CLI.