Voidstar One

Portfolio

A few of the things I've made over the years that I'm still fond of - some shipped to real users, some built mostly to scratch an itch or learn something properly. Most of the recent ones are on my GitHub.

Grapevine App

Grapevine City app shown on three iPhones.

This is absolutely the thing I've done that I'm proudest of. I went from knowing almost nothing about iOS developement to releasing a successful app in just a couple of months. When I arrived, the company had a really buggy phone gap solution and a broken web service. I fixed up the web service, added a few features to their admin interface - and of course designed and built the app with them, helping them out with UX decisions along the way. It made Apple's What's Hot list for a time and once got more than 800 downloads in a day. The company no longer exists, so you can't try it out for yourself - but this is it.

Dice Rolling Engine

A dice-pool app showing successes in green and a botch in red.

A tabletop dice-rolling engine that parses RPG dice notation: pools like 6d10, exploding dice (5d10!10), and success / botch counting for systems like World of Darkness. I've now built it five times over - in C, Kotlin, Swift, Objective-C and Rust - as a way to really get to grips with each language and its idioms. It's also the rolling core behind Plotter.

Conditionizer

A little language for boolean conditions. It lexes an expression like article.title contains 'markets' && article.published >= '2024-01-01', parses it into an AST, and evaluates it against your own objects. It's Kotlin Multiplatform on purpose: I wanted one syntax I could validate in the client, send to the server, and run with the exact same module on both sides - so the two can never quietly drift apart.

AutoSmb

A small Swift utility that automatically mounts the right SMB shares when I join a particular Wi-Fi network, and gets out of the way when I leave it. The result is that my NAS is simply there when I'm at home, and never hangs the Finder when I'm somewhere it can't be reached. The kind of papercut that's far more satisfying to fix than it has any right to be.

Local Genetics

A tool for poking at my own raw 23andMe data. It reads the genotype export, cross-references the SNPs against SNPedia, and surfaces what's actually known about them - all locally, without handing my genome to anyone. It's equal parts genuinely useful and a good excuse to learn the file format and the underlying biology.

jQuery.onScrollIntoView

Curly braces, denoting code without a front-end.

I think I was the first to properly identify a problem in how developers work out which section of a page someone is currently looking at. It kept cropping up again and again: another agency would simply compare the scrollTop value jQuery gave them against a set of fixed breakpoints, which caused all sorts of nasty bugs and a generally unpleasant experience. I approached it differently - using basic geometry to intelligently work out which section was most in view. You can read more about it, and use it yourself, here.