About me

Hi, I’m Bryan. I’m a computer scientist and software engineer who builds tools to get rid of tedious work: scripts, CLIs and small services that take something messy and make it just work. If I have to do something by hand twice, I usually end up writing a tool for it.

I care a lot about owning my own data. Most of my side projects start with a service that holds my photos, contacts or messages in a format nobody can use, and end with a tool that gets them back out properly.

Away from the keyboard I love to travel, which is part of why I prefer working remotely. Give me a good connection and a clear problem and I’ll do my best work from anywhere.

What I’d like software to be

I’d like technology to work for people, not for the ecosystem they bought into:

  • Sharing doesn’t depend on your phone. Sending photos, videos or files to someone should just work, whatever phone or platform either of us uses.
  • Music doesn’t need a matching subscription. I should be able to share a song or a playlist with a friend even if we pay for different services, or neither of us does.
  • Movie night doesn’t need a pile of subscriptions. Getting online and watching a film together shouldn’t start with working out whether it’s on Disney+, Netflix or Prime, then paying for all three to watch the same kind of thing.
  • Leaving is as easy as joining. Your data should come out of big tech in formats you can actually use, so you can move on without losing access to good technology.

What I build

  • snapchat-export-tools: turns a Snapchat “My Data” export into correctly dated, geotagged photos and videos, with captions burned in, multi-snaps joined back together and chat media sorted by conversation. Ready for Immich, Apple Photos or Google Photos.
  • contactlookup: a self-hosted API for searching contacts in a VCF file. On PyPI.
  • vcf-generator: generates VCF files full of realistic fake contacts for testing. On PyPI.
  • trello_card_cli: adds Trello cards from the terminal.

I also run my own homelab, built to fix itself and to recover remotely. Immich, Jellyfin, Nextcloud and Navidrome instead of the cloud versions, private DNS and remote access, passkeys for sign-in, monitoring and alerts, local LLMs, and tested backups spread across several locations.

Teaching and research

I have a B.Sc. and an M.Sc. in Computer Science from the University of Manitoba, Canada. My thesis looked at using a hybrid of a relational and a graph database to support transportation data analytics. I taught in the department as a sessional instructor, and before that I was a teaching assistant for 14 courses between 2014 and 2020 (see Teaching). I still enjoy explaining things and pairing with people who are learning.

My interests: Python, software and systems engineering, tooling, DevOps and process optimization.

Let’s build something

I welcome collaborations, especially on projects that free people from companies trying to lock them into an ecosystem: export and migration tools, open formats, self-hostable alternatives, and anything that makes switching platforms painless. If you’re working on something like that, or have an idea, start a thread in Discussions on GitHub. For anything private, email me at the address in the sidebar.

If something I built saved you some time, you can buy me a coffee on Ko-fi ☕