skip to content a landlocked captain’s log
- Every project a ship The dashboard has known for a while which projects have an agent working on them, because every Claude or Codex session sends small events as it goes: started, working on this task, committed, finished. For a while that turned into a list of lanes, one per session, with timestamps. Accurate and… control · svg · nextjs · typescript
- A bell on the quarterdeck At five past three on a Friday afternoon, the VPS that runs two of my production apps hit 94.8% disk. A cold backup was staging Docker images on it and the images were big. There was about 3 GB left before databases start refusing writes, and nobody knew, least of all me, because I was reading… control · docker · yaml
- The key to the lifeboat was on the ship A few weeks ago, in Launching the lifeboat, I wrote that every backup in the fleet now gets restored for real once a week, and that the keys and env files, saved nowhere before, now go off the box nightly, encrypted. Both of those are still true. This week the content planner joined the fleet, and… infrastructure · age · ssh · postgres · docker
- Dressing the ship One of the businesses I build for wanted a way to quickly generate glossy social media images without opening a separate design tool every time: the right size and shape for IG or FB with all their very particular bells and whistles. You know, the exact thing graphic artist use templates in Photoshop for. That's the thing though... once your style and branding is locked in, most of the time you're only making minor tweaks and changing the source image - so what if they could have those templates ready to go in their CMS where the content copy is done, and social media image become 'swap image, update title, go.'? infrastructure · nextjs · typescript · svg
- Seaworthy enough to launch The restore system finally got the part that matters: a button that reaches into a live database or folder and puts a named backup back, with the undo taken automatically before it touches anything. Once that stopped being a hope and started being a mechanism, the project itself was steady enough for the other thing that had been sitting on the list: a real version number, and a container someone other than me can pull. infrastructure · control · docker · postgres · ssh · ghcr · podman
- A hull that leaves My setup for web apps assumes a machine that is always on, holding the running thing. A phone app breaks that assumption completely. The app runs on a phone in someone else's pocket, and there is no berth of mine to keep it at. Here is the local Android dev setup I ended up with instead, walked end to end. What runs on the laptop, what the emulator is for, where the build happens, and how a saved file reaches a running app a second later. workstation · infrastructure · expo · react-native · android · gradle · emulator
- The visitor's gallery I run my projects out of bosun-x, and not all of them under the same name. One of those names is a business site I take client work through, and a client there wanted to see where their projects were up to. So they have a login now, to the part of bosun-x that's theirs, their projects, the tasks I've shared, the ideas they've brought me, a thread to talk in. Same bosun-x I use, filtered down and wearing that site's skin. There was no second system to build. control · infrastructure · nextjs · typescript · docker · yaml
- Teaching others, one morsel at a time I've been working on another project for bite-sized learning with the aim of teaching 'anyone anything' using small questions, used in various ways to bring meaning and context to knowledge they're imparting. There's a few patterns to teaching this way, like using the same concept four or five times across a course and never ask identical questions. Beyond the broad(side) stroke concept is the app mechanics: The mission design, the spaced-review engine that decides when you've actually got something, the sync that never invents your history, and the consent model sitting under class/family reporting. infrastructure · nextjs · postgres · typescript
- Two gates and a fence bosun-x shows one person everything. Every project, every server, every private note. But I also build things for other people, and they would like to see how it is going without me mailing them a screenshot. Today's work is the mechanism for that. A client login that can only ever reach the projects done for them, enforced in one function, behind a build rule that fails if any other code reads the data directly. control · infrastructure · nextjs · typescript
- Launching the lifeboat An earlier note built the backups but never restored one. Since then bosun-x runs every backup through a real restore once a week, into a throwaway database with no network and no name, and counts what comes back. Any database can be put back from a button that dumps the old contents first, so the move is reversible. The recovery order is written down. And the keys and env files, saved nowhere before, now go off the box nightly, encrypted. infrastructure · control · postgres · docker · age · zstd