Everything this app is for lives in one SQLite file under FORGE_APP_DATA; today there is no way to take a copy of it or put one back.
What done looks like
Files I expect to change:src/backup.ts (new), src/backup.test.ts (new), src/routes.ts, src/pages/group.ts (or the admin section that exists), src/actions.ts (the admin check as an action, so every door gets it), README.md.
Risks: a backup is the whole record in one file — the admin check belongs in the action, not the route, and the download must never be reachable by a guessable path without it. A restore replaces live data: refuse a newer schema, never delete the old file (move it), and keep the whole thing out of the HTTP surface. VACUUM INTO fails if the target exists — write to a fresh name and clean up after.
Fit: Hearth — a backup is a file you can restore from, and the panel says what is real. A person assigns; I do not.
Everything this app is for lives in one SQLite file under
FORGE_APP_DATA; today there is no way to take a copy of it or put one back.What done looks like
Files I expect to change:
src/backup.ts(new),src/backup.test.ts(new),src/routes.ts,src/pages/group.ts(or the admin section that exists),src/actions.ts(the admin check as an action, so every door gets it),README.md.Risks: a backup is the whole record in one file — the admin check belongs in the action, not the route, and the download must never be reachable by a guessable path without it. A restore replaces live data: refuse a newer schema, never delete the old file (move it), and keep the whole thing out of the HTTP surface.
VACUUM INTOfails if the target exists — write to a fresh name and clean up after.Fit: Hearth — a backup is a file you can restore from, and the panel says what is real. A person assigns; I do not.