BCE runs on a self-hosted server — no managed database service quietly backing things up. If a drive fails or a deploy goes wrong, recovery is entirely on whatever backup system exists. This one had to work, every time, on the first try.
The original setup had no formal backup process — recovery meant manually dumping the database and hoping nobody needed the media files. There was also a platform-mismatch problem baked in from day one: the app runs inside Docker on a Windows host, so any backup or restore path typed in by a user needed to resolve correctly inside the container's Linux filesystem, and vice versa.
A single, unified backup model that captures the database and media together as one consistent unit — so a restore always brings back a snapshot where the two actually match. Backups and restores run as Celery tasks in the background, with manual path selection so the CEO can point a restore at a specific archive. Access is locked to CEO-level accounts only, and every path passes through a translation layer mapping Windows host paths to their Docker-mounted equivalents.
The CEO clicks "Backup Now," or a schedule fires — either way it kicks off a Celery task instead of blocking the request.
The task captures the database and media directory together in one pass, tagged with a single timestamp so both sides represent the exact same moment.
Any host-side path in the operation runs through the Windows ↔ Docker translation layer before touching the filesystem.
The CEO picks a specific archive — not just "latest" — and triggers a restore, reversing the same path logic to put files back exactly where they belong.
A backup system nobody trusts is worse than no backup system at all — it creates false confidence right up until it matters. One unified snapshot means when someone needs to restore something, there's exactly one button to press and one outcome to expect.