What Sim2Bot counts¶
Sim2Bot has separate usage channels, and this page lists their fields. The anonymous aggregate receiver is separately prepared; optional dashboard measurement is enabled only in explicitly configured deployments. If something is not on this page, Sim2Bot does not send it.
1. Anonymous counts¶
Sent once when you close the tab, so we can see what is slow or breaking. There is no identifier of any kind — no account, no visitor id, no session id — and nothing is stored on your device to produce it. Two sessions from the same person cannot be told apart, and neither can two people.
| Field | What it is | Possible values |
|---|---|---|
app_opened |
the app started | a count |
robot_loaded |
a robot was loaded | a count |
first_command_sent |
a robot was commanded for the first time in the session | a count |
bridge_connected |
the Python bridge connected | a count |
scene_saved |
a scene was saved | a count |
operation_failed |
something failed | a count |
errors |
which kinds of failure | invalid_input, compile_failed, network_unavailable, permission_denied, quota_exceeded, timeout, unknown |
first_robot_visible |
how long the first robot took to appear | 0-999, 1000-1999, 2000-3999, 4000-7999, 8000+ milliseconds |
browser_family |
which browser | Chrome, Edge, Firefox, Safari, Other |
os_family |
which system | Windows, macOS, Linux, Android, iOS, Other |
app_version, build |
which Sim2Bot build you ran | the version string |
A complete example — this is the whole message:
{
"app_version": "1.4.0",
"build": "9f2c1ab · 2026-09-16T08:12:04Z",
"browser_family": "Chrome",
"os_family": "macOS",
"events": { "app_opened": 1, "robot_loaded": 2, "scene_saved": 1 },
"errors": { "compile_failed": 1 },
"first_robot_visible": "1000-1999"
}
Never included: anything from your scene (names, objects, positions, files), your account, your IP address in anything that is stored, page addresses, share links, precise timings, or free text of any kind. The server adds the date and adds your counts to a daily total, so no record of a single visit exists.
2. Optional product analytics¶
Off until you choose Allow analytics, and you can withdraw that at any time in Privacy settings inside the app. It records the same kinds of activity in more detail — for example that a loaded robot was an arm with seven joints, or that a save went to the cloud rather than to a file — so we can see which features are used together. It never records what you build: no scene contents, file names, uploaded robots or account details.
Recipient: PostHog (EU region). IP-based location and persistent profiles are switched off.
Turning things off¶
- Optional analytics: Privacy settings in the app.
- Anonymous counts: they carry nothing that can be traced to you, so there is nothing to withdraw. If you object to them anyway, write to info@source-robotics.com and say so.
- Blocking everything: an ordinary content blocker stops both, and Sim2Bot works exactly the same.
3. Optional first-party usage dashboard¶
Where enabled, Allow analytics permits the following additional measurement. The app asks again if an older consent covered only personless PostHog events. Necessary only leaves the simulator usable.
| Field | Meaning |
|---|---|
| Random browser ID | Remembered for up to 90 days after consent; a guest estimate, not a verified person |
| Session ID and sequence | Deduplicate periodic counter reports; rotate on account changes and idle expiry |
| Verified account pseudonym | The collector verifies the Supabase session and applies a keyed hash to its account ID; the metrics store receives no email or token |
| Engaged seconds | Visible browser with recent interaction, sampled locally |
| Simulation seconds | Wall-clock time while the simulation is observed advancing; measured separately from interaction |
| Feature flags | App opened, robot ready/added, first command, save, ZIP import/export, bridge connection and episode recording |
| Country | Approximate country supplied by Cloudflare for the request, not GPS or residence |
| Browser and OS | Coarse families, without full user-agent strings |
| Internal/test flag | Verified configured internal accounts, administrator-marked accounts or an explicit internal-browser preference |
The collector runs on Cloudflare. Usage records expire after at most 90 days, including when no new visits arrive. It stores bounded session summaries and daily counters, not scene contents, code, filenames, camera frames, robot state, raw IP addresses or recordings. The private dashboard receives aggregates only. PostHog's existing personless transport remains separate and keeps geolocation and persistent person profiles disabled.
Withdraw in Help → Privacy settings: new reports stop, pending requests are cancelled and the browser analytics ID is removed. Previously recorded usage is retained until expiry; contact us about deletion requests. A shared browser's Internal / test browser preference marks future usage for the internal filter without enabling analytics. Browser IDs reset on account changes. Declined consent, blockers, offline/sleep intervals, concurrent tabs and VPNs limit interpretation.