/images/avatar_square.jpg

Automating Firefly III budgeting

I have been running Firefly III for personal budgeting for a while now. It is a solid self-hosted finance manager, but the wife-approval-factor is pretty low thanks to its double-entry bookkeeping system. The thing that bothered me most was this: importing transactions from the bank leaves you with a wall of raw bank descriptions, no categories, no destination accounts, and no real sense of what you actually spent money on, unless you manually enter every transaction. You end up either categorising everything by hand, which defeats the point of importing, or not doing it, which makes your budgets meaningless.

Rewatching the Indiana Jones Films

I have been reading the Rob MacGregor Indiana Jones prequel novels for a while now. Peril at Delphi, Dance of the Giants, The Seven Veils, and currently working through Genesis Deluge. They are good adventure fiction and they got me thinking about the films again. So I sat down and watched all five in order. Some of them I had not seen in fifteen to twenty years.


Raiders of the Lost Ark

Raiders of the Lost Ark poster

Database Architecture for BrickTracker 1.4

BrickTracker 1.4 represents a significant evolution in how we track LEGO collections. While previous versions focused exclusively on tracking complete sets, version 1.4 introduces support for individual minifigures and individual parts—loose pieces that exist outside of any specific set. I’ll try and provides a technical deep-dive into the database architecture changes that made this possible, walking through seven designed migrations and the real-world problems they solve.

Why This Feature Matters: The Community Request

This wasn’t just a nice-to-have feature. It was one of the most requested capabilities from the BrickTracker community. Two GitHub issues (#68 and #69) captured the frustration collectors were experiencing.

BrickTracker v1.3 - A Major Overhaul!

About a year ago, I released BrickTracker, my selfhosted solution for tracking LEGO collections and missing pieces. Since then, it was featured as a Content Spotlight in the selfh.st newsletter (which was honestly a huge deal for me personally). Thanks to all the feedback and suggestions from this community, I’m excited to share version 1.3, which is a big overhaul!

What’s BrickTracker?

For those who missed the original post: BrickTracker helps you manage your LEGO collection when you have multiple copies of sets, need to track missing/damaged pieces, and want everything stored locally. I built it because I reached 400+ sets and couldn’t find an existing tool that did what I needed. Read more here.

Advent of Code 2025 - Day 12: Christmas Tree Farm (The Finale!)

Day 12 was the finale of Advent of Code 2025. The puzzle appeared to be about fitting oddly-shaped presents into regions under Christmas trees - a classic constraint satisfaction problem. But there was a twist.

Part 1: Can They Fit?

Given various present shapes and regions under trees, determine how many regions can fit all their listed presents.

Example shapes:

1
2
3
4
Shape 0:    Shape 4:    Shape 5:
###         ###         ###
##.         #..         .#.
##.         ###         ###

Example regions:

Advent of Code 2025 - Day 11: Reactor

Day 11 was about finding paths through a directed graph. Part 1 was straightforward DFS pathfinding. Part 2 looked like it needed the same approach, but brute force was too slow - the solution required combinatorics and memoization.

Part 1: Count All Paths

Given a graph of devices with directed connections, count all possible paths from you to out.

Example:

1
2
3
4
5
6
7
you: bbb ccc
bbb: ddd eee
ccc: ddd eee fff
ddd: ggg
eee: out
fff: out
ggg: out

Paths: you→bbb→ddd→ggg→out, you→bbb→eee→out, you→ccc→ddd→ggg→out, you→ccc→eee→out, you→ccc→fff→out