Last updated: 5 May 2026
This page explains what StarStats collects about you, why, who we share it with, how long we keep it, and the rights you have over it under the UK / EU General Data Protection Regulation (GDPR). Plain English wherever possible — if anything is unclear, send a Comm-Link to dojo@thecodesaiyan.io.
StarStats is operated as a personal hobby project. The data controller for the purposes of GDPR is the project maintainer, contactable at dojo@thecodesaiyan.io. We do not have a designated Data Protection Officer because we are below the threshold that mandates one; the contact Comm-Link above reaches a real person.
We only collect what we need to run the service. Nothing is sold to third parties, used for advertising, or shared with analytics platforms.
Game.log. Used to tag the events you ingest so we can show your stats and not someone else's. Lawful basis: contract performance.starstats_session): HttpOnly, Secure (in production), SameSite=Lax, 1-hour TTL. Holds your authentication token. Strictly necessary; cannot be disabled while you are signed in. No consent banner is required for strictly-necessary cookies under ePrivacy/PECR.The list below is intentionally short. Every sub-processor here is either self-hosted on the same infrastructure as StarStats itself or strictly necessary for the service to function:
GET against https://robertsspaceindustries.com/citizens/<your-handle> to look for that code in the public bio. We send only a generic User-Agent identifying StarStats and the page version; no cookie, no session token, no account Comm-Link. Once we confirm the code is in your bio we delete it from our row, and we do not re-fetch the page outside of an explicit verification attempt by you. The verification flow is optional but is required before you can publish a public profile or share with an org. Once your handle is verified, you can also ask us to snapshot your public RSI citizen profile by pressing Refresh now in Settings. This is a user-initiated, on-demand fetch — never a continuous background poll — and is rate-limited to one fetch per hour per user. The request goes to the same URL (https://robertsspaceindustries.com/citizens/<your-handle>) with the same generic User-Agent; no cookie, no session token, no account Comm-Link. From the page we extract your display name, enlistment date, primary location (city / region / country, as RSI displays it), badges (name and image URL), bio text, and the one-line summary of your primary org. All of this is publicly visible on RSI's site to anyone visiting your citizen page — we are not scraping anything that requires login. We keep one row per snapshot so you can see how your profile has changed over time; you can request deletion through the normal account-deletion flow, at which point snapshots are pseudonymised in the same way as game events.https://api.star-citizen.wiki is a community-run, MIT-licensed reference for in-game ship and vehicle metadata — it is not operated by Roberts Space Industries. We use it to translate the internal class names that appear in your Game.log (e.g. AEGS_Avenger_Stalker) into player-facing names ("Aegis Avenger Stalker") so the dashboard can display events legibly. The exchange is server-to-server and one-directional: a scheduled task on the StarStats server fetches the reference catalogue once a day, sending only a generic User-Agent identifying StarStats — no user data, no Comm-Link, no RSI handle, no event payload, and no IP-on-behalf-of-the-user. The request is never made from your browser. The cached data is keyed by ship class name and is never linked to any user.We do not use Google Analytics, Meta pixels, advertising networks, or any third-party tracker. We do not embed third-party iframes that could observe your usage.
Our infrastructure is hosted within the EEA. We do not transfer your data outside the EEA except where unavoidable for transactional Comm-Link delivery (e.g., recipient mailservers operated by mail providers who may sit in other jurisdictions). If you have a specific concern about a mail provider, contact us and we will tell you which SMTP relay is in use at that time.
Under GDPR you have the following rights. Most can be exercised directly from the Settings page; for the remainder, send a Comm-Link to dojo@thecodesaiyan.io and we will respond within 30 days.
StarStats is not directed at children under 13 (under 16 in some EU jurisdictions). We do not knowingly collect data from anyone under that age. If you believe a child has created an account, contact us and we will remove it.
We do not perform automated decision-making or profiling that produces legal or similarly significant effects on you. Stats and timelines are descriptive aggregations of events you uploaded — no scoring, ranking against other users, or eligibility decisions are made.
Passwords are hashed with Argon2id. Sessions are HttpOnly + Secure cookies with a 1-hour TTL. The API uses RS256 JWTs signed by a key generated on the server. All ingress is served over HTTPS with HSTS. Database connections require TLS in our production deployment. Access to the deployment's underlying infrastructure is limited to the project maintainer.
Two-factor authentication (optional). If you enable it, we store your TOTP shared secret encrypted with AES-256-GCM under a key held in a file outside the database, with a fresh nonce per encryption. Recovery codes are stored only as Argon2 hashes — we can verify a code you give us but cannot read it back. Disabling 2FA wipes both the secret and the recovery-code rows.
Magic-link and 2FA flows use single-use, short-lived interim tokens (15 minutes for magic links, 5 minutes for the post-password 2FA token); a leaked link or interim token without the matching second factor is useless on its own. Failed sign-in attempts are timing-equalised to avoid revealing whether a Comm-Link maps to an account.
If we ever discover a personal-data breach that is likely to result in a risk to your rights and freedoms, we will notify you and the relevant supervisory authority within 72 hours of becoming aware, in line with Art. 33 / 34.
When we change this policy in a way that affects you (new sub-processor, new category of data, new retention period) we update the "Last updated" date at the top and, for material changes, post a notice on the dashboard for existing users. Trivial wording fixes are not announced.