status: active
timestamp: 2026-06-22
tags: [decision, backup, redundancy, dashboard, mirror, cron]
Backup everywhere weekly + backup-status dashboard app
Weekly cron backs up to multiple destinations git mirror (already running), Firestore exports to CF R2, Restic snapshots of master to Backblaze B2. New post-MVP app `oriz-backup-status-app` provides a dashboard at backup.oriz.in showing total bytes backed up, per-rail health, last-success timestamps, per-source breakdown. Decoupled from any single host failing.'
Backup everywhere weekly + dashboard
Decision
Weekly cron Friday 03:30 IST runs all backup rails simultaneously:
| Rail | Source | Destination | Free tier | Already running? |
|---|---|---|---|---|
| 1 | Every git submodule + master | GitLab + Codeberg + Bitbucket + GitFlic.ru | All free, no card | YES (mirror-to-4-git-hosts) |
| 2 | Firestore (all collections) | Cloudflare R2 bucket oriz-backup-firestore | 10 GB free, no card | NO — to add |
| 3 | Master c:/D/oriz (excluding submodules) + secrets configs | Backblaze B2 bucket oriz-backup-master | 10 GB free, no card | NO — to add |
| 4 | npm package tarballs (all 17 packages) | GitHub Releases of master | Unlimited, free | NO — to add |
| 5 | CF KV namespace snapshots (per Worker) | Cloudflare R2 bucket oriz-backup-kv | Free | NO — to add |
All 5 rails run in parallel inside the same Friday 03:30 IST cron workflow.
Backup status app
New app oriz-backup-status-app at backup.oriz.in. Subdomain pattern: backup.oriz.in.
Features:
- Total bytes backed up across all rails
- Per-rail health (last 4 weeks): success / fail / skipped
- Per-source breakdown (Firestore size, master repo size, KV size, etc.)
- Restore runbook links per rail
- Read-only public (no admin behind login — health visibility for trust)
Stack: Astro static site. Backup metadata generated by the weekly cron and committed to oriz-backup-status-app/public/status.json. Site re-deploys on commit.
Restore runbook
Each rail has a per-rail runbook in c:/D/oriz/knowledge/runbooks/restore-from-<rail>.md (to be authored alongside the rail going live).
Cost
All 5 rails are free-no-card tier. R2: 10 GB egress + 10 GB storage free. B2: 10 GB storage + 1 GB/day download free. Mirror hosts: free always.
Cross-refs
- 4-host git mirror (rail 1) ? [[decisions/ops/mirror-to-4-git-hosts]]
- Stack picks ? [[decisions/stack/stack-picks-2026-06-22]]
- No card on file ? [[rules/no-card-on-file]]