Map your home's WiFi coverage room by room. Start by picking a floor plan and taking a few measurements.
"This device" tests against this server (most accurate for your WiFi/LAN). Cloudflare tests your path to the wider internet via its nearest edge — useful for checking your connection beyond this network.
How many upload/download connections run at once against "This device". More streams saturate a fast link faster, but a small or shared host can only handle so many at a time — if results against your own server look spiky (sharp jumps and drops), a low PHP worker limit is a common cause; try 1 or 2. This has no effect on Cloudflare, which is built for high concurrency.
Server isn't set up yet — tap the mode badge at the top of the survey screen to configure it.
Hold the phone the same way at every point — same height, same orientation, away from your body — so differences in the map reflect the room, not how you're holding the phone.
Global — hosted on the public internet. Your ISP is the ceiling for throughput, but latency and jitter still map your WiFi coverage accurately.
LAN — a private address (192.168.*, 10.*). Measures the WiFi link itself; the most spatially sensitive mode.
Local — localhost. No network involved — calibration only, surveys can't be saved in this mode.
Browsers cannot read WiFi signal strength (RSSI) — no JavaScript API exposes it. This app measures throughput and latency instead, which in practice reflects more than RSSI alone: interference, channel congestion, and AP load. Any RSSI value shown was typed in manually.
On plain HTTP, screen-sleep prevention uses a fallback method and native sharing is unavailable — everything else works normally. HTTPS enables both.
If uploads are capped low, it's usually nginx's default client_max_body_size (1 MB). Add client_max_body_size 256M; to the site config and reload nginx.
Behind Cloudflare, free-tier plans cap uploads around 100 MB and may buffer responses — this app detects and reports that automatically.