Security designed for privileged data
Trial Commander holds attorney-client privileged communications, work product, and IOTA trust records. Security isn't a feature — it's the substrate.
Multi-tenant data isolation
Every database query is gated by the authenticated user's firmId at the database middleware layer. Cross-firm data access is architecturally impossible, not merely restricted. Queries that forget the firmId filter throw in production.
Each firm's data is logically isolated. We never return data from another firm in the same response. Our tenant-isolation integration test proves that firm A cannot see firm B's matters, time entries, invoices, or trust records even if a malicious payload bypasses application-layer filters.
Encryption
- In transit: TLS 1.3 for all traffic via Cloudflare edge.
- At rest (database): Microsoft Azure encrypts the Postgres instance at rest using AES-256.
- At rest (field-level): Fee agreement bodies, encrypted backups, and any field marked "privileged" are additionally encrypted at the application layer using AES-256-GCM with per-record random IVs and versioned keys for rotation. Even a full database dump does not reveal privileged communications without the application key.
- Backups: Per-firm encrypted backups stored in Cloudflare R2. SHA-256 checksum verification on every restore.
Authentication
- Authentication handled by Clerk (SOC 2 Type II certified).
- Two-factor authentication required for all attorneys and firm administrators. Associates, paralegals, and clients may opt out (firm-admin configurable).
- Session timeout and idle disconnect.
- Rate limiting on auth endpoints (5 attempts per 15 minutes per IP) to prevent credential stuffing.
- Optional SSO / SAML for enterprise tier.
Access control
- 6 roles (FIRM_ADMIN, ATTORNEY, ASSOCIATE, PARALEGAL, READ_ONLY, CLIENT) with 60+ fine-grained permissions.
- Trust account disbursements restricted to ATTORNEY and FIRM_ADMIN per Rule 5-1.1(g)(3). Enforced at the action level, not just UI.
- Matter-level access: associates and paralegals see only matters they're assigned to.
- Client portal is strictly scoped: clients see only matters where they are the client, and only a restricted subset of fields (never privileged strategy, never time entry narratives, never internal mediation notes).
Audit log
Every significant action (trust transactions, fee agreement changes, invoice void, user role changes, data exports) is logged with SHA-256 hash chaining per firm. Each event's hash includes the prior event's hash, creating a Merkle chain that can be verified for integrity.
If someone alters the database to hide a trust violation, the chain breaks and we detect it via nightly verification. Bar investigators get a complete, tamper-evident record of who did what, when.
AI privacy
All AI features (fee petition generator, assistant, document generator) route through the Anthropic API, which never uses your data to train models. Retention is strictly limited — zero once our Zero-Data-Retention configuration is active, and never more than Anthropic's ~30-day operational window before then. The current mode is always stated in our AI disclosure. Firms can also require zero retention, bring their own Anthropic key, or run per-matter local AI that never leaves their machine.
Before any AI call, we redact obvious PII (SSNs, credit card numbers, bank account numbers). System prompts explicitly treat user input as data, not instructions — prompt-injection resistance is baked into the prompts. Every AI call is audit-logged with metadata (tokens, stop reason, feature) though not content.
Operational security
- Daily encrypted backups with 30-day retention. Automated monthly restore drills.
- Nightly audit chain verification. Alert on any integrity break.
- Dependency scanning (Dependabot), static analysis (ESLint), and CI security checks on every commit.
- Secrets managed via Azure App Service configuration and Key Vault, never in code.
- Strict Content Security Policy, HSTS, X-Frame-Options: DENY, and other security headers on every response.
- Row-level tenant isolation enforced in Prisma middleware, with integration tests proving cross-firm access is impossible.
- Rate limiting on all API endpoints, tighter limits on AI and export endpoints where costs are higher.
Incident response
We commit to notifying affected customers within 72 hours of confirming any security incident affecting their data. This exceeds the Fla. Stat. § 501.171 30-day requirement for consumer notification.
Report a security vulnerability: security.txt
What we don't do
- We don't sell or share your client data. Ever. Not to advertisers, not to AI training, not to "partners."
- We don't hold your data hostage. Export everything at any time as CSV or PDF. Delete everything on cancellation (subject to Rule 5-1.2 retention for trust records).
- We don't use your matter data to train AI models.
- We don't claim to be SOC 2 or HIPAA certified pre-launch — we'll report when we achieve these and what the scope is.
Detailed questions? Enterprise security review?
Contact us →