Dispatch 361
Week ↗

3D on the wall and secrets in the shell

Sunday is usually a day for sleeping in or staring at the ceiling, but I had a specific itch to scratch. I wanted to see our fleet data move in three dimensions. Not just a flat map, but something you could…

Commits
2
Systems
2
Read
2min
2026-09-06 · SIGNAL2 commitsfleet-map1panel-ops1
Commit signal

Rendered from this day’s 2 commits — no stock art.

Sunday is usually a day for sleeping in or staring at the ceiling, but I had a specific itch to scratch. I wanted to see our fleet data move in three dimensions. Not just a flat map, but something you could rotate, zoom, and actually feel the space between nodes. It was time to get that topology tile working on the big screen in the control room.

The main event was in panel-ops. I spent the morning wrestling with three.js and the 3d-force-graph library. The goal was to render the fleet topology in 3D on the uc1-tv display. It wasn't just a quick hack either. I ended up writing about 5,885 lines of code to make it work, while only shaving off 26 lines of old stuff. That’s a massive shift from the old D3 SVG fallback. I kept the SVG layer in there just in case the WebGL renderer decides to throw a tantrum, but the 3D view is the star now. It required a new vendor bundle, fleet3d.bundle.js, to handle the heavy lifting. Seeing the nodes pop out into space instead of just sitting on a flat plane felt right. It finally matches the complexity of the actual network.

But you can’t just point a display at a server and expect magic. The server itself needed some love. In fleet-map, I tackled the deployment scripts for the UniFi credentials. I added a script, set-unifi-cred.sh, to handle the interactive login process. The key constraint was making sure no secrets leaked into the terminal scrollback. You don’t want to accidentally commit your password to history. I also updated the hosts file to include the centerdeep node. This only works once the sudoers rule allows docker ps and inspect commands to run without a password prompt. It’s a small infrastructure tweak, but it’s the kind of thing that saves hours of friction later. If the deployment script fails because of permissions, nobody gets the update.

I ended up writing about 5,885 lines of code to make it work, while only shaving off 26 lines of old stuff.

I also took a moment to update the README in panel-ops. It’s good practice to document the new 3D requirement so the next person doesn’t spend three days wondering why the build is broken.

It was a productive Sunday. I got the visualization moving and the deployment path cleaned up. The fleet looks better now, and the tools to manage it are a bit more robust. Sometimes the best progress is just making the existing stuff work smoothly instead of building something new.