First-Run Setup¶
First-run setup turns a freshly started container into a usable private bill tracker. The goal is simple: secure the bootstrap admin, create a real user, confirm the deployment settings, and make a first backup before entering important data.
What happens on first start?¶
BillTracker needs at least one admin account before the service can be managed. For Docker and other non-interactive starts, seed that admin with:
Usernames must be at least 3 characters. Passwords must be at least 8 characters, but production passwords should be much longer.
When no users exist and the server is started from an interactive terminal, BillTracker can prompt for the first admin in the terminal. For containers, use the environment variables.
1. Sign in as the bootstrap admin¶
Open the app URL from your Docker install, for example:
Sign in with the seeded admin username and password.
The bootstrap admin is for operating the server. It is not the normal account you should use to track bills.
2. Change the admin password¶
Before doing anything else:
- Open the admin/user area.
- Change the seeded admin password.
- Store the new password in your password manager.
- Remove or rotate
INIT_ADMIN_USERandINIT_ADMIN_PASSin Compose.
This prevents a future container restart from reusing old seed credentials.
3. Create a regular user¶
Create a normal user account for bill tracking. That user owns personal financial records such as bills, payments, transactions, settings, and calendar feed tokens.
Use the admin account for:
- User management
- Auth configuration
- Bank sync configuration
- Backups and restores
- Cleanup and notification settings
- Status and migration checks
Use a regular user for:
- Tracker planning
- Bills and subscriptions
- Payments
- Calendar feed setup
- Spending and bank transaction review
- Personal settings
4. Confirm deployment settings¶
Before entering real financial data, review:
| Area | Where | What to confirm |
|---|---|---|
| Data path | Docker host | /data/db/bills.db and /data/backups are on a persistent host mount. |
| HTTPS | Reverse proxy | Public access uses HTTPS and forwards X-Forwarded-Proto. |
| CSRF/cookies | Environment/Admin docs | CSRF_HTTP_ONLY=true, CSRF_SAME_SITE=strict, and secure cookies match your URL. |
| Secret encryption | Admin → Bank Sync or docs | TOKEN_ENCRYPTION_KEY is set if you want keys separate from the DB. |
| WebAuthn | Admin/security | RP ID and origin match the production domain before hardware-key 2FA. |
| Backups | Admin → Backups | The backup directory is writable and a manual backup succeeds. |
5. Decide what to enable first¶
Start small:
- Add a few recurring bills manually.
- Record one payment so the Tracker flow is familiar.
- Enable the calendar feed if you want due dates in Apple/Google/Android calendar apps.
- Connect SimpleFIN only after basic bill tracking works.
- Configure service catalog/merchant matching once real transactions are syncing.
6. Create the first backup¶
After you create users and confirm the deployment:
- Open Admin → Backups.
- Run a manual backup.
- Confirm the backup appears in
/data/backups. - Keep a copy outside the app host if this is production.
What should I do after first-run setup?¶
-
Add bills
Create recurring bills, set due dates and cycles, add autopay details, and optionally mark debt fields.
-
Plan the month
Use Tracker to see what is paid, due soon, late, projected, or overridden by bank-cleared payments.
-
Connect bank sync
Add SimpleFIN, sync transactions, review match suggestions, and tune service catalog matching.
Troubleshooting first login¶
| Problem | What to do |
|---|---|
| Seeded admin cannot log in | Check the container logs for seed errors and confirm both INIT_ADMIN_USER and INIT_ADMIN_PASS were present on first start. |
| Password changed back after restart | Remove or rotate seed env vars, then change the password again. |
| Regular user cannot access Admin | Expected. Admin routes require an admin role. |
| Admin cannot see personal tracker data | Expected. Use a regular user for bill-tracking data. |
| Browser login loops | Check HTTPS/proxy cookie settings and the server time zone/time sync. |