How this site is built
Global IP Map shows, live, where its visitors connect from. Here is what sits behind it, for those who care about the mechanics: no server to maintain, a single "room" where everyone meets, a hand-drawn globe, and no address kept.
No server to maintain
The site runs on Cloudflare, on its Workers platform. The page itself (HTML, styles, scripts) is a static file served from Cloudflare's network without going through our program: it stays available even when everything else stops.
The living part is a real-time connection (a WebSocket) between your browser and a single object, a "Durable Object" we call the World. It receives every connection, counts the points, broadcasts arrivals, departures and chat phrases. There is only one World: that is what makes counting consistent. When nothing happens, it goes to sleep; connections stay open while it sleeps thanks to WebSocket hibernation (Cloudflare documentation).
Where your position comes from
Cloudflare attaches to every request the country, the region, an approximate position, the provider and its network number (the request.cf field). We have no geolocation database to buy or keep up to date. Before anything is displayed, the position is rounded to half a degree, about 50 km, and only the region is named, never the city.
The globe
The globe uses no 3D library. The continents are a grid of dots, one every 1.2° or so, computed once from the Natural Earth outlines (public domain). On every frame, the browser projects those dots onto a disc (an orthographic projection) and draws them on a 2D canvas. Phones drove that choice: the first version, with a 3D library, scored 26 on Lighthouse's mobile performance test; this one scores 98.
One point per day and per address, without keeping the address
Each address earns its country one point per day, after ten seconds on the page. To recognise an address that has already counted without storing it, we keep a fingerprint: an HMAC-SHA-256 of the day and the address, computed with a secret key kept outside the database. Without the key, the fingerprint cannot be traced back to an address. Fingerprints are erased at midnight UTC. Over IPv6, the fingerprint covers the /64 block, the minimum a provider assigns to a subscriber (RFC 6177): address by address, a single subscriber could score thousands of points.
Free, within limits
The site fits in Cloudflare's free plan: 100,000 requests a day, reset at midnight UTC (limits). Everything is written to use as little as possible: counters are written in batches, a filtered bot costs no write at all, a single alarm per hour wakes the World. If the quota is ever exceeded, the live feed stops until midnight UTC and the page says so; the page itself keeps being served.
What we do not do
No cookie, no advertising tracker, no account to create, no free text in the chat: reactions and ready-made phrases, which everyone reads in their own language. The code is TypeScript end to end, and the rules of the game are written once, shared by the server and the demo.
Read next
- How many bots connect here?
Part of a website's traffic is not human. How Global IP Map tells bots from visitors, what the number at the top of the map counts, and what it does not.
- What is an IP address?
What your IP address says about you and what it does not, the difference between IPv4 and IPv6, between public and private addresses, and how much geolocation is worth.