Fine, fine. You asked for it, here it is. I hope you’re happy :)
I had to use GPT for the documentation and final spit-and-polish, because I had absolutely no intention of releasing this thing, let alone documenting it for wider consumption.
Ipso facto, for all the AI “Akshually” pedants, I’ve tagged this as AIP. Politely go fuck yourselves :)
Furthermore, here is the actual tale of the tape:
- Design - HUMAN
- Implementation - HUMAN
- Testing - BONE-FUCKING-CRUSHINGLY HUMAN
- Documentation - GENERATED
- Review - PAIR
A couple of notes:
-
Remote access: outside the home, the nature of the beast means you need something like Tailscale to get back into your home lab. That’s a quirk I deliberately kept for the sake of simplicity, as the browser needs HTTPS for things like GPS/geolocation. The private Tailscale HTTPS path solves both problems neatly without me having to do shit.
-
Portability: I didn’t build this for you; I built it for me. That said, I detangled the original home-lab-specific mess enough that you should be able to deploy it elsewhere.
The repo separates the application from the regional data bundle, and the documentation covers installation, other regions, routing, Wikipedia/Kiwix, Tailscale, updating and the various caveats.
In other words: it is now usable by other people (and immediately usable if you happen to live where I do), but you’ll need to do the work. Additionally, that should not be mistaken for me volunteering to become your unpaid support department :)
“Fork it, fix it or fuck it” - dealers choice :)



Yep, I think I can see the issue. Let me think thru it properly when I’m back home. The way it works right now is that Docker Compose pulls the Python/nginx/BRouter images (and Kiwix if you’re using that), then bootstrap grabs the CORE WA assets as a once-off download.
The problem is that on a fresh install bootstrap doesn’t recognise pre-seeded CORE assets if you grab them manually. The ZIM is the exception (that one can be be validated and reused locally). So at the moment it assumes a once-off net connection to grab the PMTiles, search DB and routing data, and then you can basically lobotomize it from the internet afterwards. That was because I didn’t want to package the whole thing as one giant glob with a half GB d/l, as that might choke a SBC (it made my Rpi4 do exactly that).