Sensing
WiFi Atlas
At home the Wi-Fi either worked or it did not, and the only reading I had was a hunch. So I made the signal something you can walk through and look at.
- Year
- 2026
- Role
- Solo — iOS app, signal pipeline, map rendering
- Status
- In development

The problem
Parts of our apartment had Wi-Fi and parts did not, and I had no way to see where the boundary was. Every tool I could find gave me a number for where I was standing. I wanted to look at the problem, not read it.
WiFi Atlas measures connection quality continuously while you walk and paints the result into the space behind you in augmented reality — green for strong, yellow for fair, purple for no signal. Save the walk and it flattens into a top-down floor map: a coverage heatmap with the dead zones outlined and measured in real metres. Surveys never leave the device.
How it changed
Each version below exists because the one before it was wrong about something specific.
- v1
Read the radio directly
- Why
- The obvious measurement is RSSI — the actual radio signal strength of the connected network.
- Change
- Built `HotspotSignalSource` on `NEHotspotNetwork.fetchCurrent`, normalising raw signal strength to a 0–1 score that drives the colour ramp.
- Result
- It works, but it needs the Access WiFi Information entitlement, which needs a paid developer account, plus location permission before iOS will disclose the connected network at all. On a free account the app simply has nothing to draw. iOS also refuses to scan neighbouring access points at all, so 'where is my Wi-Fi weak' is answerable and 'am I clashing with my neighbour's channel' is not.
- v2
Measure the experience instead of the radio
- Why
- A survey tool that requires an entitlement most people cannot get is a survey tool nobody runs.
- Change
- Added `GatewaySignalSource`, which sends ICMP echoes to the router and derives a score from round-trip time and packet loss. No entitlement required. Both sources sit behind one `SignalSource` protocol, and `CompositeSignalSource` silently picks whichever currently works — promoting to the radio source mid-scan if permission is granted later, without restarting the walk.
- Result
- The app now runs on a free Apple ID. It also measures a subtly different and arguably more honest thing: experienced quality rather than radio strength. A room can show four bars and still be unusable, and the latency probe catches that where RSSI does not.

By the balcony — 99%, 8ms. 
Same walk, one wall further in — 53%, 64ms. The trail turning purple is the dead zone appearing in real time.
Where it landed
The fallback stopped being a fallback. Latency to the gateway is what a person actually feels, so shipping it as a first-class source made the map more useful, not less — and made the whole app installable by anyone with an iPhone and no developer account.
The parts that can be verified without hardware are covered by 155 tests: normalisation and the colour ramp, immutability of the survey model, storage round-trips, the source-fallback policy, IPv4 and subnet arithmetic, ICMP packet framing, and the map projection, rotation, IDW interpolation and coverage masking.

Built with
- Swift
- ARKit
- RealityKit
- ICMP / networking
- Swift Testing