Grahame, FYI

Coming Up for Air

A lot can happen in two months...

April 18, 2026

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.

GIF of a man spinning several plates at once

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:

  1. 1.

    Sometimes one thing comes before another

  2. 2.

    Numbers are more exciting than bullets

    • Though that doesn't mean you never want bullets

  3. 3.

    Enumerating your ideas make them concrete and manageable

    1. 1.

      "I want to plan a trip" is a much bigger thing to address than:

      1. 1.

        I need to pick some dates to be abroad

      2. 2.

        I need to book flights and a hotel

      3. 3.

        I need to figure out what I'm going to do there

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

Leaflet's avatar
Leaflet
1mo

New in Leaflet: ordered lists! It's got the basics you expect *and* some nice touches like editable list numbers and auto-cascade/renumbering logic Shoutout to @grahame.fyi for landing a big PR, including lexicon changes, to add this! 🙏🎉

screenshot from leaflet with a demo of unordered and (new!) ordered lists, with text:

no more! are leaflet lists consigned to…

- illegible cardinality
- imprecise ordering
- general chaos

because now — now — you can simply:

1. add an ordered list
2. with multiple items
   1. including sub-lists
   2. (like so)

ah wait, before we continue, check out this link:

https://lab.leaflet.pub

3. and even split up your lists…

……………

9. and re-number them if needed!

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 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:

  1. 1.

    I learned HTML/CSS as an intern at Rise Interactive in between doing display ad reports

  2. 2.

    Those skills got me assigned web duties at Measure, which turned into being the de facto IT guy (among all my other startup duties, see above)

  3. 3.

    When Measure went to build the (now-defunct) Ground Control, I was a natural fit to help out the new software team

  4. 4.

    Exposure to software development gave me some tools to get into game development

  5. 5.

    Going hard into game development meant I learned C# and how to actually use software patterns

  6. 6.

    Relative programming competence meant Eyrus started taking my PRs to our app to support operations needs

  7. 7.

    Since I was already programming and we're stretched thin, would I be willing to run (and write) the integration project?

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.

Screenshot of a Jellyfin app (shows a bunch of movie posters)

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.

Subscribe to Grahame, FYI
to get updates in Reader, RSS, or via Bluesky Feed
PDS Provider Login Flow

recently
projects
software development
programming