One platform, separate organisations
How does Personal Academy keep each organisation's data separate?
Personal Academy is a multi-tenant learning platform: every business table carries the organisation's id and a restrictive row-level-security policy in PostgreSQL, so one organisation cannot read another's rows. The audit log is append-only and kept at least 365 days. Branches and a choice of data region are coming soon. Choose it to run separate organisations on one platform.
How the separation works
- Its own tenant: each organisation's data is isolated by restrictive row-level security in the database, and each organisation has its own subdomain.
- Append-only audit log: the database refuses edits and deletions of audit rows, and audit rows are kept at least 365 days.
- Staff access: time-boxed (60 minutes by default), needs a written reason, and is logged.
- Sign-in controls: authenticator-app two-factor with recovery codes that administrators can require; single sign-on from the Basic plan.
- IP allowlist: each organisation can limit access to its own address ranges, written in CIDR notation.
More detail: the security page and the privacy notice.
What you get, on which plan
The plan names and prices come from the published price list.
| What | What it does today | Included from | Evidence |
|---|---|---|---|
| Single sign-on | SAML and OIDC sign-in. | Basic ($1 per active user a month) | lib/sso/service.ts |
| SCIM provisioning | SCIM 2.0 user provisioning and deprovisioning. | Basic ($1 per active user a month) | app/api/scim/v2/ |
| Custom domain | Use your own domain; we verify it and issue the certificate. | Advanced ($2 per active user a month) | lib/tenant-domain-verify.ts |
| White label | Your logo and colours across the learner and admin portals. | Advanced ($2 per active user a month) | feature.white_label (Offer catalogue) |
| Branches inside one organisation | Not built yet. | Coming soon | D7 |
| Choice of data region | Not built yet. | Coming soon | D7 |
| Partner console | Partners create and manage customer organisations from a partner console; see the partner price list. | See the partner price list | app/partner/[partnerId]/ |
Running many learners across teams
What the administration side does today, with the code path for each.
Attention triage
One admin view of a set of operational signals (at-risk learners, grading queues, expiring licences, webhook health, SIEM, recertification and more).
Dynamic groups
Group rules are structured data the database evaluates: department or department tree, job title, office, audience type, department type, or joined within a number of days. A rule cannot name another organisation.
Due-date reminders and escalation
An hourly job reminds learners before a due date (7 days and 1 day before, by default), on the day and for the first days overdue, then tells the manager (3 days overdue by default) and HR (14 days by default). Each organisation can change these defaults.
Organisation sandbox
An administrator provisions a sandbox organisation and refreshes it from the live one, with a written reason and a typed confirmation. Included from Premium.
Cross-organisation board
A board groups several organisations the same people run under one account and compares learners, active learners and completions over the last 30 days. Platform staff grant access to an account; it never shows an organisation you do not belong to.
Recertification
Track certificate expiry. An expiring certification triggers a reminder (30 days before expiry by default) and reassignment of the course.