Home GRID: General Resilience Information & Defense
Post
Cancel

GRID: General Resilience Information & Defense

I’ve been quietly building something I’m pretty proud of. It’s called GRID — General Resilience Information & Defense. The short version: it’s an offline-first survival knowledge and media system running on my UNRAID server. The longer version involves way too many nginx quirks and a rabbit hole of ZIM files.

GRID Dashboard

The Problem

The internet is easy to take for granted. Power outage, ISP outage, infrastructure failure — suddenly all that “just google it” knowledge is gone. I wanted a local system that could serve up survival-relevant information, entertainment, and even an AI assistant with zero internet dependency.

What GRID Actually Is

At its core, GRID is a React dashboard served by nginx on my UNRAID box. It acts as a front-end for several services running in Docker:

  • Kiwix — serves offline Wikipedia, iFixit, medical references, and other ZIM-format archives
  • Ollama — local LLM inference (mistral:7b-instruct), for an offline AI assistant
  • Calibre/Calibre-Web — offline ebook library
  • Plex — local media server with hardware transcoding via VAAPI on an AMD RX 580
  • aria2 — download manager for pulling ZIM files to the server from within the dashboard

The dashboard tiles are drag-and-resizable, and each one has a purpose: water, medical, maps, comms, food, repairs, services, and more. Click a card and you get a setup wizard + download button for the relevant offline content. Everything is surfaced through a single nginx reverse proxy so the browser only ever talks to one origin.

Wikipedia via Kiwix

Kiwix serves full offline copies of Wikipedia, WikiMed, iFixIt, and more — all from compressed .zim files on your local drive. Millions of articles, zero internet.

Offline Maps

The maps layer uses ProtoMaps + MapLibre GL JS, rendering the entire world from a single planet.pmtiles file. Street-level detail, no tiles server, no CDN, no internet.

Everything It Can Do

GRID Capabilities

The Stack

  • Frontend: React + Vite, react-grid-layout, deployed as a static build
  • Backend: All Docker containers managed via Compose Manager Plus on UNRAID
  • Proxy: nginx with a variable-based proxy_pass setup (needed to keep nginx from crashing when Kiwix isn’t running yet)
  • Hardware: i7-4790K, 16GB DDR3, AMD RX 580, 11TB storage array

The Gnarliest Bug

The nginx proxy_pass variable trick is worth mentioning. When you use a variable for the upstream (to avoid startup failures if the container is down), nginx silently drops the request path and query string if you include a trailing URI. So proxy_pass $kiwix/kiwix/ will send every request to /kiwix/ regardless of what the client actually asked for. The fix is just proxy_pass $kiwix; — no trailing path — and let nginx forward the full original URI as-is. Cost me a few hours.

What’s Live

The dashboard is running right now on my local network. Plex is working with hardware transcoding. The aria2 download manager is ready to pull ZIM files on demand. Ollama is up and waiting for a model pull.

Still on the list:

  • Pull the Ollama model and wire up the assistant tab fully
  • MapLibre viewer (once I get the planet.pmtiles downloaded — it’s a big one)
  • Docker socket API so I can start/stop containers from the dashboard
  • LoRa mesh comms (hardware not purchased yet)
  • Solar Pi for a fully off-grid companion node

Solar Pi Node

The Solar Pi is the go-bag version: Orange Pi 5 Plus (16GB RAM, RK3588 NPU), 100W flexible solar panel, Victron MPPT charge controller, 40Ah LiFePO4 battery, and a Waveshare SX1262 LoRa HAT — all packed into a Pelican 1450. About 4W idle, runs indefinitely in full sun. Hardware not purchased yet, but the design is fully specced out.

Why

Honestly, a mix of “this is fun to build” and genuine interest in resilience infrastructure. Having a system that keeps working when things go sideways — whether that’s a bad storm, a regional outage, or something worse — feels like a worthwhile thing to have. Plus I learned a lot about nginx, Docker networking, and offline content formats along the way.

The repo is up at gsswrk/grid if you want to poke at it.

This post is licensed under CC BY 4.0 by the author.
Trending Tags