Encryption your clients never have to think about, access controls a reviewer can verify, and a record of everything that happened.
Encrypted before storage
Each file gets a fresh AES-256-GCM key. That key is wrapped with an RSA-OAEP public key; the private key never leaves the server. The storage layer only ever holds ciphertext — a breach of the bucket yields nothing readable.
Private, expiring links
A client link is an RS256-signed token scoped to one client, with a database-backed id so it can be revoked instantly. It expires (14 days by default) and is upload-only — there is no route that reads a file with a client token.
Tenant-scoped access
Every client belongs to one account. File downloads join through that ownership check, so one firm can never reach another’s documents, and an unauthenticated request is refused.
Append-only audit log
Every upload, AI verdict, reassignment, manual override and reminder is written to a timestamped log. You can show why a document was accepted, not just that it was.
Hardened by default
Uploads are allow-listed by byte signature, size-capped and rate-limited per link and per IP. Strict security headers, a nonce-based Content-Security-Policy, and HTTPS-only transport. Built against the OWASP Top 10.
Key handling
Signing and encryption keys are separate key pairs with separate blast radius. For a production deployment they live in the platform’s secret store or a vault, never in the codebase or logs.
The services Sealio shares data with, only as needed to run.
| Provider | Purpose | Data |
|---|---|---|
| Vercel | Application hosting | Request metadata, logs |
| AWS (RDS + S3) | Database & encrypted file storage | All case data (files stored as ciphertext) |
| Anthropic | Automated document check | Document contents, at upload time only — not used for training |
| Resend | Reminder email delivery | Client name, email, list of pending documents |
| Upstash | Rate limiting | Hashed keys derived from IP / link id |
Report a vulnerability or ask a security question: office@sealio.ca. See also the Privacy Policy.
Open the demo, upload a document from the client side, then open the activity log to see every decision recorded.