I set a goal of 24 books this year. At time of writing, I’m at 6. The math is not mathing but the vibes are right.
The pile on my nightstand has achieved structural integrity. It includes three books about typography, two about systems thinking, and one cookbook I bought because the cover was nice.
You’ve just walked into the lobby of my apartment building blog. Each floor above holds a different category of posts — think of it as a vertical neighborhood of ideas.
Click on any object in a room to read the post it represents. The directory board you just clicked? That’s this post. The mailbox over there holds my contact info. Even the welcome mat has a story.
Take the elevator or click a floor to explore. There’s no rush — the building isn’t going anywhere.
TODO: Write this post.
Heraclitus put forward the theory that the world was constantly in flux. It was not composed of solid stable matter, it was rather constantly changing and evolved; this was in direction oppoosition to Parmenides who believed reality was a singular, unchanging being. Heraclitus believed that as we are part of the world, we are also subject to its graces and whims. He put forth the analogy of a river, a stream of flowing water, stating that no man steps in the same river twice.
As of late it has felt that the rate of change for humans has greatly outstripped the change of the world. We have stepped into the river and created our own currents. Our — at least my — curiosity regarding technology has often outstripped our ability to adopt it in a healthy way; throughout my tech career I feel like my curiosity and fascination for technology has come at odds with the way I wish to live my life. The river, beautiful as it may, was often tumoltuous to my general well-being. This world is currently admist another wave of change which has been brought about by AI.
When I first started using AI my mind never stopped racing of ideas of what it could be and how I could use it. I read more and more articles, tested every single model I could get my hands on, trying to find the differences, eventually finding some that would fit into my workflow. Then when Claude code arrived it felt like I had finally found my coding company; my clippy that was more than just a cool design, but actually functional. It was not perfect and had some rust around the edges but so did R2D2, and I loved that little droid all the same.
I used it for weeks at work, with multiple tabs open. I was obsessed with the idea of one-shotting a PR. With the ability to click Go and watch Claude take off, doing all the things I did not want to do. When I was coding I felt fantastic, perhaps I should say coding, I’m still unsure as to where prompt-driven development falls. The only blocker to my output was the amount of tabs that I had open. I devised workstreams to automate everything I could, to build multiple agents around Claude to ensure maximum output. It felt amazing when I was coding but there was a problem: I had to stop eventually.
When I would stop coding something would feel wrong. I’m a passionate reader and I could hardly find it in myself to stick with a book for more than ten pages, when a month ago I could clear a hundred pages in one sitting. I realised that my mind was still working but worse than that, it was working towards nothing. It was so used to being busy, to flicking through prompts and terminals that it had forgotten how to relax. Even in my free time I started thinking that I should be doing something, after all AI is idle. I can just click it and go, so why not? My current had been disturbed. I had called for the wind all day and still felt surprised when I ended up drowning downriver. Every day the same story but I had convinced myself it was neccessary, AI was here to stay and this was the new world I had to live in.
There were three instances that completely changed the way I use AI. The first happened one day, a couple of weeks after my serious adoption of Claude code I told it to commit some code for me, it responded by asking me what the commit message should be. I look at that prompt for a couple of minutes and came a horrifying realisation: I did not know. I sat there for a few moments and stared at my monitor. The glow from my nuphy air keyboard caught my attention, evoking memories of when I first purchased it. I was so excited that I had decided to make a crappy to-do app, with customisable colours and animations whenever you do anything — just imagine a todo app designed by an RGB keyboard and you have a general idea of what I mean. I coded that all and I showed the people around me. I was happy. I had made something. It was derivate; it was pointless; and it was wonderful. I compared that feeling to what I feel now, looking at my code. I felt indifference towards it, it was something foreign to me, like I was being shown someone else’s creation except there was no one to congratulate, no one to pat on the back.
The second occurence happened when I was browsing through my file system. When I first learned about Claude I told it to save a learnings.md file whenever it made a significant change that it felt like had something that I could learn. It was vague but I got the idea from some medium article about how the Claude code team use Claude code. My idea was to do a feature, read some learnings, take away what I can and move on. I would not concern myself with implementation details, they were a thing of the past, I would instead concern myself with high-level design decisions. When I ls’d my file system I saw hundreds of learnings.md files for all kinds of tasks, ones that I hardly even remembered doing. All this knowledge, all these learnings: wasted. I knew that I was not learning as much as I could but as I scrolled through each of the files, becoming more distraught as I went along.
The third instance was the most damning. I had spotted a strange issue with one of our test files, it seemed to be testing nothing. It was doing a fancy equivalent of assert(x == x). I had seen this many times in different repositories. In fact I have called these instances many times and tried to write better, more meaningful tests, I checked the git blame to figure out who had committed the code, only to find the it was me. I had done it. Not only had I sacrified my own learning, I had done it for an AI that would not code to the same quality as myself — or at least not all of the time. I sacrified speed for quality and as I did so I strayed further from my craft, my passion to code, and the more I became solely reliant on AI to fill in the gaps in my weakening skillset. I found myself yearning to code something by hand and for the days when assistants were as useless as Clippy (no offence Clippy, you’re the best).
Despite how this must sound, I do not believe that you should quit AI or stop using it altogether. It is a tool; like all tools it can be used inappropriately and the issue we are having an as industry is that we are being encouraged to use it so. The hype pieces, both from the AI companies and other tech companies that believe the hype, have caused us to believe that we need to maximise adoption of this new technology. I’m here to tell you, don’t. Don’t feel like you need to have a Claude code window running all of the time, don’t feel like your code output is more important than your learning and most of all: don’t turn to Claude to do a task because it isn’t in your domain or current set of skills; that’s when you need to avoid it the most. I hope you can find a way to fit AI into your workflow without compromising your own talent and growth as an engineer, never forget the love for your craft and remember: the road of excess leads to the palace of wisdom.
Every developer’s setup is a reflection of their priorities. Mine says: “I care deeply about efficiency, and also about having too many monitors.”
The keyboard is a mechanical split — because apparently normal keyboards weren’t expensive enough. It took three weeks to relearn how to type and six months to stop evangelizing about it to anyone who’d listen.
I live in the terminal. Neovim for editing, tmux for multiplexing, and a color scheme I’ve changed fourteen times this year.
# The most honest dotfiles comment
# TODO: clean this up (written 2 years ago)
alias yolo="git push --force"
It’s not really a “rack” — it’s a mini PC under the desk running a few Docker containers. But calling it a server rack makes me feel like I’m running a datacenter, and that feeling is worth the $200.
The best setup is the one you stop tweaking. I haven’t reached that point yet, but I’m told it exists.
You’re reading a blog post inside a 3D apartment building. Let me explain how we got here.
I wanted a blog that felt like a place — not just a page. Something you could explore, click around, and discover posts like objects in a room. An apartment building seemed right: each floor is a category, each object is a post.
frameloop="demand" is essential for a content site. Without it, the GPU runs at 60fps rendering a static building. With it, the scene only re-renders when something changes.
Mobile and desktop need different UX paradigms. Desktop gets a cross-section view with camera zoom. Mobile gets an elevator with door animations. Same content, completely different navigation.
Placeholder geometry first, art later. Every object you see is a colored box, sphere, or cylinder. The real Blender models come when my new machine arrives. But the interaction layer is complete.
Real 3D models, more posts, and maybe a cat on the rooftop that judges your reading choices.