TRUST & SECURITY

Security at Reacta

This page is written for institutional IT and security reviewers. It describes how Reacta stores data, what we encrypt, how we authenticate users, and what institutional controls are available. We update it as our posture changes. Last updated October 2026.

Questions or a security report? security@reacta.io

AT A GLANCE

All data encrypted in transit (TLS 1.2+) and at rest (AES-256)
Passwords stored as one-way bcrypt hashes. Never readable.
OIDC SSO available for institutional identity providers
Sessions via JWT in httpOnly, Secure cookies. Not stored server-side.
Minimal-data mode: inventory/billing features off; only analytical tools active
Role-based access control within every lab and organisation
Cloudflare R2 for file storage; Neon PostgreSQL for relational data
Rate limiting on all authentication endpoints

01. DATA

What we store and where

Data categoryStorageRegionEncrypted at rest
User accounts, labs, inventory, reactionsNeon PostgreSQLAWS US East 1 (N. Virginia)AES-256-GCM (Neon default)
File attachments (SDS, references, lab notes)Cloudflare R2Cloudflare auto-regionAES-256 (Cloudflare default)
Session tokens (JWTs)Client cookie onlyNot stored server-sideSigned with NEXTAUTH_SECRET
SSO client secretsNeon PostgreSQLAWS US East 1 (N. Virginia)AES-256-GCM application-layer encryption (separate key from database)
Stripe payment dataStripeStripe-managedPCI DSS Level 1. Reacta never touches raw card data.

Cloudflare R2 does not currently guarantee a specific geographic region for object placement. If EU data residency is a hard requirement, contact us. Regional configuration is on our roadmap.

02. ENCRYPTION

In transit and at rest

In transit

All traffic is served over HTTPS via Vercel's edge network, which enforces TLS 1.2 as the minimum version and supports TLS 1.3. HTTP requests are redirected to HTTPS automatically. Internal traffic between the Next.js runtime and Neon uses TLS enforced by Neon's connection pooler (PgBouncer).

At rest

Neon encrypts all data at rest using AES-256-GCM. Cloudflare R2 encrypts all objects at rest using AES-256. Passwords are stored as bcrypt hashes (cost factor 10) and can never be reversed or read.

03. AUTHENTICATION

How users sign in

Credential login

Email and password. Passwords are hashed with bcrypt before storage. Reacta cannot read or recover a user's password. Sessions are JWT tokens stored in an httpOnly, Secure, SameSite=Lax cookie; they are not stored in the database and cannot be revoked server-side before natural expiry.

OIDC Single Sign-On

Organisations can configure an OIDC identity provider (Okta, Microsoft Entra ID, Google Workspace, Keycloak, PingFederate, or any OIDC-compliant IdP). When configured, users with a matching email domain see a "Continue with SSO" button on the login page and are redirected to your IdP.

  • PKCE flow. No client secret exposure in browser.
  • Short-lived state and code verifier stored in httpOnly cookies (10-min TTL)
  • New users provisioned automatically on first SSO login
  • SAML support is on the roadmap

Rate limiting

Authentication endpoints are rate-limited to prevent brute-force attacks.

04. ACCESS CONTROL

Who can see what

Access is enforced server-side on every API route. A user can only read or write data that belongs to labs and organisations they are a member of.

  • Lab owner (PI)Full read/write on their lab. Can invite and remove members.
  • Lab memberRead/write on that lab's data. Cannot change lab settings or remove other members.
  • Org admin (owner)Manages org settings, SSO config, catalogue and procurement mode. Cannot access individual lab data directly.
  • Org memberInherits org settings. Access to labs is still governed by lab membership.

05. INSTITUTIONAL CONTROLS

Controls available to org admins

Minimal-data mode

When enabled, inventory, supplier, and billing features are turned off. Members can use reaction drawing, stoichiometry, and the NMR predictor without any chemical inventory data being stored. Enforced at the API layer, not just the UI. Useful while an institutional IT review is in progress, or for labs that only need analytical tools.

Full details: see the minimal-data mode documentation provided on request.

Procurement mode

Org admins can disable supplier price comparison entirely, or lock it to an institutional catalogue (no external supplier links shown to users).

SSO enforcement

When SSO is configured for an email domain, users with that domain see the SSO button on login. Standard credential login remains available as a fallback; forced-SSO (disabling password login) is on the roadmap.

06. SUB-PROCESSORS

Third-party services we use

ProviderPurposeLocation
VercelApplication hosting, CDN, edge networkGlobal (US-based entity)
NeonPostgreSQL databaseAWS US East 1 (N. Virginia)
Cloudflare R2File attachment storageCloudflare auto-region
StripePayment processing and subscription billingUS (PCI DSS Level 1)
PubChem (NCBI / NIH)Chemical data enrichment (GHS, SMILES, CAS; outbound API only, no user PII sent)US government API

07. COMPLIANCE

Current posture and roadmap

HTTPS everywhere. TLS 1.2+ enforced by Vercel.
Passwords hashed with bcrypt. Never stored in plaintext.
Rate limiting on auth endpoints
OIDC SSO available for institutional identity providers
Minimal-data mode for IT-review-stage deployments
Role-based access control enforced server-side on all API routes
Multi-factor authentication (MFA). On roadmap.
Forced SSO (disable password login per domain). On roadmap.
SSO client secret encryption at rest (AES-256-GCM, application layer)
EU/AU data residency. Infrastructure work required; contact us to discuss.
SOC 2 Type II audit. Not yet initiated.
Formal penetration test. Not yet conducted.
Data Processing Agreement (DPA). Available on request; formal template in progress.

08. RESPONSIBLE DISCLOSURE

Reporting a vulnerability

If you discover a security vulnerability in Reacta, we ask that you report it to us privately before public disclosure, giving us reasonable time to investigate and remediate.

Please email security@reacta.io with a description of the issue, the steps to reproduce it, and the potential impact. We will acknowledge receipt within 2 business days.

We do not currently offer a bug bounty programme, but we do credit researchers in our release notes when they agree to disclosure.

CONTACT

Security issues: security@reacta.io

IT review / procurement questionnaires: contact form

Data Processing Agreements: available on request via our contact form