Runbook · served from the app itself, no passcode needed
What to do if something needs restarting, where to look when you're not sure the emails went out, and how to get an older version of your task list back if you ever need it. Reachable even if you're locked out — that's exactly when you'd need it.
Live at
hub.auroracomputercare.com
Backups
Nightly · 30-day history
Check-ins
6, 7, 12, 6pm Denver
App directory
~/projects/task-app
If the site feels stuck or you've just changed something, this is the one command that fixes most things.
sudo systemctl restart task-app
Then confirm it actually came back:
sudo systemctl status task-app
curl -I https://hub.auroracomputercare.com/login
You're looking for Active: active (running) and HTTP/1.1 200 OK.
Everything the app prints — every page load, every scheduled email attempt — goes to the system journal.
# last 50 lines
sudo journalctl -u task-app -n 50
# live, updates as things happen
sudo journalctl -u task-app -f
# everything since midnight
sudo journalctl -u task-app --since today
Email failures specifically also get their own file, which doesn't roll over the way the journal eventually does: data/mail-failures.log.
This is the one command that answers it — every scheduled job (the four check-ins and the nightly backup) writes one line the moment it finishes, whether it worked or not:
sudo journalctl -u task-app --since today | grep scheduler
A healthy day reads like this:
Those timestamps are UTC, so they'll read a few hours later than the 6am/7am/noon/6pm Denver time you actually see the email land. Silence instead of a line means the job never ran at all, which is worth noticing on its own.
mail-failures.log for the reason.
Schedule: every night at 3:00am Denver time, automatically — no separate job to maintain, it's the same scheduler as the emails.
Kept for: 30 days, then quietly deleted. At this app's size that's still under a megabyte total, so there was no reason to keep less.
ls -la ~/projects/task-app/backups/
Want one right now, before trying something risky? Run it by hand:
cd ~/projects/task-app
node scripts/backup.js
This replaces the live list with an older one. Anything added or checked off after that backup's date is lost — check the date before you commit.
sudo systemctl stop task-appcp ~/projects/task-app/data/tasks.db \
~/projects/task-app/data/tasks.db.before-restore-$(date +%Y%m%d-%H%M%S)cp ~/projects/task-app/backups/tasks-2026-09-04.db \
~/projects/task-app/data/tasks.dbsudo systemctl start task-app
curl -I https://hub.auroracomputercare.com/logindata/ — nothing is destroyed until you delete it yourself.
It lives in one file. Edit it, then restart:
sudo nano ~/projects/task-app/.env
# edit the PASSCODE= line, then Ctrl+O, Enter, Ctrl+X to save
sudo systemctl restart task-app
Anyone already signed in stays signed in — only new logins need the new code.
Run the full test suite, then the automated browser check that loads the real app and verifies nothing looks broken on the very first screen:
cd ~/projects/task-app
npm test
npm run smoke-test
The cache the app uses for offline/installed use updates itself automatically whenever a file changes — there's no manual version number to remember to bump.