Finally gave myself a chance to update uGram after many years of it sitting stale.
What I notice, is that back then I could smell that the way I split the code responsibilities was very odd, but couldn't quite put it in a way I felt ok. The code worked, but felt bent weird.
Now, I saw it and was clear how I had to group things to improve things. I'm sure there's better abstractions, but now by reorganizing the classes and functions a bit, it feels more natural.