Featured · Video · Live

Archive Watch

Phone & tablet TV Desktop Web

A cinematheque for the public domain. Archive Watch turns the Internet Archive's ~30,000 public-domain feature films, classic TV, silent cinema, animation, newsreels, and vintage commercials into a curated, ad-free viewing experience with the dignity of a modern streaming service and none of its machinery — free, no account, no tracking, on every screen you own.

This year's work was learning to build for the living room: the focus engine and ten-foot type of a TV interface, a streaming layer that survives flaky origins without a stall, and a Roku channel written in BrightScript that had to run on a 2011 player — which meant measuring memory and decode cost instead of assuming. Along the way it gained deterministic Live Channels (a TV-guide grid that plays the same on every device), Watch Together over SharePlay, offline downloads, live on-device captions, and a Creation Studio on the Mac whose supercut engine searches every subtitle line in the archive and cuts the moments you name.

It's the fullest expression of how I build: a single SQLite catalog published over HTTP, sync through each ecosystem's own cloud rather than a server of mine, a published rights audit with numbers — every title that fails it is hidden and counted, not quietly kept — and a self-healing content pipeline that runs entirely on scheduled GitHub Actions — no backend to pay for.

Featured · Game · Live

Tidbits Trivia

Phone & tablet TV Desktop Web iMessage

The whole of Wikipedia, turned into fact-checked trivia — where every question teaches you something. Nearly 100,000 questions across dozens of question types, generated and fact-checked from Wikipedia and Wikidata; a deterministic Daily that is byte-identical across Swift, Kotlin, JavaScript, and C#; serverless online play between Apple and Android; no account required and no data collection.

Two things arrived in 2026 that most trivia apps never attempt. Tidbits Live turns a Mac or a Windows PC into a pub-trivia host: build a night (or import a Kahoot), drive a projected big screen, and let every team answer on their own phones through any Tidbits app or the web — with wager rounds, jokers, pictures, clips, live scoreboards, and a phone remote for the host. Hosting is free forever. And Tidbits in iMessage lets you send a round to a group chat and have everyone play in the thread.

The desktop version taught me the most this year. The Windows app is native C# and Avalonia: developed from the Mac, rendered and tested headlessly in CI so every change is observable without a hand-off, then verified on a real Windows machine before it ships. It's a good example of the discipline underneath all of these apps: the shared game logic is one algorithm mirrored in four languages, and a test proves the mirrors agree.

The App Portfolio

Each app starts from a real need and ships as a genuinely native experience wherever it lives — SwiftUI on Apple devices, Jetpack Compose on Android, a zero-dependency PWA on the web, and the native toolkit of each TV and desktop it reaches.

Social · Live

Bsky Dreams

Phone & tablet Web

A custom Bluesky client built for learning and connection over passive scrolling.

  • Force-directed Network Constellation for topic discovery
  • Depth-colored conversation threading & hybrid multi-source feeds
  • Cross-device sync through your own AT Protocol repo — no server
  • Zero-dependency: raw XRPC, Swift 6 / SwiftUI, vanilla JS on the web
Utility · Live, iOS in beta

Boba Playbook

Web Android iPhone & iPad

A fan-built companion for the Bo Jackson Battle Arena trading card game.

  • Browse 31,000+ cards (including the full Tecmo Bowl Edition set) with live eBay market pricing
  • On-device card scanning via Apple's Vision framework and ML Kit — no image ever uploaded
  • RealityKit 3D "Hero Shot" card animations on iOS
  • Collections & decks that sync across devices and share as public pages

Try One

If you'd like to see the work rather than read about it, here's where each app lives.

App Apple App Store Google Play Amazon Appstore Roku Channel Store Microsoft Store Web
Archive Watch iPhone, iPad, Apple TV, Mac Android, Google TV Fire TV Roku archivewatch.org
Tidbits Trivia iPhone, iPad, Apple TV, Mac Android Windows tidbitstrivia.com
Bsky Dreams iPhone, iPad bskydreams.com
Boba Playbook TestFlight beta Android bobaplaybook.com

Need help with any of them? There's a single support page for every app.

How I Build: One Codebase, Many Screens

Shipping one app to phones, TVs, desktops, and the web without it becoming four apps is a systems problem. I solved it once and turned the solution into an open-source starter template that grows with the apps.

Open Source · Claude Code–aware

The App Template

One template, one method: a shared core with native shells for phones, tablets, desktops, TVs, and the web, from one repository. It carries everything the live apps taught — the parity matrix, binding per-platform design docs, the data-plane contract, per-ecosystem sync, resilient streaming, CI fleet engineering, device-observation harnesses with screen OCR, and CLI-driven store submission — vendored as skills so a fresh clone already knows how to build this way.

It grew one screen at a time — Dual, Tri, Quad, Quint — and is now a single rolling Universal App Template that absorbs new findings from Archive Watch and Tidbits Trivia continuously instead of forking a next letter. The earlier generations stay published for anyone who wants a smaller starting point.

The principles behind the template

Feature parity, not design consistency. Every app does the same things on every platform, but expresses them in each platform's native idiom — a SwiftUI .sheet, a Compose bottom sheet, a native web <dialog>, a focus picker on the TV. A single-source-of-truth parity matrix, audited against the real code, keeps every platform honest.

Native everywhere, no third-party frameworks. Swift and SwiftUI on Apple, Kotlin and Compose on Android, BrightScript on Roku, C# and Avalonia on Windows, plain HTML and JavaScript on the web with an additive ten-foot layer for smart TVs.

Measured, not assumed. Features ship when they've been seen working on real hardware — an Apple TV, a Pixel, a 2011 Roku — through scenario harnesses that drive the device and read the screen back with OCR. Every store's own validator is treated as the specification.

No servers, no paid tiers. Sync rides on each ecosystem's own cloud — CloudKit for Apple, the user's Drive or AT Protocol repo elsewhere. Data ships as static files. Everything deploys through free GitHub Actions, including the store submissions themselves.

The through line

Twenty years of teaching, now in the shape of software

Every app I build carries the same conviction that runs through the classroom, the blog, and the district work: technology should serve people and deepen understanding, not replace it. Archive Watch preserves culture and hands you the tools to make with it. Tidbits makes every answer a lesson and gives any bar or classroom a free trivia night. Bsky Dreams trades passive scrolling for genuine connection. The craft is new; the purpose isn't.

More about me