Your data is protected with industry-standard security practices.
Ultrathink is built on Google Cloud Platform with multiple layers of protection. This page details the security measures in place to protect your data.
All data is encrypted both at rest and in transit.
At rest: AES-256 encryption is handled automatically by Firestore. This protects against physical theft and unauthorised infrastructure access.
In transit: TLS 1.2+ secures all connections between your browser, the extension, the widget, and Firebase servers. This prevents network interception and man-in-the-middle attacks.
Ultrathink runs entirely on Google Cloud Platform via Firebase:
This stack provides geographic redundancy, automatic backups, and Google's enterprise-grade security by default. Firebase maintains SOC 1, SOC 2, and ISO 27001 certifications.
Authentication is handled through Firebase Authentication with email and password sign-in.
When you sign in:
Account blocking is available for platform administrators to prevent access if needed.
New accounts must verify their email address before accessing the application.
After signing up:
This prevents fake account creation and ensures we can contact you about your account.
Passwords must meet the following criteria:
Additionally, passwords are checked against a list of over 100 commonly used passwords (such as "password123", "qwerty", "admin") and rejected if they match.
The signup form shows real-time strength feedback with colour-coded indicators.
Two layers of rate limiting protect against abuse.
IP-based limits (authentication):
User-based limits (API):
When rate limited, requests return HTTP 429 with a Retry-After header indicating when access will be restored.
reCAPTCHA v3 runs invisibly in the background during authentication.
Each action (login, signup, password reset) generates a score from 0.0 to 1.0. Requests with scores below 0.5 are rejected as likely bot activity.
Firebase App Check adds a second layer using reCAPTCHA Enterprise to validate that requests come from legitimate app instances, not automated scripts.
When you sign out, Ultrathink performs a complete cleanup:
This prevents data leakage between accounts on shared devices. The React Query cache is explicitly cleared to ensure no entries from a previous session appear to the next user.
The browser extension and desktop widget use device keys instead of passwords.
How it works:
The full key never leaves your device. Only the hash is transmitted. Keys can be revoked from the web app at any time, immediately blocking access from that device.
Device keys are stored:
Firestore security rules enforce strict access boundaries.
Your data:
Organisation data:
Device keys:
Rate limiting data:
User-generated content is sanitised before rendering.
The notes field supports HTML formatting. When displaying HTML content, DOMPurify strips any potentially dangerous elements (scripts, event handlers, iframes) before rendering.
Plain text content is rendered without HTML interpretation, preventing injection even if malicious markup is pasted.
All API inputs are validated server-side.
Length limits:
Type validation:
Invalid requests are rejected with descriptive error messages.
Cross-origin requests are restricted to known sources:
Requests from unknown origins are blocked.
Stripe handles all payment processing. Ultrathink never sees or stores card details.
Protections:
Your data is yours:
You control visibility: keep entries private or share with your organisation members.
Platform administrators have access to:
Blocked users are automatically signed out and cannot sign back in until unblocked.
For security-related questions or to report a vulnerability, contact chris@tryultrathink.com.