Privacy Policy

Last updated 7 October 2026

Some of what Atrium holds is financial data, so we keep it minimal and private. This policy explains what Atrium and its tools store, why, and what they never do. Atrium is a small personal project; its operator is the data controller.

What we store

Account identity from your sign-in provider (Google or Discord): your name, email, and account id, used only to sign you in and keep your data separate.

If you connect a mailbox: an encrypted Microsoft access/refresh token so sync can read your mail, and a record of which emails have already been processed so nothing is ingested twice.

Portfolio data parsed from your broker documents: transactions, holdings, and point-in-time value snapshots.

Your settings, and — if you set one — a one-way hash of your unlock PIN (never the PIN itself).

Train searches are not stored against your account. Recent results are cached briefly in server memory (minutes) so repeated searches don't hit SRT again.

If you add a Discord webhook: its URL, encrypted, plus its name for display. If you watch a train: the route, date, train number, what you're watching for, and the latest check result — removed when you delete the watch.

How we use it

Only to render your own portfolio and keep it in sync. Your data is scoped to your account; one user can never read or change another user's data.

Where it lives and how it's protected

Data is stored in the app's Postgres database. Sensitive values — mailbox tokens and your stored broker document password — are encrypted at rest with AES-256-GCM.

Decryption and parsing happen server-side only. A decrypted PDF exists only transiently in memory while it is being read and is never saved. Document passwords, OAuth tokens, and document contents are never sent to your browser or logged.

What we never do

We never sell your data and never send your portfolio data or document contents to any third party. Outbound lookups carry only what each needs: a currency exchange rate (a date and a currency pair such as USD→THB), Binance (your own read-only API key, to read your balances), SRT D-Ticket (the stations and date you search, from an anonymous session — never your name, email, or anything about your portfolio), and Discord (seat-watch alerts to your own webhook: the train, route, date and availability — nothing about your portfolio).

Third parties involved

Sign-in: Google or Discord. Mailbox access: Microsoft (Graph, read-only mail scope). Exchange balances: Binance (only if you connect it). Currency rates: a public exchange-rate service. Train lookups: State Railway of Thailand (D-Ticket). Seat-watch alerts: Discord (only if you add a webhook). Hosting: the infrastructure this app runs on. Usage and performance stats: Vercel Web Analytics and Speed Insights — anonymous page views and page-load timings, with the page path only (no query string), no cookies, and nothing from your portfolio. Each processes only what its function requires.

Retention and deletion

Your data is kept while your account is active. You can disconnect your mailbox at any time, which stops further sync and removes the stored mailbox tokens. To have your account and data removed, contact the site operator.

Your rights

You can view and export your own transaction data from within the app, and request access, correction, or deletion of your personal data by contacting the site operator.

Contact

For any privacy question or request, contact the site operator at pawaret.m@outlook.com.