Enter your access key to continue. It is stored only in this browser and sent as a header on each request.
Same Brains · cloud dashboard
Private · key-gated · reads are free (no cost impact)
loading…
Plays per day (last 30 days)
Funnel — last 24 hours
Events by window
Event
1h
24h
7d
30d
The first tables below count finished matches (plays, last 30 days). The "all visitors" and "conversion" tables further down count everyone who arrived — including ad traffic that never finished a game — so paid/cold traffic stays visible. Geo is the free Cloudflare request geo; no IP stored.
Top countries
Top regions
Top cities
Games played (by mode)
Games played by country (last 30 days)
Country
Top games
Games
Finished matches grouped by the free Cloudflare request country, with each country's most-played modes. No IP stored; rides the existing beacon.
All visitors by country (any event)
Distinct visitors per country across all events (not just finishers). This is where cold ad traffic shows up — if it's missing here, the beacon truly isn't reaching us; if it's here but absent from the tables above, those people just didn't finish a match.
Conversion funnel by country (last 24h)
Country
Created
Joined
Finished
Finish rate
create → join → finish per country. A country with lots of Created but almost no Joined means solo visitors with no second player (typical of cold paid traffic to a 2-player game), not a broken game. "Finish rate" is finished ÷ created.
Conversion by ad source (last 24h)
Source (utm / gclid)
Created
Joined
Finished
Finish rate
Captured client-side from utm_* / Google's gclid (shown as google/cpc). Judge paid campaigns on finished games, not clicks. Empty if your ad URLs aren't tagged.
Look up a player
Most active players (30d) — click to inspect
Name
Country
Region
City
Plays
Last seen
List comes from Analytics Engine (no D1 scan). Names + "played with" load when you click a row.
Estimated monthly cost (from measured traffic)
Full component model (prices re-verified Jun 2026). Since Jan 7, 2026 Cloudflare bills
SQLite-backed Durable Object storage in three parts: rows written ($1/M after 50M free) —
every put(), setAlarm() and delete — plus rows read ($0.001/M
after 25B free) and stored data ($0.20/GB-mo after 5 GB-mo free). At scale the row
writes, not requests, are the dominant line item; reads are effectively free and stored data
stays inside the free tier because room DOs are reaped after each match. The model also counts DO
requests (WS frames + alarm invocations), DO duration, Worker API requests (beacons / room create /
stats), D1 stat upserts, and TURN egress. Analytics Engine is not billed yet (the beacons
and every dashboard read are $0 today); the table shows its announced future price for planning, but
it adds $0 to the live total — so this dashboard has no cost impact.
Cost breakdown (measured month)
Component
Unit price
Free / mo
Usage / mo
Est. cost
Projection by scale
MAU
Matches/mo
DO requests
DO rows written
Est. cost/mo
per 1k MAU
Per-match assumptions (tune in source if architecture changes)
Health checks computed from the data already loaded — viewing them costs nothing. Some infra signals (TURN egress, D1 size, error rate) can't be read here; set up free Cloudflare Notifications for those (see below).
Notifications → "Workers" CPU/error alerts on the samebrains Worker.
TURN egress
Watch Realtime/TURN usage vs the 1,000 GB/mo free tier in the Cloudflare dashboard.
D1
Stays flat (bounded rows). No alert needed; check size occasionally.
Players whose first finished match created a D1 row. Rolling windows: last 24h · 7d · 30d.
New users by country
Most recent signups — click to inspect
Name
Country
Region
City
Signed up
Names from D1; country/region/city from Analytics Engine (same source as the Players tab).
Danger zone
Clear all stored data
Permanently deletes every bounded D1 row: players (users + names + lifetime
stats), pairs (who-played-with / match history), push subscriptions, and
account links. This cannot be undone.
Note: the funnel/geography logs live in Cloudflare Analytics Engine, which is
append-only and has no delete API — those events expire on their own after the
dataset retention window and cannot be wiped from here.
Reads come free from Cloudflare Analytics Engine + bounded D1 point lookups, so refreshing often has no cost impact.
"Live" = distinct players active in the last 5 minutes; unique-player counts are approximate at very high volume due to sampling.