← Back to Rival Spires

Rival Spires

Data & Storage

Current as of 15 September 2026

This page is a factual description of what the current game stores and how the application protects it. Rival Spires does not ask for an email address, real name, phone number, postal address, payment-card details, or precise location.

Storage overview

InformationWhere it is keptProtectionCurrent lifetime
Account password PostgreSQL database One-way hashed
Each password uses a random salt and Node.js scrypt. The original password is not stored and cannot be decrypted from the hash.
Until the account is deleted or the password is replaced.
Username and account dates PostgreSQL database Readable
Stored as ordinary database fields so the account can be found and displayed.
While the account exists.
Level, XP, virtual gold, unlocks, cosmetics, settings, achievements and monthly rewards PostgreSQL database Readable
Not encrypted field-by-field by the game.
While the account and related game records exist.
Rankings, match results, statistics, presets and tournament activity PostgreSQL database Readable
Not encrypted field-by-field by the game.
Account-owned ranking and preset records are removed when the account is deleted. Match and tournament history that must remain for other players is disconnected from the account and its displayed name is changed to “Deleted player”.
Friends, blocks and invitations Friend and block relationships are stored in PostgreSQL. Live invitations are handled by the running server. Readable Stored relationships remain until removed or the related account is deleted. Live invitations are temporary.
Account bans PostgreSQL database Readable
Stores whether a ban is temporary or permanent, the administrator’s reason, its expiry time, and the administrator account that applied it.
Until an administrator removes the ban, it expires, or the player account is deleted.
Bug reports and suggestions PostgreSQL database Readable
Stores the report type, subject, message, account display name, page context, submission time, and admin inbox status. Game administrators can read this content.
Retained for administrator review. If the player deletes the account, the account link is removed and the reporter name is changed to “Deleted player”.
Private messages PostgreSQL database Readable
Messages are private in the game interface but are not end-to-end encrypted. Database administrators can technically read the stored content.
Currently retained as conversation history until a related account is deleted.
World chat Running server memory only Temporary memory
Not written to the game database.
The latest 100 messages are replaced by newer messages and the buffer disappears when the server process restarts.
Login session token Browser cookie and PostgreSQL database Random but readable
A 32-byte random token is stored in the database. The browser cookie is marked HttpOnly and SameSite=Lax.
Normally expires after seven days. Revoked session records are retained for up to 30 days.
IP address used during login or registration attempts PostgreSQL rate-limit table Readable
Used as the rate-limit key to slow repeated authentication attempts.
Cleared after a successful attempt. An unsuccessful-attempt record can remain until it is reused or administratively removed.
Tournament password PostgreSQL database One-way hashed
Uses a random salt and scrypt, like account passwords.
While the password-protected tournament record exists or until the password is replaced or removed.
Live multiplayer state, connected-player presence and match chat Running server memory Temporary memory Exists only while needed by the running server or active match.

Encryption in transit

The production website is intended to use HTTPS and secure WebSockets so information is encrypted while travelling between the browser and game server. The Supabase database connection is intended to require TLS through the production DATABASE_URL. Transport encryption protects information while it moves across the network; it does not make readable database fields unreadable to an authorized database administrator.

Infrastructure

Persistent game data is stored in a Supabase-hosted PostgreSQL database. The application and temporary in-memory information are intended to run on a Hetzner-hosted server. The current game stylesheet also requests fonts from Google Fonts, so the browser connects to Google when retrieving those font files.

Account deletion

Players can permanently delete an account from Settings → Account after confirming the current password and username. Account-owned data, private messages, friends and saved settings are removed. Shared match and tournament history needed for the remaining players is anonymized as “Deleted player”.

Important distinction

Hashed means the original secret is not stored and the hash cannot simply be decrypted. Encrypted means information can be recovered with the correct key. Readable means the game stores the value in a form the server and an authorized database administrator can read. Temporary memory means the information is not intentionally written to the database and disappears when removed from memory or when the server restarts.