Architecture & data security

Local-first. There is no central database.

The failure that produced this sector’s largest breach was one vendor holding one database of many districts’ students. CetusEd holds no student database at all — records live on district-managed devices, encrypted before they are written. Nothing about that depends on trusting us to behave: there is no copy for us to hold.

Written for a network administrator  ·  the open items are at the bottom, named

Where the data lives

Five parts. Only one holds student data: the device in front of you.

Browser app · static hosting
One self-contained web app, installed like an app and usable offline. The host serves files; nothing about a student passes through it.
Client
Local persistence · encrypted on-device store
Student data lives on the device, encrypted with AES-256-GCM before it is written. The key is generated on that device and cannot be copied off it. Work auto-saves; loading is scoped to the schools a user is assigned to.
Data
Backup & restore · sealed container files
A backup is a single encrypted container — AES-256-GCM under a key derived from your backup password (PBKDF2, 600,000 iterations). Restore works by decrypting, so a wrong password or a modified byte fails rather than importing. There is no separate signature to forget to check: the authentication tag is the integrity check.
Export
Optional district connector · the district’s own cloud account
Off out of the box. A district that wants a central audit log, cross-device access, or live roster sync deploys this itself, on its own account, with an allow-list of the hosts it may reach. What it can and cannot do →
Optional
Optional district sign-on · Microsoft Entra ID · Google Workspace · Clever
OpenID Connect with PKCE against your own identity provider, signature checking on by default. A district can require it and disable email login entirely, or use none of it, since the standard setup needs no logins at all.
Optional
Encryption & recovery

Encrypted before it’s written. Even we cannot recover your keys.

How keys work
  • The data key is generated on the device and is non-extractable — it can encrypt and decrypt, and it cannot be exported, by us or by anyone with the file.
  • It is wrapped by the user’s passphrase and by a recovery code your IT department holds, which restores a cleared device.
  • Your disk encryption — BitLocker, FileVault — layers underneath as a second, independent control.
  • The screen locks after 20 minutes idle by default, and the lock drops the key from memory rather than just hiding the view.
The trade-off, stated once
  • If the passphrase and the recovery code are both lost with no recent backup, the data is gone — to you and to us. That is the cost of holding no keys, and it is why routine backups are part of the setup rather than an afterthought.
  • Any tier that could carry student data off the device is refused in code until the district records a data-processing attestation and configures its own connector address. Until both are true, only de-identified metadata can move.
  • If a district enables a cloud tier, it runs on that district’s account. There is no CetusEd-operated service holding student data, and adding one would be a different product.
What leaves the device

Out of the box: nothing.

Every outbound request passes through one checkpoint in the software, and it refuses anything the district has not explicitly turned on — including kinds of request it does not recognise. An automated check blocks the release if a new upload path appears that does not go through it.

The four tiers
Tier What leaves the device
Local (standard)Nothing.
Local plus metadataDe-identified compliance events: staff initials, a hashed student identifier, scrubbed notes.
Zero-knowledge cloudEncrypted backups only. The keys stay with you; the ciphertext would be unreadable to anyone holding it.
CustodialYour own service, on your own account. The only tier that can carry student information, and it carries it to you.

The app makes no analytics call and loads nothing from a third-party host at runtime. Charting, PDF generation, and all six selectable font families are served from the application’s own origin.

Known gaps

What your security reviewer will find.

Four things have come up in a security review. One remains open — the one no software write can close — and the other three are closed, with the fix that closed them listed alongside, so your reviewer starts from the same list we do.

No independent audit, no penetration test
  • CetusEd has not had either. The documentation an assessor would ask for — system description, data inventory and flow map, subprocessor list, control matrix, accessibility self-assessment, and the policy set — is written and available for review.
  • Cloudflare, which serves the static files, holds SOC 2 Type II and ISO 27001 for its own infrastructure. That covers the hosting layer and says nothing about this application.
The browser security policy denies inline scripts
  • This was the largest item on the list, and it is closed. Migrating roughly 1,150 inline event handlers and about 900 routed action attributes is complete — every one now routes through the delegation router — and the policy denies inline script and inline event handlers. The build refuses to ship if either count returns.
Storage never falls back to unencrypted
  • The write path is encrypt-first and refuses rather than degrading. The three exceptions this list used to count were each converted into a refusal, the class was re-censused to zero, and an automated check pins the count — a fourth would block the release.
  • The one remaining unencrypted store, in-flight examiner state during a testing session, is held in memory only and is never written to disk.
School-scope enforcement fails closed on doubt
  • The scope predicate and its export sibling deny when they cannot determine the unit: an empty school assignment no longer resolves to full visibility, and a scope helper that fails to load is treated as a build defect, not a permission. Both properties are pinned by build-time guards, so a regression to fail-open fails the release.
  • A device that has never been configured for a school still opens with an empty workspace — the bootstrap case, by design — and an import or restore bundle the device cannot attribute to itself is refused, with the refusal naming the route that still works.

Aligned to FERPA and Washington’s student-privacy requirements. A dated data-flow and security-hardening packet is available for IT review — ask for it with your pilot inquiry. Worth stating alongside the list: there is no completed pilot yet, so none of this has been exercised under a full district’s daily load.

Read the questions districts actually ask.

Data, encryption, audit, compliance clocks, and what it takes to run this — written for a superintendent, a special-education director, and a network administrator, in that order.

District & IT FAQ Interoperability