Privacy policyUpdated 5 Mar 2026

The short version: it holds what you type, and nothing else.

No exchange keys, no ad trackers, no analytics, nothing sold on. Everything below is just the detail of that.

Never asked for

Exchange or broker API keys. Trades are typed in by hand, so there is nothing to leak and nothing to revoke.

Never collected

Analytics, advertising identifiers, behavioural profiles. There is no tracking script on this site.

Never sold

Your trades, your email, your figures. The project is free because it costs almost nothing to run, not because you are the product.

01 - What you give it

An email address and a password, or a Google account if you sign in that way. A display name, if you set one. And the trades and transactions you record: asset, direction, leverage, prices, amounts, dates, notes and subtags.

That is the whole list. There is no import, no bank connection and no exchange integration, so nothing arrives here that you did not type.

02 - What it stores

In a Postgres database, under your account id:

profilesDisplay name and avatar
walletsThe names you give your books
tradesOpen and closed positions and their figures
transactionsDeposits, withdrawals and the profit or loss entries a closed trade writes
goalsBalance and P&L targets
user_settingsTheme, default leverage, MMR, direction and currency
auth tablesYour account record, sessions, linked sign-in providers and email-verification tokens
03 - Who can read it

You. Every request is authenticated on the server before it touches data, and every query is scoped to your account id - the browser never talks to the database directly. The person who runs the service can technically reach the database, as with any hosted app; nobody reads your rows as a matter of course, and no third party is given access to them.

03b - What is encrypted, and what is not

Stated plainly, because it would be easy to imply more than is true:

In transitEncrypted. Every request runs over HTTPS.
At restEncrypted by the database host at the storage layer, which protects against a stolen disk.
Your passwordHashed, not encrypted - it cannot be read or recovered by anyone, including whoever runs this service.
Your trades and notesNOT encrypted with a key only you hold. They are ordinary rows, so the operator can technically read them. Nobody does as a matter of course, and no third party is given access.

End-to-end encryption - where the server holds only ciphertext it cannot read - is deliberately not used here. It would make it impossible to calculate your P&L, win rate, recovery or chart on the server, and a forgotten password would mean the data was gone for good, with no reset possible. If that trade-off matters more to you than those features, this is the wrong tool, and you should know that before you type anything in.

04 - Who it passes through

Five providers, each doing one job:

NeonHosts the Postgres database - so it holds everything in the table above
VercelServes the app and sees ordinary request logs (IP address, user agent, path)
GoogleOnly if you choose Google sign-in, and only to confirm who you are
ResendSends exactly two emails - address verification and password reset. No newsletters
SentryReceives error reports when something breaks, so it can be fixed
05 - Cookies

A session cookie, set when you sign in, so the server knows it is you on the next request - plus the short-lived ones the sign-in library uses to complete a Google handshake. No analytics or advertising cookies, because there is no analytics. Your theme choice is stored on your account rather than in the browser, which is why it follows you to another device.

06 - Passwords

Handled by the authentication library, never stored in a readable form. Sign-up requires at least twelve characters and refuses any password found in a known public breach. That check sends only the first five characters of the password's SHA-1 hash to the breach service, which answers with every hash sharing that prefix; the comparison happens here, so neither your password nor its full hash ever leaves the server. If the service is unreachable, sign-up still works.

07 - Limits that protect the account

Five sign-in attempts per five minutes, and five sign-ups, reset requests or resets per hour, counted in the database rather than per server - so the limit holds however the app is scaled. A new address must be verified by email before it can sign in at all.

Counting them means briefly storing the IP address a request came from, against the endpoint it hit. That is the only place an IP is kept, it is never linked to your account, and it is deleted automatically once it is older than the longest limit window - so it lives hours, not indefinitely. Deleting your account does not remove these rows, because they were never attached to it in the first place; they age out on their own.

08 - What you can do about it
Take it with you

Export every trade and transaction to .xlsx from Settings, any time, with the wallet and subtags on each row.

Delete all of it

Deleting the account removes the profile, wallets, trades, transactions, goals, settings, sessions and the linked sign-in providers, in the same operation. No dormant copy is kept. The only things that outlive it are the short-lived rows in §07, which are not attached to your account and age out within hours.

09 - Changes, and who to ask

If this policy changes, the date at the top changes with it. Anything unclear, or a request about your data: reply to either of the two emails the app sends, and it reaches the person who runs it.

Draft for review. This describes what the code actually does - it is not legal advice, and if you ever take payments or add analytics it will need revisiting.