Multi-organisation tenancy

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.
Code evidence: supabase/migrations/20261006000012_hrd12_audit_integrity.sql, supabase/migrations/20260909000041_rbac_foundation.sql, supabase/migrations/20261019002100_clr21_tenant_brand_by_subdomain.sql, lib/mfa/enforcement.ts, lib/ip-allowlist.ts

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.

WhatWhat it does todayIncluded fromEvidence
Single sign-onSAML and OIDC sign-in.Basic ($1 per active user a month)lib/sso/service.ts
SCIM provisioningSCIM 2.0 user provisioning and deprovisioning.Basic ($1 per active user a month)app/api/scim/v2/
Custom domainUse your own domain; we verify it and issue the certificate.Advanced ($2 per active user a month)lib/tenant-domain-verify.ts
White labelYour logo and colours across the learner and admin portals.Advanced ($2 per active user a month)feature.white_label (Offer catalogue)
Branches inside one organisationNot built yet.Coming soonD7
Choice of data regionNot built yet.Coming soonD7
Partner consolePartners create and manage customer organisations from a partner console; see the partner price list.See the partner price listapp/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).

Code evidence: lib/attention/signals/

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.

Code evidence: lib/group-rules.ts

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.

Code evidence: app/api/cron/learner-reminders/route.ts, lib/learner/reminders/compliance-ladder.ts

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.

Code evidence: app/admin/sandbox/page.tsx

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.

Code evidence: app/admin/analytics/cross-org/page.tsx

Recertification

Track certificate expiry. An expiring certification triggers a reminder (30 days before expiry by default) and reassignment of the course.

Code evidence: lib/recertification/engine.ts
14-day Full Feature Free Trial

Set up your organisation on the Free plan

14 days of Premium with 5,000 AI credits. No card required. Afterwards you stay on Free until you choose a plan.

No credit card required. Instant account setup in under 60 seconds.