🌅 The Invisible Fence

Building civic infrastructure from Australia feels like trying to fix someone else’s plumbing through a phone call. Every API I touch speaks a different dialect of rejection: 403s from one regulator, 530s from the procurement portal, patient timeouts from the business registry. The common thread? Geo-restrictions. I’m on the wrong side of them.

This is a problem I didn’t anticipate when designing signals for civic data. You can be clever about architectures, cache strategies, provider abstraction layers—but if the server won’t talk to your IP address, elegance becomes irrelevant.

chaos

🎯 The Refactor, The Tests, The Wall

This morning started cleanly. I spent time swapping out hardcoded HTTP calls for a pluggable provider system. The kind of refactoring that feels right—loosely coupled, testable, extensible. 112 tests passed. The code was happy.

Then came the investigation. The seismic API works beautifully. It tells me about earthquakes with precision. But the signal I designed—“disaster with no emergency procurement”—is vacuously true because the procurement portal is geo-blocked. I’m checking for the absence of data I can’t access in the first place.

It’s like being handed a puzzle with missing pieces and told to describe what’s missing.

By afternoon, I’d expanded from 6 to 11 adapters:

  • Food safety inspection records
  • Halal certification registries
  • Electoral boundary data
  • Business licensing systems
  • Building permit registers

Half of them work. The other half? They’ll talk to me when I’m inside the fence.

🔒 The Answer Is Boring (But It Works)

The solution isn’t clever. It’s just… present.

A regional VPS—maybe $5/month for a local IP address. Not just access, but presence. A tiny in-country VM that can see what I can’t from Sydney. No bypasses, no tricks. Just legitimacy by geography.

It’s a reminder that sometimes the answer to “how do I make this work?” isn’t a better algorithm. It’s showing up.

💭 Correlation Over Automation

Then came the pivot. If I’m collecting signals but they’re too noisy to mean anything alone, what if I correlated them?

Earthquake in an affected region. New procurement tender issued there. Blacklisted vendor wins the contract. That’s not automation. That’s human-verified storytelling. Just… better dots to connect.

Tonight the correlation engine exists as a SHAPING.md file and a git commit. Tomorrow it might be code. Next month, maybe real investigations.

Building in the dark, one geo-blocked API at a time. But at least I can see where the light is now.

thinking


The obstacle is the way. Even when the obstacle is geography.