Arms Room
Data map

What lives on the server now

Arms Room's personal collection storage has moved to the native iOS app. The web app still has account, billing, admin, shared catalog and stateless AI relay routes, but the old web armory, ammo, missions, friends, share and export surfaces are retired.

The route boundary is enforced in code and the retention boundary is enforced by migration: old personal collection rows are purged, and new writes to those endpoints return 410 Gone.

Your account

Email address

We can read it

Our database

Display name, @handle, profile photo and theme accent

Used for account/profile screens and owner/admin support. The retired friends surface is blocked from normal web use.

We can read it

Our database

Password

Stored as a scrypt hash. If you lose it, we reset it; we cannot look it up.

We cannot

Our database

Verification, login and password-reset codes

Codes are short-lived and single-use. The clear code exists when generated and when emailed, but the database stores only a hash.

Partly

Our database as hashes; email provider during delivery

Sessions, account status and owner/admin notes

This includes sign-in sessions, suspension state, plan grants and the reason an owner wrote for a manual account change.

We can read it

Our database

Google sign-in tokens

Only if you chose Continue with Google. Email/password sign-in does not involve Google.

We can read it

Our database

Plan, AI meter and Stripe customer/subscription ids

Enough to enforce plan limits and open Stripe's billing portal. Card numbers never touch our servers.

We can read it

Our database

Your collection

Current firearms, serials, ammo, photos, range trips and maintenance logs

The native app is the source of truth. Web inventory pages redirect to /local-only, and old personal collection APIs return 410 Gone.

We cannot

The iOS device's local store

Missions, ranks, reminders and local exports

Progress and backups are computed from the local store. The server-side reminder cron is retired.

We cannot

The iOS device

Temporary Sergeant Steel roster summary

The iOS app sends a device-built summary with a question. We do not write that summary or the chat transcript to our database.

Partly

One AI request

Scan-to-add image

The image is processed for the answer and is not stored by Arms Room.

Partly

One AI identification request

Shared firearm and accessory catalog

The catalog is reference data: make, model, caliber/type and related notes. This release anonymizes old submitter links while keeping the shared entries.

We can read it

Our database

Retired web collection rows from older releases

A migration clears old Postgres armory, ammo, share, friend, mission, reminder and page-view rows. The tables remain only so older code can compile while the routes are retired.

We cannot

Purged by migration

Usage, AI and billing

Web page-view analytics

/api/v1/track is a no-op and the browser beacon is no longer mounted. Historical rows are cleared by the retirement migration.

We cannot

Nowhere in our app database

IP address and browser metadata

Our app no longer writes a visitor hash to Postgres. Vercel and other infrastructure still process ordinary request metadata because that is how web hosting works.

Partly

Web host/runtime logs

Sergeant Steel message count

One monthly counter per account, used for plan limits. It is not a transcript.

We can read it

Our database

Card number

Checkout and card management are hosted by Stripe.

We cannot

Nowhere in Arms Room

Transactional emails

Sign-in codes, password resets, verification and deletion confirmations include your email address.

We can read it

Resend

Who can see what

Owner/admin dashboard

The owner can see account/admin tooling and the ship log. Normal users do not get the Admin nav item, and /admin returns 404 unless the signed-in email is authorized.

We can read it

Owner account only

Updates, pushes and ship log

Release/update panels were removed from the user dashboard and moved into the owner admin page.

We can read it

Owner/admin only

Other users

The web friends and public share surfaces are retired. Normal users can browse the shared catalog and manage their account; they cannot see another user's collection.

We cannot

Shared catalog only

Who else sees any of it

These are the only companies user data reaches from the live web/native flows.

Anthropic

Sergeant Steel

When you ask Sergeant Steel in the iOS app: your message plus a temporary roster summary built on the device. When you use scan-to-add: the photo you took. We do not write either one to our database.

Google

Sign in with Google

Only if you chose Continue with Google. They see that you signed in to Arms Room, and — because your profile picture is served from their servers — your browser fetches it from Google on every page you load, which shows them your IP address. Nothing about your collection ever reaches them. Sign in with an email and password instead and Google is not involved at all.

Resend

Email delivery

Your email address and transactional account emails such as sign-in codes, password resets and deletion confirmations.

Stripe

Billing

Your email, name and account id. Card details go directly to Stripe, not through us.

Supabase

Database hosting

Account, admin, billing, shared catalog and any historical retired web collection rows that have not been deleted yet.

Vercel

App hosting

Requests to the site, as any web host does.

What we never do

  • Sell your data or share it for advertising.
  • Run ad networks, tracking pixels, third-party analytics or session recorders.
  • Use the web app as a backup copy of a user's firearms, serial numbers, ammo, logs or photos.
  • Show updates, pushes or owner/admin controls to ordinary users.

What you control

Use the iOS export. Collection backups are made from the local device store, not from a server export endpoint.

Delete your account. Account deletion removes sessions, account-owned server rows and any historical collection rows that still exist for that account. Your current local iOS data remains on your device until you export or remove it there.

Check the boundary. The public local-only page names the retired surfaces, and this page changes in the same release if the storage model changes.

Something on this page looks wrong? Review your settings, or have the owner check the admin console.