What moved, and what did not
The whole estate moved in one pass — twenty-two containers — sixteen application services over six pieces of shared infrastructure — and a 1.25 GB PostgreSQL database restored logically rather than copied byte for byte, so that a collation difference could not quietly reorder a text index.
Nothing was rewritten to get here. The platform is an Elixir/OTP umbrella, and the same images that ran on the old host run on the new one. What changed is everything around them: the orchestrator was replaced with plain Docker Compose behind Caddy, and the two routing services that no application had ever called were switched off. Memory use fell from 9.8 GB to 3.8 GB.
- Services running
- 22 containers across 20 hostnames
- Database
- PostgreSQL 18.6 with pgvector 0.8.6, 1,255 MB
- Edge
- Caddy, certificates issued per host by Let’s Encrypt
- Runtime
- Elixir/OTP, one release, no per-client code
- Memory in use
- 3.8 GB of 11.9 GB
- Disk in use
- 3.3 GB of 98 GB
Where it runs
One instance, one availability domain, in Oracle’s Johannesburg region. That is a deliberate starting point rather than a target architecture: the platform is small enough that a second machine would have been cost without resilience until the backup and failover work now in progress is finished.
- Region
- af-johannesburg-1
- Availability domain
- ZLIw:AF-JOHANNESBURG-1-AD-1
- Shape
- VM.Standard.E5.Flex
- Allocation
- 4 OCPU, 12 GB memory, 100 GB block storage
- Address
- Reserved public IP, 84.8.134.240
Johannesburg is not Zambia, and this page will not pretend otherwise. It is 1,203 km from Lusaka instead of 12,163, on a continent rather than across an ocean, and it is the closest Oracle region to the people this platform serves. Closing the remaining distance is one of the questions below.
State stays, compute travels.
That is the shorthand for how the platform is meant to sit across two places: steady-state and data-sensitive workloads remain under our own control, while elastic compute and AI inference run on Oracle Cloud Infrastructure. It came out of the OCI Executive Roundtable in Lusaka in July 2026 and Oracle’s account team endorsed the framing in writing.
It is worth being precise about one thing: hybrid is the intended end state, not a stage on the way to moving everything. The identifier-masking layer in front of our models is what makes it workable — most inference is not residency-constrained once identifiers have been stripped, and only the alias table has to stay put.
Still open
A partnership with Oracle is being pursued, not concluded. Three questions were invited at the roundtable and none of them has been answered yet. They are listed here because a page that only reported progress would not be worth reading.
- GPU options at our scale. The research workload — measuring an economy at transaction granularity, consented and anonymised — is the part that needs accelerators, and it is a long way from the shapes a large enterprise would be quoted.
- Connectivity from Lusaka to Oracle Cloud Infrastructure. Today’s 149 ms is the public internet doing its best. What a dedicated path would cost, and whether one is available at this size, is unknown to us.
- Startup and partner programmes. We are self-funded and revenue-generating, which puts us outside the usual shape of both the startup track and the enterprise track.