Coming Up for Air

Since you've I've been gone

For the better part of the last nine months, I have been single-handedly doing one of (if not the) biggest systems integration projects my company has ever done. I did the toy app/proof-of-concept, PMed the initial attempt, rewrote the entire thing after a few false starts, did hardware testing, patched critical eleventh-hour bugs, installed the physical components, and went to a customer site at 6am on launch day to replace a faulty wire so they could go live. Whew.

There's a bit more work to do to really stabilize it, but I'm over the proverbial hump now. Something like 25 of the last 30 days have been twelve-hours on (including weekends). Knock on wood but I hope to not be doing that again for a long time.

I don't know that we're public about what the integration actually entailed, so I'll keep it vague and link it out if/when we do publish our partnership. The biggest technical learning I got out of the whole thing was an introduction to (followed by a deep and thorough education in) the transactional outbox pattern , which underpins the whole thing.

A different sort of Leaflet writing

The integration project for work has been by far the biggest thing going on. But apparently I am a glutton for punishment because I also apparently thought it would be a good idea to go deep on open-source contributions. Specifically, I was annoyed at the distinct lack of ordered list support in Leaflet for the following reasons:

Well, Leaflet is open-source. If you want something, they take contributions. So I pulled the codebase and now we have ordered lists!

That was a real challenge for me:

I am not a Typescript person, and the Replicache and Supabase stacks were totally novel to me.

I thought I understood how Lexicons work. I managed to figure out what was necessary with guidance from @awarm.space but I still have many, many questions.

Auto-cascading numbering was a bitch-and-a-half to figure out. At least with the transactional outbox stuff everything was in order; trying to hold different parent/child relationships in my head while looking at typescript was NOT a good time.

Still, I'm glad I did it, and I'm glad we have lists now, just in time for me to spend three months with no time or energy to write. If it feels like I'm overusing the list feature in this article, well now you know why. Mostly I'm just trying to ignore all the little UI tweaks we could stand to add...

Intro to Supabase

I always find it fascinating to see how these projects fold back into one another. It's been true since forever:

I didn't do ordered lists for Leaflet because I had some concrete need to get something out of it (other than ordered lists). However, the introduction to Supabase immediately became relevant back at work in a big way. We've added not one but two projects that use it on the backend, one of which I wrote, and I've got another one in my head I think we can benefit from. For small internal projects it is a godsend. I don't need to bother the tech lead looking for infrastructure help to deploy something into our Azure or AWS or whatever, nor do I have to worry about spending an arm and a leg because I clicked the wrong button on the arcane database configuration screen. I can have a database with edge functions, emails, and authentication (!!) handled for me and be building in a matter of hours. And I don't have to do janky things like use Airtable as my database—though I will admit doing so has worked shockingly well for a great many things in the past.

But wait, there's more

To add what is already feeling like a preposterous list, I set up my old gaming machine as an in-home server. Not particularly difficult—just wipe it and install Ubuntu Server —but then came all the fun of setting up the sorts of apps I'd want to run off of it. I haven't moved my PDS there yet, but I have set up a Foundry VTT instance for my D&D game and I went through an entire Plex lifecycle before setting up a Jellyfin streaming server and a Samba fileshare so my dad could upload the DVDs at my parent's house. Just like with Supabase, the improvement in my networking skills almost immediately paid dividends when messing with DHCP and LAN configurations on our devices at work. I didn't set out for that to happen, but the cycles just seem to shorten at every step.

Coming up next

I am still very much adrenaline dumping from the last few weeks, so I'm trying not to be too ambitious despite the plethora of project ideas hanging around. This [past] weekend I've limited myself to cleaning up the house and trying to enjoy the weather now that it appears to have finally turned.

I'll be in England in May & June, with a stint in Malta and Sicily splitting the trip. Before that, I plan to do a write-up of the architecture for the integration I did. I've also been using Claude Code for work-related things, and there's a lot I'm still trying to unpack there that could make for a decent article. Not to mention all the other Leaflet ideas floating around in the queue.

The trick is going to be to not overwhelm myself, to leave space for actual rest and recuperation. Should be easier than it was in February—the sun is shining, the flowers blooming, and my bike is all tuned up and ready to go.