VEEMAN handles a sensitive thing — your trading track record — so isolation and authentication are built in from the ground up. This page summarises the posture; for the data-protection view see Your data & privacy.
Identity is handled by Supabase Auth (email/password and Google sign-in). Every API request carries a signed JWT, which the backend verifies on each call — by shared secret (HS256) or by Supabase's rotating public keys (JWKS). Audience, issuer and expiry are all mandatory, and the signing algorithm is taken from the key, never from the token itself. Sessions and saved data are keyed to the verified user id; an unverified or malformed request is rejected.
A separate legacy login (a backend-signed cookie from environment credentials) exists only for local development and internal use. It is disabled in production — where Supabase is the sole identity provider — so it offers no extra attack surface online. If it is ever switched back on as an emergency door, it refuses to open with a short secret or password, and a legacy cookie only works for an account configured on the server. The login endpoint is also rate limited (per-IP) to blunt brute-force attempts.
Everything is scoped to your user id
Live sessions, saved portfolios, strategies and variants are all partitioned by user_id. The session
manager refuses to return a session that you don't own, and storage queries always filter on your id.
One user can never see another user's data.
(user_id, kind, name)..xlsx is compressed, so a tiny file can be huge inside.The frontend (Vercel) and backend (Render) are served over HTTPS. Cross-origin access is restricted
to the configured frontend origin (CORS). Legacy development cookies are httpOnly and, in production,
secure + SameSite.
nosniff, no framing of the app by other sites (X-Frame-Options
and frame-ancestors), a strict referrer policy, and camera, microphone and location disabled./docs, /openapi.json) is disabled in production.Sensitive keys — JWT secrets and the Supabase service-role key — live only in backend environment variables, never in the frontend bundle and never in logs. The high-privilege service-role key is used solely for administrative actions like account deletion, and if it's absent that action fails closed rather than degrading silently.
=, +, - or @ (for example a strategy
name) is written with a leading apostrophe, so Excel shows it as text instead of running it as a
formula. Real numbers, negative ones included, are untouched.Responsible disclosure
VEEMAN is analysis-only and never touches a brokerage account, so there is no order-execution attack surface. If you believe you've found a security issue, please report it privately rather than testing against other users' data.