Maracaibo
A 1967 mahogany motor yacht with a modern nervous system.
A clinker-built mahogany motor yacht from 1967 — twin Mercedes diesels, continuously restored to preserve her original appearance — quietly fitted with modern electronics: NMEA 2000 instrumentation feeding a single SignalK bus on a Pi, a fleet of small services around it, and a custom-built dashboard as her face at the helm and on the phone.
Her systems keep spawning projects of their own — Sightglass and Virtual fuel consumption in the lab, and the dashboard and SignalK plugins on their own pages.
- Nightly SignalK segfaults traced and documented
- History coverage audited, not just resolution
- Plotter confirmed on the real vessel
- Passages save the sailed track
- Motion tracking joins the fleet
- Shore relay, cameras and health monitoring wired
- README becomes the whole-boat system umbrella
- Marine electronics suite, first commit
- Read the artefact, not the manifest
I wrote up every permission the app asks for, reading them back out of the built package rather than off the source manifest. That is the…
- A chart that spins on noise is a lie shaped like an instrument
Decision. Course-up turns the chart under the boat — but below about a knot the rotation freezes at the last good heading and an amber…
- Nothing durable lives only on the Pi
The Pi filled up again, and that is not the interesting part. The interesting part is what was on it: measurements that existed nowhere…
- OpenCPN was rejected for being too big
Decision. The minimal phone chartplotter will be a thin native shell — a small Kotlin app wrapping a WebView — around the S-52 chart…
- Archive the inputs to a reduction, not its result
What I learned. Archive the inputs to a reduction, not its result. My depth pipeline kept only the shoalest sounding per grid cell. That is…
- Why I am not founding a Nordic depth database
Decision. My boat's depth soundings stay our own. The community depth database I was circling is paused, deliberately, and that pause is…
- The worst shape a bug can take
What I found. The worst shape a bug can take is a promise that never settles. My SignalK plugin for the boat fridge would wedge silently:…
- Diesel only goes down
Decision. The published fuel level on the boat can only fall. It rises for exactly one reason: I declare a refill through an explicit door…
- North-up was the degenerate case that hid the bug
Built an OpenCPN chart plugin for Maracaibo that renders the boat's own vector charts as map tiles. Looked perfect — buoys, lights,…
- I called it overengineering. Sixty lines was the floor.
Wanted an "exit kiosk" button on Maracaibo's helm dashboard — the touchscreen runs Chromium in kiosk mode. Claude built a 60-line Python…
- My GPS smoothing didn't work until I measured the noise it was smoothing
The boat's chart plotter (Maracaibo dashboard) danced at the berth — GPS multipath wander. I shipped a fix: below 0.3 kn for 30 s, smooth…
- One tank read 10% high for weeks. The detector was never wrong.
Sightglass watches the diesel sight tubes on the boat with a camera. Starboard read ~10% high for weeks. I kept tuning thresholds; the…
- A physical invariant is a free hallucination detector
Sightglass is a Raspberry Pi pointing two cameras (via go2rtc) at the diesel sight glasses on my 1967 boat; a vision model reads the fuel…
- Starlink adds a monthly kit fee — boat math changes
For a boat the calculation just shifted: the default new-customer path now carries a recurring hardware cost on top of the subscription,…
- TIL: SignalK tank levels are 0..1 ratios, not liters
What I learned. SignalK's tanks.fuel.{0,1}.currentLevel is a ratio (0..1), not a volume — and.capacity is in m³, so liters = currentLevel ×…