Business Continuity & Disaster Recovery Plan
1. Goals
Records are a club's memory, so the priority is that no data is lost. We aim to:
- restore service within 24 hours of a major outage (recovery time objective);
- lose no more than 24 hours of data in the worst case (recovery point objective).
2. What protects us
- Infrastructure: Cloudflare's global network and Supabase's managed database, run by their providers with redundancy.
- Backups: Supabase backs up the database on its standard schedule. Koana's continuity job also copies files to a separate vault.
- Rebuildable: all code, database migrations and configuration are in GitHub, so Koana can be redeployed from scratch.
- Rollback: releases can be rolled back in minutes from Cloudflare's deployment history.
- Exports: organizations can export their records, and handover packs keep key documents together.
3. Scenarios
- Bad release: roll back to the previous version, fix, then redeploy.
- Database problem: restore from the most recent backup, then reconcile with the file vault.
- Lost or compromised admin account: revoke its sessions, rotate secrets and restore access through the other owner.
- Provider outage: tell organizations, wait for the provider's recovery, then verify data integrity.
- Connected service down (Google, Zoom, Meta): Koana keeps working; only that feature pauses.
4. Testing
We test a restore of backups and files at least once a year and record the result in the backup register.