← All work

Everyday Automation

WiFi Atlas

Walk your home and see Wi-Fi strength painted onto the room in AR, then as a floor map.

Year
2026
Role
Solo — iOS app, signal pipeline, map rendering
Status
In development
WiFi Atlas — walk through your room and the app maps signal strength in AR. A phone shows 53% Fair at 64ms ping, with the trail of spheres turning from green to purple through a doorway
Walk the room and the signal is painted into the space behind you. Green to purple is excellent to no signal.

TL;DR

WiFi Atlas turns Wi-Fi into something you can see. Walk through your home with an iPhone and the signal is painted into the room in AR — green where it is strong, purple where it drops. Save the walk and it becomes a floor map with the dead zones marked in real metres.

What can you do with it?

Walk, see where the Wi-Fi works, and keep a map of it.

  • See the signal in AR — walk around and coloured dots appear in the space behind you, from green to purple.
  • Get a floor map — save the walk and it flattens into a top-down heatmap, with the weakest spot and the dead zones marked.
  • Measure in real metres — the map is to scale, so you know how big the weak area actually is.
  • Export it — share the map as PNG or PDF, or the raw readings as CSV.
AR view by the balcony: 99% Excellent, ping 8ms, 13 points, a trail of green spheres
By the balcony — 99%, 8 ms.
AR view in the hallway: 53% Fair, ping 64ms, 40 points, green spheres turning purple
One wall further in — 53%, 64 ms. The trail turns purple as the dead zone appears.

Why it matters

Walking around a home, the Wi-Fi works in some places and drops in others — and it is hard to tell where, or to remember it later.

  • Every Wi-Fi tool gives you a number for where you are standing — not a picture of the whole home.
  • Turned into an image, where the Wi-Fi works is visible at a glance, and it stays on the map instead of in your memory.
  • It measures what a person actually feels — delay and dropped packets — not only radio strength. A room can show full bars and still be unusable.

How it works

Three steps, from a walk to a map.

  1. Measure while you walk — the app keeps pinging the router and turns delay and packet loss into a 0–100% score.
  2. Pin each reading in space — ARKit tracks where the phone is, so every reading stays at the spot it was taken.
  3. Flatten into a floor map — dropping the height leaves the floor plane. Gaps between readings are filled in, and rooms nobody walked into stay blank instead of being guessed.

How was it tested, and how does it perform?

Wi-Fi changes from second to second, even standing still. So one ping never decides a spot.

  • Measure continuously — the app checks the connection about three times a second while you walk.
  • Combine per spot — every reading taken on the way to a spot, about every 35 cm, becomes one value: the median reply time, lowered by the share of pings that went unanswered.
What changed when readings were combined per spot instead of over the last eight pings.
SituationLast eight pingsCombined per spot
One dropped packet in a good hallwayMarked as a dead spot (0%)Absorbed by the good readings around it
Just out of a dead zone, 5 ms repliesStill scored 75%Scored as good
A real dead zone, every ping fails0%Still 0%

Applications

  • Where to put a Wi-Fi extender — the map shows where coverage fades, so you can see where an extender should go.
  • Choosing where to work — find the spot with the steadiest connection for a desk.
  • Checking a new home or office — survey the space before moving in.
A saved survey flattened to a top-down floor map: the walked path over a green-to-purple heatmap, strongest near the start and fading to yellow and purple at the far end
Strong near the router, fading at the far end of the walk — that end is where an extender belongs.

Future directions

  • Accurate maps with LiDAR — the map now comes from the camera alone, so its shape is not exact. LiDAR was tried and set aside so every phone behaved the same; bringing it back where available would sharpen the map.
  • Across floors — going down a floor breaks the map, and two storeys in one walk stack on top of each other from above.
  • Walls in AR — the camera does not know where walls are, so dots behind a wall show through it in the AR view.
Behind the project — how it started and how it changed

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.

  1. 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.
  2. 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.
    AR view by the balcony: 99% Excellent, ping 8ms, 13 points, a trail of green spheres
    By the balcony — 99%, 8ms.
    AR view in the hallway: 53% Fair, ping 64ms, 40 points, green spheres turning purple
    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.

A saved survey flattened to a top-down floor map: the walked path over a green-to-purple heatmap, 86% average, 1% weak area, 27.9 square metres, 3.4% loss, 72 points
The same walk, saved and flattened. 27.9 m² surveyed, 86% average, and the 1% that is unusable marked where it actually is.

Built with

  • Swift
  • ARKit
  • RealityKit
  • ICMP / networking
  • Swift Testing