Trust Center · Policies
Business Continuity & Disaster Recovery Policy
Last updated: 2026-09-03 · Owner: Founder / CTO · Design Excellent Group SL
How the service keeps running or is restored after a major failure.
Purpose
Keep learning available to students and content safe for academies through outages, data loss or loss of a provider.
Objectives
- Recovery Point Objective (RPO): ≤ 24 hours for a major incident (target; day-to-day, Supabase point-in-time recovery allows a much finer point).
- Recovery Time Objective (RTO): ≤ 8 hours for a major incident.
These are targets that we keep under review; contractual SLAs are agreed per customer.
Architecture for resilience
- Data — Supabase Postgres in the EU (Frankfurt) with continuous backups and point-in-time recovery; file storage in the same region.
- Video — Bunny Stream with global edge delivery; original uploads are retained by the provider and can be re-processed.
- Application — stateless Next.js containers on Coolify, reproducible from the repository; secrets live in an encrypted vault backed up with the database.
- Edge — Cloudflare DNS, TLS and WAF; DNS changes are the switch for redirecting traffic during recovery.
Scenarios and playbooks
| Scenario | Response |
|---|---|
| Application host failure | Redeploy last known-good build to a new Coolify host; repoint DNS. |
| Database corruption or accidental deletion | Restore with point-in-time recovery to a moment before the event; verify with tenant admins. |
| Video provider outage | Learners keep text, captions and transcripts; video resumes when the provider recovers — no data is lost. |
| Loss of a key person | Credentials for every provider are held in a shared password manager with a designated deputy; runbooks live in the repository. |
Testing
A restore test (database point-in-time recovery into a scratch project) is performed at least twice a year and after any change to the backup configuration; the result is recorded with this policy.
Communication
Incidents affecting availability are announced on the public status page and by e-mail to academy owners, with updates until resolution.