Projects

Solo Dungeon Master

An AI-powered solo tabletop RPG that runs entirely in the browser, with Claude as your Dungeon Master. Pick from 10 races and 10 classes, then explore a narrative adventure in the Cypher System. You supply your own Anthropic API key — it never leaves your device. Adventure state saves to browser storage so you can resume where you left off, and encrypted URLs let you share a session without exposing your key.

QR Share

A web app for sharing files between devices using QR codes. No accounts, no cloud, just scan a QR code and the file is transferred directly between your devices using WebRTC. You can share one file at a time, or a whole queue of files. The app works entirely in the browser, and the file data is end-to-end encrypted, so the key never leaves your devices. It's a great way to quickly transfer files between your phone and computer without needing to email them or use a USB cable.

Herd

A browser game about herding sheep. Tap the field to send your border collie to that spot — the dog scares nearby sheep, so use it to push the flock toward the pen before time runs out. Sheep flock together naturally, so working from the sides and behind is more effective than chasing them head-on. Physics, flocking AI, and rendering are all hand-rolled with no game engine.

AI Chat for Android Auto

An Android Auto voice assistant that sends your spoken questions to an AI provider and reads the responses back through the car's speakers.

Haunt

An Android app that uses WiFi Round-Trip Time (RTT) ranging to calculate your phone's position and automatically switch the correct Philips Hue light for whichever room you're in. No floor plans, no coordinate systems, no backend — just three Google WiFi pucks and a calibration step.

Send Dunes!

A sand dune simulation game where you control the wind to push, sculpt, and reshape a dune across a desert landscape.

Nuts

A phone-focused full-screen toy: a box of hex nuts bouncing around with 2D physics. Tilt your phone to shift gravity, shake it to scatter them, and feel haptic feedback on every wall collision.

Alphabeticals

A 1–10 player word-association card game for mobile browsers. Players take turns naming things from a category while playing letter cards from their hand. Use special cards to skip opponents, swap hands, or change the category. Last player holding cards loses.

Bubbles

Your phone is a glass of water. Tilt it to slosh the liquid side to side; tilt past 45° and water spills over the rim permanently. Tap anywhere to drop a random object in — some float, some sink. Desktop users move the mouse instead of tilting.

Slide!

Multiplayer slingshot curling for 1–10 players in the browser. Pull back your puck like a slingshot and release to throw. Choose between nearest-to-jack or target-ring scoring across multiple rounds, with a running leaderboard. Join via link or QR code — no install required.

Flight

A browser-based hang glider flight simulator inspired by the hang glider levels of Pilotwings 64. Soar over hand-crafted terrain, ride thermals, race other players in real time, and share your own worlds. Includes a free-fly island and a timed desert race mode with a leaderboard.

Chance It!

A multiplayer push-your-luck dice game for 1–10 players, no install required. Roll 3 dice each turn, bank your gold, or press your luck for more. Hit 3 skulls in a single turn and you bust, losing all unbanked points. First to 13 wins.

Word Waltz

A two-player asynchronous Wordle duel. One player picks a secret 5-letter word; the other plays Wordle against it and scores based on how many guesses it takes. Then the roles swap — back and forth indefinitely, with a running scoreboard. All game state is end-to-end encrypted; the key lives only in the share URL.

Cat Playground

An interactive web toy for cats. Animated critters (fish, ants, fireflies, laser dots…) wander across a full-screen tablet display. When the cat taps one, it reacts with animations and sounds. A human controls the experience from their phone by scanning a QR code — no app install required.

Secret Bangers

A browser-based multiplayer implementation of the Love Letter card game, with historical figures (Casanova, Tesla, Kafka, Cleopatra…) as characters. 2–4 players join via QR code; all game logic runs in the browser and syncs through Firebase in real time. No accounts required.

What Year Is It?

Imagine you're a time traveler who ends up in a random place and time in history — what does a local say when you ask "What year is it?" Pick a spot on an interactive map and choose a date; the app shows you the calendar system and local year that would have been in use there and then.

Friend Compass

Real-time location sharing for a group of friends. Share a room link or QR code; everyone who joins sees each other as directional arrows on their screen. No accounts, no app install — just a mobile browser. Location data is encrypted; the key lives only in the room URL.

Separator Page

This is a simple web page that can be used as a separator/container for other web pages. It has been recently rewritten and now supports custom icons.

I use it with FireFox and Tree Style Tab to organize my browsing, but you can use it in any other browser that supports nested/vertical tabs, or even just as a random page where you can customize the title, the icons, and the body.

Separator Page Usage

Quotable

Quotable is a web and Android app that shows random quotes.

The Android version can pop-up regular notifications, so you can get random quotes throughout the day.

The Android version is not yet on the Google Play store, so you'll need to sideload it.

template

This is an OSS CLI for automating folder/file creation.

Hawk

This is a web app that allows you to specify a duration (eg. "5:32"), then Hawk will find a song in your Spotify library with that length, and with one click you can start playing this song through Spotify.

Godot 2D shooter experimentation

This is my first real foray into using a game engine, so I'm experimenting with Godot and making a simple 2D space shooter.

Try the work-in-progress game here.

Find Stone Beer

Go app that uses https://find.stonebrewing.com/ API to notify me when Arrogant Bastard is shipped to stores around me. Pushover is used to deliver messages to my phone. This was a proof-of-concept implementation to figure out how to provide regular notifications without running a server.

Quantum Inspiration

This is a similar notification implementation to "Find Stone Beer", but this app uses Australian National University Quantum Numbers API to pick a random Wikipedia article and send it to me every morning. If a particular theory of the multiverse is correct, then every day 256 versions of me will receive a different article, and will thus lead to a slightly different day. Mostly, though, this was just something to do for fun.

Task Heap

Task Heap is a Flutter task-organizing web app. The basic concept here is to have a heap of tasks, then skipping big or complex tasks until you find a task that feels "doable". Eventually, all tasks will get done, as you complete the tasks in the order that works for you.

Dao

Dao is a TypeScript version of the game Dao.

Play it here.