Planning the Great Migration
A Jetson Orin Nano arrives and suddenly the Surface Pro isn't enough. Time to define what Project Olympus actually is.
A box arrived today. Inside: an NVIDIA Jetson Orin Nano Super. 1024 CUDA cores. 40 Tensor cores. A GPU that fits in your palm. And just like that, the entire plan needed rethinking.
The Hardware
There’s something about holding a single-board computer that makes your brain go sideways. You look at this tiny thing, smaller than a paperback, and cycle through everything it could be. Robot brain. Media server. Automation controller. AI inference engine. All of the above.
The Surface Pro 8 has been working fine. But it’s a general-purpose laptop pretending to be a server. No GPU compute. Thermal throttling under sustained load. Fan noise that sounds like a distant helicopter. It was always a stepping stone.
The Decision
First question: how to split responsibilities between the two machines.
Option A was clean separation. Surface handles AI and chat. Jetson handles media and compute. Architecturally tidy. Option B was consolidation. Everything moves to the Jetson. Surface becomes a thin client or gets shelved.
I started with A. It felt right. Each machine with a clear purpose, neither one a single point of failure. But the more I thought about it:
Two machines to maintain. Services communicating across a network boundary. The Surface has no GPU, so anything compute-heavy still needs the Jetson. And running both 24/7? The Jetson draws about 15 watts. The Surface draws 30-60W. Wasteful.
Option B won. One machine. One brain. One source of truth.
The Migration Package
Once that was decided, I went deep. Created a migration branch and built a complete package. Twelve files covering every aspect of the move.
Setup script for the Jetson. Docker compose for the full media stack on ARM64. The Secret Broker rewritten for Linux (Unix permissions instead of NTFS ACLs, same security model, wildly simpler implementation). Systemd services. Health checks. A secure credential transfer procedure. Post-migration validation. And a rollback plan, because I know myself. I’ll forget something critical at 2 AM and spend three hours debugging it.
The setup script alone handles system updates, Docker installation for ARM64, user and group setup, storage mount configuration, firewall rules, and swap configuration. Eight gigs of RAM needs help when you’re running nine containers.
# Swap. 8GB RAM needs help with 9 containers.
sudo fallocate -l 8G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
The broker rewrite was satisfying. The Windows version used NTFS ACLs and Windows-specific user management. The Linux version uses a dedicated system user, chmod 700 on the secrets directory, and that’s basically it. Same guarantees. A fraction of the complexity.
Naming Things
With the Jetson as the central brain, I needed a name for what this was becoming. It’s not just a media server. Not just an AI assistant. It’s a local-first home operating system.
I called it Project Olympus.
Zeus is the Jetson. Athena is the AI. The mythology gives me a naming convention more memorable than “server-01.” And honestly? It’s just more fun.
The Architecture
Four layers, bottom to top.
The Action Layer is where things happen. Docker containers, shell commands, API calls, eventually hardware control. The Intelligence Layer is the thinking engine. LLM plus web search and reasoning. The Context Layer is what makes Athena useful instead of generic. Memory, skills, identity, daily logs. The Interface Layer is how humans interact. Today that’s Telegram. Tomorrow it could be voice, a web dashboard, physical buttons.
Three tiers of hardware, once everything’s built out.
Zeus, the Jetson, as the brain. AI, media, compute. Raspberry Pi for mid-tier stuff. Network services, DNS, lightweight monitoring, maybe Home Assistant. And at the edge, an ESP32 mesh. Sensors everywhere. Temperature, humidity, motion, light levels. Tiny microcontrollers reporting back to Zeus. The nervous system of the house.
The ESP32 layer is what excites me most. Ambient intelligence. A house that understands its environment without cameras or microphones. Temperature gradients that tell you which windows are open. Motion patterns that know your routine. All processed locally. All private.
But that’s future-me’s problem. Present-me needs to get Docker containers migrated without losing any data.
The Checklist
I wrote a 47-step migration procedure. Not because I love bureaucracy. Because I know that at step 23, something will go sideways, and past-me will have left a breadcrumb that saves three hours of debugging.
Pre-migration backups. Jetson initial setup. Docker deployment. Broker deployment and verification. Service-by-service validation. Network cutover. Post-migration monitoring. Rollback procedure.
The rollback plan is simple. The Surface stays intact until the Jetson is fully validated. If everything goes sideways, flip back and try again. No heroics.
What Crystallized
Planning a migration is half the battle. The temptation is to just start moving stuff and fix problems as they pop up. That works for a personal project. But Olympus has real users now. My family watches Jellyfin. Downtime actually matters.
The other thing: naming the project gave it structure. “Project Olympus” sounds dramatic, sure. But Zeus, Athena, the four layers. These aren’t just labels. They’re design constraints. When I ask “where does this feature live?”, the architecture answers the question before I finish asking.
Tomorrow the Jetson gets set up for real. Zeus awakens.