Multi-tenant SaaS
Fully isolated workspaces per institution. No data bleeds between tenants — ever.
- Row-level security via Firestore
- Separate audit + reports per inst
- Owner-scoped role hierarchy
A roommate marks them present.
A screenshot in the class group does the rest.
Hours of data entry, signatures faked.
One mock-location app and "I was there."
Rotated every 7 seconds, single-use, signed server-side.
One student, one device — only admins can reset.
Haversine on the server; mock-location instantly flagged.
Requests outside the genuine app don't validate.
Fully isolated workspaces per institution. No data bleeds between tenants — ever.
HMAC-signed tokens rotate every 7 s with a single-use nonce. Screenshots are useless.
Server-side Haversine with accuracy thresholds blocks anyone outside the classroom.
Lock each student to their registered device. Only admins can rebind.
Play Integrity, DeviceCheck and App Attest verify the app is genuine and unmodified.
Weighted signals feed a suspicious-scan queue for human review.
Branded async exports with signed download URLs. Ready in seconds.
Append-only, hash-chained log. Any tampering breaks every subsequent record.
Fully isolated workspaces per institution. No data bleeds between tenants — ever.
HMAC-signed tokens rotate every 7 s with a single-use nonce. Screenshots are useless.
Server-side Haversine with accuracy thresholds blocks anyone outside the classroom.
Lock each student to their registered device. Only admins can rebind.
Play Integrity, DeviceCheck and App Attest verify the app is genuine and unmodified.
Weighted signals feed a suspicious-scan queue for human review.
Branded async exports with signed download URLs. Ready in seconds.
Append-only, hash-chained log. Any tampering breaks every subsequent record.
HMAC-SHA256 over header.payload.
Server time. ≤10s window, no exceptions.
Single-use, atomically consumed in Redis.
Must be OPEN; status checked on every scan.
Fingerprint + generation match the bound device.
Play Integrity / App Attest verified upstream.
Haversine ≤ radius; mock-location flag = reject.
DB-level (sessionId, studentId) uniqueness.
Bound to one device. Sees its own attendance history, percentages and warnings — nothing more.
For coaching centers up to 200 students.
Most schools and small colleges.
Universities, multi-campus, SSO.
The token expires in seconds and the nonce is single-use. Even if forwarded, the friend's device fingerprint will not match the bound student's, and the request will fail.
Each scan carries a mock-location flag and accuracy reading. Mock = instant reject + suspicious log. Geofence is checked server-side via Haversine.
They request a device reset from inside the app. An admin approves it, which bumps the binding generation and invalidates the old refresh tokens.
The scan is online by design — that's how we verify session state. The app caches the student's own attendance history offline.
No. The QR is a short-lived signed token: institution id, class id, session id, issued-at, expiry, nonce, signature. Nothing about the student is in it.
Every tenant-scoped query is forced through a Prisma extension that injects the institutionId filter. Cross-tenant reads are physically impossible at the data-access layer.
Demo on your real classroom in under 20 minutes. We bring the QR, you bring the students.