SetFlow
SetFlow
Security

Security is not a feature. It is the architecture.

SetFlow is designed so that a complete compromise of SetFlow's infrastructure cannot expose student records. Here is exactly how — for school IT directors, school administrators, and parents.

Effective Last updated May 24, 2026

The short version

A breach of SetFlow cannot expose your students' records.

Under BYODB, your institution's student data lives in your own Postgres database. SetFlow stores only an AES-256-GCM encrypted connection string. We verify every LMS integration via JWT signing and DNS domain control. We commit to a 72-hour written breach-notification window. See the full Privacy Center →

1. BYODB — student data never leaves your infrastructure

When Canvas was breached in May 2026, 275 million student records were exposed because they were all stored on Canvas's servers. Under SetFlow's BYODB architecture, an attacker who breached SetFlow would find encrypted connection strings — not student records. Student data lives in your database, not ours.

Each institution provisions a PostgreSQL-compatible database in its own environment, and SetFlow connects to it via a private network connection. Durable student records — names, emails, grades, assignments, messages — live in the institution's database. SetFlow holds only institution configuration, billing, and an encrypted connection string.

  • AES-256-GCM encrypted connection strings. Decrypted in memory only for the duration of each request, then zeroized. The decrypted value never touches the filesystem, never enters a log, and never leaves the process.

  • Scrypt key derivation. No raw secrets are stored. Keys are derived from a master secret using a memory-hard function that makes brute-force attacks computationally infeasible.

  • Authenticated encryption. AES-GCM is authenticated encryption — a tampered ciphertext is detected and rejected. Decryption throws; there is no silent fallback to a shared database.

  • Key revocation. Institutions that hold their own encryption keys retain unilateral revocation. A key rotation on your side instantly makes SetFlow's stored ciphertext useless.

What an attacker gets if SetFlow is breached, under BYODB:

✓ Has access to: Encrypted connection strings (useless without the key). SetFlow's application source code (we publish much of it anyway).

✗ Cannot access: Student names. Student emails. Student IDs. Grades. Assignments. Conversation history. Accommodation data. Any student personally identifiable information whatsoever.

For the architecture write-up, see our BYODB documentation and the SSRN paper at papers.ssrn.com/sol3/papers.cfm?abstract_id=6798778.

2. LTI 1.3 — verified institutional integrations

When a school embeds SetFlow inside Canvas, Blackboard, Brightspace, Moodle, or Schoology via LTI 1.3, we verify every launch through two independent layers. Neither alone is enough.

3. Transport and security headers

Every response SetFlow sends includes the following headers. They are the difference between "the application is secure" and "the application is secure even when an attacker is on the same Wi-Fi network."

4. Encryption details

The same encryption boundary that protects BYODB connection strings extends to every free-text field on a user profile and every accommodation disclosure. A leaked database dump shows ciphertext for everything sensitive — never readable plaintext.

5. Cookie security

6. Compliance by architecture

The architecture itself enforces the regulatory posture. We do not rely on promises about behaviour we could violate — many of these obligations are structural, not contractual. Consult your legal counsel for jurisdiction-specific advice.

7. AI provider security

Tori is powered by Anthropic Claude (primary), with OpenAI and Google Gemini available as fallbacks. Each provider has explicit data-handling commitments that bind their API tier:

  • Anthropic Claude. Does not train on API customer data. SOC 2 Type 2 certified. Data Processing Agreement available. <a href="https://www.anthropic.com/legal/privacy">anthropic.com/legal/privacy</a>.

  • OpenAI. API usage does not train models (separate from the ChatGPT consumer product). Zero data retention available at enterprise tier. SOC 2 Type 2 certified. <a href="https://openai.com/policies/privacy-policy">openai.com/policies/privacy-policy</a>.

  • Google Gemini (paid API). Paid Gemini API customer data is not used to train models. SOC 2 / ISO 27001 / 27017 / 27018 certified. <a href="https://policies.google.com/privacy">policies.google.com/privacy</a>.

What we send to AI providers:

✓ Sent: Your messages to Tori. Recent conversation turns (last 10–12). Your first name (so Tori can address you personally). The lesson or assignment you are working on (truncated to ~6,000 chars). Memory facts Tori has stored about your learning preferences. Accommodation profile if your teacher has set one.

✗ Never sent: Student ID numbers. Grades. Health information beyond accommodation flags strictly needed for personalisation. Any information not relevant to answering your specific question.

See the Privacy Policy §8 for the full AI-features disclosure.

8. Responsible disclosure

Found a security vulnerability? We welcome responsible disclosure from security researchers.

  • Report to. <a href="mailto:[email protected]"><strong>[email protected]</strong></a>. Include a clear reproduction, the affected URL, and (if you have it) a suggested fix.

  • We acknowledge. Within 48 hours of receipt.

  • We investigate. And respond with our assessment within 7 days.

  • We patch. Critical findings within 7 days; non-critical within 30 days.

  • Safe harbour. We will not pursue legal action against researchers acting in good faith — testing only their own account, no destructive testing, no social engineering of staff or other users, giving us a reasonable disclosure window before publishing.

  • Credit. We publicly credit researchers who report responsibly, where they wish to be credited.

There is no paid bug bounty at this time (post-launch addition). Out of scope: denial-of-service, social engineering of staff, physical attacks, third-party services (Vercel, Neon, Anthropic, OpenAI — please report directly to them), self-XSS, missing CSRF on logout endpoints, and "best practice" reports without a working exploit.

Discoverability: /.well-known/security.txt is published per RFC 9116.

9. Incident response and breach notification

If a security incident occurs, our commitment is: detect, contain, notify, document — in that order.

Contact for incident reports: [email protected] (security disclosures) or [email protected] (privacy questions).

Vulnerability reports: [email protected] (acknowledged within 48 hours). Privacy questions, data requests, DPA / procurement packets: [email protected]. General product support: [email protected]. The founder replies directly.

See also the Privacy Policy, Subprocessors, Privacy Center, and Privacy Request form.

Questions? [email protected] — the founder replies directly.