Last updated: July 28, 2026
Our infrastructure is monitored around the clock by Intruder, an automated vulnerability scanning service used by thousands of security-conscious companies. New CVEs and emerging threats are checked against our public-facing systems on an ongoing basis, with high-severity findings triaged within 24 hours. This is in addition to our planned penetration testing program.

ThouShaltNotClick is publicly listed on the Cloud Security Alliance STAR Registry with a completed Consensus Assessments Initiative Questionnaire (CAIQ v4) — the same self-assessment used by Microsoft Azure, IBM Cloud, and Fortinet. The registry maps our security posture to 197 controls across 17 domains, including encryption, access management, incident response, and supply chain security. View the full assessment at the link above.
ThouShaltNotClick is a cybersecurity awareness and phishing simulation platform built for schools, dioceses, synagogues, mosques, and faith-based organizations of every tradition. We take the security of your community's data as seriously as we take the security training we provide. This document describes our security architecture, privacy practices, and regulatory compliance posture in technical detail.
We encourage IT directors, diocesan/congregational CIOs, and school administrators to review this document as part of their vendor due diligence process. If you have questions not covered here, contact us at security@thoushaltnotclick.com.
All data transmitted between your browser (or browser extension) and our servers is encrypted using TLS 1.3. We enforce HTTPS on all endpoints with HSTS headers. API communication uses certificate-pinned connections where supported.
All data stored in our database is encrypted at rest using AES-256 encryption provided by our infrastructure provider (Supabase, hosted on AWS). Database backups are encrypted using the same standard.
Backups are the automated ones our managed database provider takes. Application data and password-vault data live in two separate database projects, so each is backed up independently of the other.
What we are not going to tell you is that recovery is a proven capability. An earlier version of this page and our Trust Center advertised “point-in-time recovery available”. We have removed that claim. We have never performed a restore drill, we publish no recovery point objective and no recovery time objective, and until we have restored a real backup to a scratch environment and timed it, any number we gave you would be a guess dressed up as a commitment. Our one tested recovery control is code rollback, which re-points production at the previous build; our own rollback runbook states plainly that it does not undo a database change.
A restore drill and a written RPO/RTO are prerequisites we have set for ourselves before onboarding a school that depends on them. If your evaluation turns on recovery guarantees, ask us at security@thoushaltnotclick.com for the current status before you sign rather than reading a capability into this paragraph.
ThouShaltNotClick is built on a modern, security-first technology stack. All infrastructure components are hosted in the United States.
| Component | Technology | Security Feature |
|---|---|---|
| Frontend | Next.js on Vercel | Edge-deployed, HTTPS-only, CSP headers |
| API Server | Node.js/Express on Railway | Rate limiting, Cloudflare Turnstile, input validation |
| Database | PostgreSQL via Supabase (AWS) | Row-Level Security, encrypted at rest, provider-managed automated backups (restore is not a drilled capability — see "Backup and the Limits of What We Will Claim About Restore") |
| Resend (transactional email) | DKIM/SPF/DMARC authenticated, webhook signature verification | |
| Payments | Stripe | PCI DSS Level 1, no card data touches our servers |
| Browser Extension | Manifest V3 | Client-side processing; no browsing data collected (the optional, school-enabled Content Filter records only blocked-site events). Requests all-sites host access — see "Browser Extension Permissions" below |
If you are evaluating this for a district-wide deployment you will open the extension’s manifest before you approve it, and the first thing you will see is that ThouShaltNotClick requests access to every website. We would rather you read that here first, from us, than discover it in the manifest and wonder what else we did not mention. This section lists every permission the extension actually declares and what each one is for.
https://*/* and http://*/* host permissions. In Chrome’s install prompt this reads as “Read and change all your data on all websites”. It is a genuine all-sites grant, and Chrome has no narrower way to express what the on-page features below need. What it is not is a browsing-data collection channel: the features that use it run on the page in front of you, and the general-web ones only run when a user asks for them.| Permission | What it is used for |
|---|---|
| activeTab | Temporary access to the tab the user is currently on, granted at the moment they invoke the extension |
| storage | Settings, cached org domains, and the learned-signal list, held on the device |
| contextMenus | The right-click entries: scan a link, open a link in Safe Preview, scan this page or this image for QR codes, check an image for AI generation |
| tabs | Reading the current tab's URL to set the toolbar badge and to notice when a mail tab opens. See the note on the toolbar badge below — this is the one permission with an ongoing network consequence |
| notifications | Desktop notifications: breach alerts, sign-in confirmation, and threat warnings |
| alarms | Periodic background work — the health heartbeat, the daily kindness-stat sync, and refreshing the phishing-signal list |
| declarativeNetRequestWithHostAccess | The optional Content Filter. Blocking is done by the browser's own rule engine rather than by our code inspecting traffic. No rules are installed unless your school turns the filter on and the policy resolves; if anything is missing it installs nothing |
| Host | Why |
|---|---|
| mail.google.com, outlook.live.com, outlook.office.com, outlook.office365.com, outlook.cloud.microsoft | Where the phishing analyzer runs. This is the core product |
| thoushaltnotclick.com and our API host | Talking to our own backend, and letting the dashboard see whether the extension is installed |
| api.pwnedpasswords.com | The k-anonymity breach check — a 5-character hash prefix, never a password |
| https://*/* and http://*/* (ALL SITES) | Four capabilities need to run on an arbitrary page, and Chrome cannot scope them to "whatever page the user is on later": the QR-code scanner, the AI-generated-image check, password-breach warning on login forms, and password-manager autofill. The Content Filter also needs host access to redirect a blocked navigation to the extension's own block page |
The toolbar icon shows a risk indicator for the site you are on. To do that, when a signed-in user navigates to a site that is not on the extension’s built-in list of well-known domains, the extension sends that site’s hostname — not the full URL, not the page, not its content — to our API for a live reputation lookup, and caches the answer. We are naming it because “the extension does not track browsing” is the kind of sentence that should be tested against what the code does, and a hostname leaving the device is the closest thing to an exception. The lookup is a pass-through to the threat sources listed under Threat Intelligence; it returns a verdict and is not written to our database as a browsing record. We do not build, store, or sell a browsing profile.
If your deployment cannot accept an all-sites grant, tell us at security@thoushaltnotclick.com. Chrome enterprise policy can restrict an extension’s host permissions at the managed-browser level, and the mail-analysis core keeps working with only the mail hosts granted — the general-web features are the ones that stop.
ThouShaltNotClick implements a strict role hierarchy with principle of least privilege. Each role can only access data within their organizational scope.
| Role | Scope | Access Level |
|---|---|---|
| Platform Admin | Entire platform | System management |
| Enterprise Admin | Archdiocese/Diocese | Cross-school reporting, license management |
| Organization Admin | Single school | Staff management, campaign management |
| Staff/Teacher | Own data only | Training modules, phishing reports |
| Parent/Family | Family data only | Family dashboard, student monitoring (if enabled) |
ThouShaltNotClick supports both TOTP-based MFA (compatible with Google Authenticator, Authy, Microsoft Authenticator, and any standards-compliant app) and SMS text-message MFA for users who prefer a one-time code sent to their phone. Recovery codes are provided during MFA setup for account recovery.
When MFA is verified, users can optionally trust their device for 7 days. Trust is bound to two things that must both match a live, unexpired record: a device identifier held in that browser’s local storage, and a secret trust token our server issues at the moment of verification and stores alongside it. Presenting the device identifier alone does not work — a stolen or guessed identifier without the matching token re-prompts for MFA. Signing in from a different browser, a different profile, or after clearing site data always requires MFA again.
We want to correct something this page previously claimed. An earlier version said trust was also scoped to the network address, so that changing networks would force re-verification. That is not what the code does. We do record the IP address on the trust record when the device is first trusted, and it is available for audit, but no login path compares it — moving from school Wi-Fi to a home connection inside the 7-day window will not re-prompt. Binding trust to IP is a change we are considering rather than one we have shipped, and we would rather correct the claim than leave a control described that does not exist.
Platform administrators can impersonate school accounts for support purposes. Impersonation tokens cannot carry platform admin privileges. All impersonation sessions are logged with the admin's identity, the target user, timestamps, and IP addresses.
For destructive or sensitive admin actions, ThouShaltNotClick requires independent sign-off from a second administrator at the affected organization before the action can proceed. This prevents a single elevated account from unilaterally destroying or tampering with data across organizations.
The combination of multi-admin co-approval, a peer-reviewable action log, and user-visible notifications means that no single rogue admin — at any tier of the system — can quietly tamper with or destroy another organization's data.
The Family Educational Rights and Privacy Act (FERPA) protects the privacy of student education records. ThouShaltNotClick is designed to operate as a "school official" with "legitimate educational interests" under FERPA.
Phishing simulation data is retained for the duration of the school's active subscription plus 30 days. Offboarding a school stops every form of product activity at once — simulations, campaigns, staff access, seats and billing — and marks the organization inactive. We want to be exact about what it does not do, because the distinction matters for a FERPA assessment: offboarding preserves stored records rather than deleting them, deliberately, so that a school can still obtain an export or fulfill a records request afterwards. Permanent deletion of an offboarded school's data is carried out by our team when the school asks for it, at privacy@thoushaltnotclick.com, and we will do it as part of the offboard if you tell us that is what you want. There is no automatic job that erases an offboarded school's data on a 30-day clock, and we would rather say so than describe one that does not exist.
The Children's Online Privacy Protection Act (COPPA) governs the collection of personal information from children under 13. ThouShaltNotClick's phishing simulation platform is directed at school staff (adults). In its default configuration we hold no student data at all — a school account is created with staff coverage only.
The Children's Internet Protection Act (CIPA) requires schools receiving E-Rate funding to implement internet safety policies and content filters. ThouShaltNotClick supports CIPA compliance through cybersecurity awareness training that educates staff about online safety, phishing threats, and responsible internet use.
Over 120 state laws protect student privacy beyond FERPA. ThouShaltNotClick's data minimization practices, transparent data handling, and strict purpose limitations are designed to satisfy the requirements of state laws including California's SOPIPA, New York's Education Law §2-d, and similar state-level student privacy statutes.
Schools with specific state compliance requirements should contact us for a tailored assessment.
In the ThouShaltNotClick browser extension — the product a school deploys — your email is analyzed on your device and the content never leaves it. The trust score, the findings and the recommendation are all computed in the browser. Email content reaches our servers only if the user explicitly opts in to AI-enhanced analysis, which is a per-email action taken each time.
When a user opts in to AI analysis, this is transmitted for that one email: the sender address, subject line, visible headers (Date, To, Reply-To), full link URLs with their display text, and up to 3,000 characters of the email body. A 3,000-character body excerpt is email content, not metadata, and we describe it that way deliberately. Before the body is sent, the recipient’s own name and email addresses are stripped out of it. Our AI provider does not retain it or train on it. We never transmit or store the complete body.
Footnote — the Outlook add-in (beta). We also publish a separate Outlook add-in, currently in beta. Microsoft’s add-in platform cannot run our analyzer on the device, so the add-in transmits the sender, subject, link URLs and up to 3,000 characters of the body to our server for scoring every time a user opens the panel on an email — its default path, not an opt-in one. The message is scored in memory and the body is not written to our database on that path. The on-device statement above describes the browser extension; if your assessment depends on “email content never leaves the endpoint”, deploy the extension and not the add-in.
Elsewhere on this site we say email content is not stored. That is true of the routine paths and false as an absolute, so here is the complete enumeration.
An earlier version of this page listed four stores and said “and no others”. That was wrong, and the correction matters more than the wording: the four we listed are the ones that hold text lifted from an email body, but they are not the only places free text about an email comes to rest. A user filing a report can type a note in their own words, and that note is stored — nobody had written it down. It is rows five and six below. We are stating the miss rather than quietly widening the list, because a store we had not disclosed is exactly the failure this section exists to catch, and it is the second time it has happened here.
| Store | What triggers it | How much | Who can read it | Retention |
|---|---|---|---|---|
| Reported email excerpt | A user presses Report Suspicious | 500 characters (plus headers up to 16 KB and link URLs) | Administrators at that user's own organization | Erased 30 days after the report; sender, subject and verdict are kept |
| Phishing-sample corpus | AI analysis scores an email below 30/100 | Up to 3,000 characters — the same ceiling we are permitted to send to the model, so we never store more than we transmitted. Recipient name and addresses stripped out. One sample per sender, the worst-scoring example seen | ThouShaltNotClick platform administrators only. Not your school's admins, not any other organization | 30 days from the sender's last flag, then erased. An actively-abusive sender keeps a live example; a sender nobody has seen in a month keeps none |
| Missed-phish report | An administrator tells us our score was wrong on a real phish | 500 characters | ThouShaltNotClick engineering only | 90 days, then erased. Longer than the 30-day staff-report window because this queue is reviewed manually and infrequently |
| Learned phrase signals | An administrator marks a report as confirmed phishing; we then extract detection signals from its subject and 500-character excerpt. A platform admin can also enter a phrase by hand when reviewing a missed-phish report | 3-to-5-word fragments (not the excerpt itself), stored with the IDs of the source reports and organizations — no sender, no recipient, no reporter. Identifying details, including names, email addresses, links and phone numbers, are removed before any fragment is cut, and a fragment still carrying one is discarded rather than stored. If we cannot resolve the reporter's identity in order to remove it, the report is skipped entirely rather than extracted. We do not publish the redaction rules themselves: stating them precisely would tell an attacker how to compose a message that slips past both the redaction and the detector | Pending fragments: ThouShaltNotClick platform administrators. Once a platform admin promotes one, it is served to every TSNC browser extension from an endpoint that needs no login — treat a promoted fragment as public | Stops being used for scoring 365 days after it was last seen in a new confirmed report; each re-sighting restarts the clock. We are not claiming deletion: today the expiry job marks the fragment unused rather than erasing the text. Erasure of expired fragments is queued work. Fragments extracted before 28 July 2026 predate the redaction described here. Removal on request |
| Reporter's note on a reported sender | A user reporting a bad sender types a note in their own words. Optional and free-form — we do not constrain what goes in it, so it can contain anything the reporter chose to type, including text they copied out of the email | Up to 1,000 characters | Administrators at the reporter's own organization, and TSNC platform admins reviewing the sender | None. This is the honest answer: the note is kept for as long as the report row exists, and no timed sweep erases it. It is not covered by the 30-day report-excerpt window above. Bringing it under a retention window is queued work; deletion on request at privacy@thoushaltnotclick.com |
| Reporter's note on a sender marked safe | The good-sender counterpart of the row above. A column exists to store a note when a user marks a sender safe | Up to 1,000 characters by design | Same as above | We are listing this one even though nothing currently writes to it: as of this release the two code paths that record a "mark safe" store the sender and subject only, and leave the note field empty. We disclose it because the field is there and a future change could begin populating it without anyone re-reading this page |
Two clarifications so this list is not read as broader than it is. The reporter’s note is typed by a person, not extracted from the message — but it sits in this section because a free-text box next to an email is a place email content ends up, and pretending otherwise is how the first four came to be under-counted. Separately, we store the subject line of reported senders alongside these notes; a subject is email content too, it is retained with the sender record rather than on the 30-day excerpt clock, and it is not a body excerpt, which is why it is called out here rather than given its own row.
Two things that are not stores of body text, despite common assumption: the administrator review-queue entry created when the AI scores an email below 30 carries sender and subject only, and the Community Threat record shares the sender, subject, score and the AI’s written explanation — never the body itself.
The retention column above says what we erase and when. It is worth being equally precise about how, because the honest answer is not “a nightly cron”. The three timed erasures are sweeps hung off the code paths that touch each store — submitting a report sweeps report excerpts, filing or reviewing a phishing sample sweeps the sample corpus, submitting or opening the missed-phish queue sweeps that one — each throttled to at most once per hour per process. In normal operation content past its window is gone within about an hour of the next time that surface is used; on an idle deployment it can persist longer. Every sweep re-counts the rows that should now be empty and raises a persisted alert if any remain, so a retention promise cannot fail quietly the way an unmonitored cron can. Moving these onto the same daily schedule that already drives our log and chat-transcript retention is queued work, and until it ships this paragraph is the accurate description. Immediate purge on request: privacy@thoushaltnotclick.com.
For enhanced threat detection, we query the following external services. Only sender domains, email addresses, and link URLs are sent — never email content.
| Source | Data Sent | Purpose |
|---|---|---|
| PhishDestroy | Domain name | Check against 770K+ known phishing domains |
| Google Safe Browsing | Link URLs | Check against Google's malware/phishing database |
| WHOIS/RDAP | Domain name | Check domain registration age |
| URLhaus (abuse.ch) | Link URLs | Check against malware distribution URLs |
| EmailRep | Sender email address | Check sender reputation and email age |
| IPQS | Sender email, link URLs | Fraud scoring and disposable email detection |
When checking passwords against the Have I Been Pwned database, we use the k-anonymity protocol. Only the first 5 characters of the SHA-1 hash of the password are sent. The full password hash — and certainly the password itself — never leaves your browser. This is the same privacy-preserving method used by 1Password, Firefox, and the NIST 800-63B guidelines.
All security-sensitive actions are recorded in an immutable audit log with the following fields: actor identity, action type, affected resource, timestamp, IP address, and relevant metadata. Audit logs are available to organization administrators for compliance reporting.
We use the following third-party services to operate our platform. Each has been evaluated for security practices and data handling. A service appears here only if it actually receives data from us today — services we have built support for but have not activated are listed separately below the table.
| Service | Purpose | Data Shared | Compliance |
|---|---|---|---|
| Supabase (AWS us-east-1) | Database & storage | All platform data (encrypted at rest) | SOC 2 Type II, HIPAA |
| Vercel | Frontend hosting | No user data — static assets only | SOC 2 Type II |
| Railway | API server hosting | API processing (no persistent storage) | SOC 2 Type II |
| Hetzner Cloud | Mobile Coverage mail relay (only for orgs that buy the add-on) | Full inbound email passes through in memory to score it and attach the trust banner. Only sender, recipient, and the score are stored — never the subject, body, or attachments | Hetzner DPA / GDPR terms |
| PostHog | Product analytics (cookieless, anonymous) | Anonymous page/click events — no PII, no signed-in student sessions | SOC 2 Type II |
| Stripe | Payment processing | Billing information only | PCI DSS Level 1 |
| Resend | Email delivery | Email addresses, email content of messages we send | SOC 2 Type II |
| Service | Purpose | Data Shared | Compliance |
|---|---|---|---|
| Anthropic (Claude API) | Two distinct uses: (1) AI email analysis, opt-in per email; (2) the AI support chat on our website | (1) Sender address, subject, visible headers, full link URLs, and up to 3,000 characters of that email's body. (2) Whatever a website visitor types into the chat, the recent conversation history, and the help articles we matched to it — sent on every message, not opt-in. Not used to train models | SOC 2 Type II |
| Google Safe Browsing | URL threat checking | Link URLs from analyzed emails | Google Privacy Policy |
| EmailRep | Sender reputation & account age | Sender email address | EmailRep Privacy Policy |
| IPQualityScore (IPQS) | Fraud scoring, disposable-email detection | Sender email address, link URLs | IPQS Privacy Policy |
Why three names that used to appear here are gone. A subprocessor is a party that processes personal data on our behalf. We previously listed RDAP / WHOIS, PhishDestroy and abuse.ch (URLhaus) in this table. Those are public-registry and threat-feed lookups: what we send them is a bare domain name or a link URL, never a person, an account or an email address. Listing them as subprocessors overstated what they receive and blurred the category, so they now appear under Threat Intelligence & Email Analysis, which states exactly what is sent to each. This makes the subprocessor list more accurate, not shorter in substance — nothing we send them has been removed from disclosure.
| Service | Purpose | Data Shared | Compliance |
|---|---|---|---|
| Google (Sign-In / Identity) | Google SSO sign-in | The user's own Google access token, sent to Google to verify it | Google Privacy Policy |
| Google Workspace Admin SDK | Directory sync (only if your school connects it) | Read-only directory access using the token your admin grants. We receive staff — and, only under the Student Coverage rules, student — names, email addresses, and group/OU membership | Google Workspace DPA |
| Microsoft (Graph / Entra ID) | Microsoft SSO sign-in | The user's own Microsoft access token, sent to Microsoft to verify it | Microsoft Online Services DPA |
| Twilio | SMS verification codes (opt-in only) | Phone number and the verification message text. No marketing SMS | Twilio DPA / privacy policy |
| Cloudflare (Turnstile) | Bot protection on public signup forms | Challenge token and the visitor's IP address | Cloudflare DPA / privacy policy |
| Service | Purpose | Data Shared | Compliance |
|---|---|---|---|
| Have I Been Pwned — password check | Checking a password against known breaches | 5-character SHA-1 hash prefix only (k-anonymity). The password and its full hash never leave your browser | Troy Hunt Privacy Policy |
| Have I Been Pwned — breach monitoring | Account and domain breach monitoring (opt-in) | The full email address or domain being monitored. This is a different feature from the password check above and it is not k-anonymized | Troy Hunt Privacy Policy |
| Tremendous | Referral and reward payouts | Recipient name and email address for the reward being issued | Tremendous DPA / privacy policy |
| BoldSign | E-signature for service agreements | Signer name, signer email address, and the agreement document | BoldSign DPA / privacy policy |
We have written integrations for Clever (roster sync), CanIPhish (supplemental training), SheerID and GovX (discount eligibility verification), APWG / eCrimeX (phishing takedown submission), and Vendasta (reseller mailbox provisioning for the consumer Complete Coverage plan). None of these are provisioned in production today — no credentials are configured, so no data is sent to any of them. Each integration is written so that with its credentials unset every call is a no-op. If we activate one, it moves into the tables above before it goes live.
Sightengine (AI-generated image detection) sits in between and we would rather say so than round it off. The feature is user-initiated — a staff member asks us to check one image — and when it runs it sends only the URL of that image: no email content, no subject, no sender, no account identifier. But it only calls Sightengine at all when its API credentials are present in our environment; with them unset the check falls back to our own local provenance analysis and nothing is sent. Because we cannot promise you it is switched off today, we list it here rather than in the active table above. Ask us at security@thoushaltnotclick.com if the current state matters for your assessment and we will tell you exactly.
OneRoster works differently from everything above and is worth stating plainly. When your school connects a OneRoster SIS (FACTS, PowerSchool, Blackbaud, or another), we connect outbound to your SIS using credentials your school issues us, and roster data flows into TSNC. Your SIS vendor is your vendor, not our subprocessor — we do not send your data to them beyond the credentials needed to authenticate. Threat-intelligence feeds we consume in bulk (AlienVault OTX, OpenPhish, PhishTank) are download-only: we pull their published indicator lists and send them nothing about you.
| Data Type | Purpose | Stored Where | Retention |
|---|---|---|---|
| Staff email addresses | Account identity, phishing simulation delivery | Supabase (encrypted) | Duration of subscription |
| Staff names | Personalized training, certificate generation | Supabase (encrypted) | Duration of subscription |
| Phishing simulation results | Training analytics, security scoring | Supabase (encrypted) | Duration of subscription + 30 days |
| Training completion records | Compliance tracking, badge awards | Supabase (encrypted) | Duration of subscription + 30 days |
| Reported-email body excerpt (500 chars) | Admin triage of a staff report; phishing phrase-signal learning | Supabase (encrypted) | 30 days, then erased — by a sweep that runs when the reporting surface is next used, not on a timer. See "How Those Erasures Run" above; on an idle deployment it can persist past 30 days |
| Reporter's free-text note on a reported sender (up to 1,000 chars) | Context the reporter chose to add to their report | Supabase (encrypted) | No retention window today — kept as long as the report row exists. Deletion on request |
| Phishing-sample body (up to 3,000 chars, AI score below 30) | Detection research — how attacks are written | Supabase (encrypted); platform admins only | 30 days after that sender was last flagged |
| Missed-phish body excerpt (500 chars) | Diagnosing a phish our scoring let through | Supabase (encrypted); TSNC engineering only | 90 days |
| Learned phrase signals (3–5 word fragments) | Detection — the wording attackers reuse across campaigns | Supabase (encrypted). Pending: platform admins. Promoted: served to every TSNC extension from an unauthenticated endpoint | Unused for scoring after 365 days without a fresh sighting; the fragment text is not yet erased at that point (erasure is queued work) |
| Website support-chat transcript | Answering the visitor; handing off to a human on request | Supabase (encrypted); TSNC platform admins. Each message is also sent to Anthropic to compose the reply | 90 days, deleted by a daily job. Conversations escalated to a human or flagged for review are retained beyond that until we delete them on request |
| Support-chat visitor contact details | Replying to a visitor who asked for a human | Supabase (encrypted); stored on the conversation — name, email address, free-text note, plus IP address and browser string captured at chat start | Same as the transcript above |
| Audit logs | Compliance, incident investigation | Supabase (encrypted) | 5 years |
| Extension telemetry | Extension health, feature usage | Supabase (encrypted) | 90 days |
In the event of a security incident involving unauthorized access to school data, we will notify affected schools within 72 hours of discovery, as required by most state breach notification laws. Our incident response process includes immediate containment, forensic investigation, regulatory notification (if applicable), and a detailed post-incident report shared with affected schools.
To report a security concern, contact security@thoushaltnotclick.com.
| Standard | Status | Details |
|---|---|---|
| SDPC National Data Privacy Agreement | ✅ Signed | Standardized data privacy terms used by thousands of school districts nationwide. Covers data collection, use, retention, deletion, and breach notification. |
| CSA STAR Registry | ✅ Registered | Cloud Security Alliance Security, Trust, Assurance & Risk registry. Self-assessment mapped to 197 controls across 17 domains, covering SOC 2, ISO 27001, NIST, and PCI DSS. |
| BBB A+ Rating | ✅ Accredited | Education Technology Professionals, LLC holds a BBB A+ rating. Verified business practices, complaint resolution, and transparency standards. |
| NCEA Proud Partner | ✅ Active | National Catholic Educational Association partner. Committed to supporting Catholic school communities with purpose-built technology. |
| FERPA | ✅ Compliant by design | RBAC, audit logging, data minimization, data export, school official designation, 72-hour breach notification. |
| COPPA | ✅ Compliant by design | Platform directed at adult staff, not students under 13. Schools provide consent under COPPA's school consent mechanism. |
| CIPA | ✅ Supporting | Cybersecurity awareness training supports school internet safety policies required for E-Rate funding. |
| State Student Privacy Laws | ✅ Designed for compliance | Data minimization + transparent practices satisfy SOPIPA (CA), NY Ed Law §2-d, and 120+ state privacy laws. |
| Standard | Target | Notes |
|---|---|---|
| SOC 2 Type I | 🔄 In progress | Audit engagement initiated. All technical controls (encryption, RBAC, MFA, audit logging) already implemented. Expected completion: Q3 2026. |
| SOC 2 Type II | 📋 Early 2027 | Observation period begins after Type I completion. Will include Security + Privacy criteria for EdTech-specific FERPA alignment. |
| ISO 27001 | 📋 Evaluating | Assessing timeline based on international market demand. CSA STAR registration provides foundational mapping. |
Our primary infrastructure providers — Supabase, Vercel, Railway, Stripe, and Resend — are independently SOC 2 Type II certified. The Hetzner Cloud servers that run the optional Mobile Coverage mail relay are operated under Hetzner's own DPA and GDPR terms rather than a SOC 2 report; they are dedicated to that add-on and hold no database. Our application implements the same technical controls these audits evaluate: AES-256 encryption, role-based access control, multi-factor authentication, comprehensive audit logging, rate limiting, input validation, and incident response procedures.
We welcome schools and dioceses to conduct their own security assessment. Contact security@thoushaltnotclick.com to request a completed vendor security questionnaire or schedule a call with our team.
For security questions, vendor assessment requests, or compliance documentation, contact our security team at security@thoushaltnotclick.com. For data processing agreements (DPAs), contact legal@thoushaltnotclick.com.
We are happy to provide a completed vendor security questionnaire, sign your school or diocese's data processing agreement, or schedule a call with your IT team to discuss our security architecture.