Featured · Video · Live

Archive Watch

Phone & tablet TV Desktop Web

A cinematheque for the public domain. Archive Watch takes the Internet Archive's ~30,000 public-domain feature films, classic TV, silent cinema, animation, newsreels, and vintage commercials and gives them a proper streaming app: curated, ad-free, free, no account, no tracking, on every screen you own. I wanted these films to be as easy to watch as anything on Netflix. So, I built it.

This year I learned to build for the living room: the focus engine and big type of a TV interface, a streaming layer that survives flaky sources without stalling, and a Roku channel in BrightScript that had to run on a 2011 player. That last one meant measuring memory and decode cost instead of guessing. 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 is the clearest example of how I build. One SQLite catalog published over HTTP. Sync through each ecosystem's own cloud rather than a server of mine. A published rights audit with real numbers, where every title that fails is hidden and counted rather than quietly kept. And a content pipeline that heals itself and runs entirely on scheduled GitHub Actions, so there is 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.

In 2026 I added two things I have not seen other trivia apps do. 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, written from a Mac, rendered and tested headlessly in CI so I can see every change without handing it to anyone, then checked on a real Windows machine before it ships. It shows the discipline under 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 something I actually needed, and ships native 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 with Apple's Vision framework and ML Kit; no image is ever uploaded
  • RealityKit 3D "Hero Shot" card animations on iOS
  • Collections & decks that sync across devices and share as public pages

Try One

Here is where each app lives, if you would rather try one than read about it.

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 is one support page for all of them, and it reaches me.

How I Build: One Codebase, Many Screens

Shipping one app to phones, TVs, desktops, and the web without it turning into four apps is a systems problem. I solved it once, and I keep the solution as an open-source 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 me: the parity matrix, per-platform design docs, the data contract, per-ecosystem sync, resilient streaming, the CI fleet, device harnesses that read the screen back with OCR, and store submission from the command line. All of it is 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 over design consistency. Every app does the same things on every platform, but does them the way each platform does them: a SwiftUI .sheet, a Compose bottom sheet, a native web <dialog>, a focus picker on the TV. A parity matrix, checked against the real code, keeps every platform doing the same things.

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.

Tested on real hardware. A feature ships when I have seen it work on an Apple TV, a Pixel, and a 2011 Roku, through harnesses that drive the device and read the screen back with OCR. I treat each store's own validator as the spec.

No servers, no paid tiers. Sync rides on each ecosystem's own cloud: CloudKit for Apple, your own 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, and now apps

Every app I build carries the same belief as the classroom, the blog, and the district work: technology should serve people and help them understand more. Archive Watch keeps a century of film available 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 is for connection instead of scrolling. I am building different things than I was in 2007, but for the same reasons.

More about me