SplitPro¶
Last Updated: 2026-05-31 Status: ✅ Active
Purpose¶
Shared expense splitting for the household. Tracks who owes what across shared purchases and trips.
Location¶
| Hosted on | Lotus (Primary NAS) |
| Container names | splitpro, splitpro-postgresql17 |
| Local URL | http://192.168.1.80:30123 |
| External URL | https://splitpro.djchome.uk |
Access¶
Always access via https://splitpro.djchome.uk — Tailscale must be active.
Authentication is via Google OAuth (sign in with Google). Both Dan and Gabriela use their Google accounts.
Configuration¶
Containers¶
Two containers — start database first, stop app first:
| Container | Image | Notes |
|---|---|---|
splitpro-postgresql17 |
ossapps/postgres:17.7-trixie |
Custom image with pg_cron built in — do not substitute vanilla postgres:17 |
splitpro |
ossapps/splitpro:latest |
App container |
Database container — Post Arguments¶
postgres -c shared_preload_libraries=pg_cron -c cron.database_name=splitprodb -c cron.timezone=UTC
pg_cron is required by splitpro for recurring expense functionality. It is configured via Post Arguments — there are no mounted config files needed.
Key Environment Variables (splitpro container)¶
| Variable | Value |
|---|---|
NEXTAUTH_URL |
https://splitpro.djchome.uk |
NEXTAUTH_URL_INTERNAL |
http://splitpro:3000 |
GOOGLE_CLIENT_ID |
See Bitwarden: SplitPro Google OAuth |
GOOGLE_CLIENT_SECRET |
See Bitwarden: SplitPro Google OAuth |
Google OAuth credentials are in the existing homelab Google Cloud project. Redirect URI: https://splitpro.djchome.uk/api/auth/callback/google
Data¶
| Path | Contents |
|---|---|
/mnt/user/appdata/postgresql17 |
PostgreSQL data directory |
/mnt/cache/appdata/splitpro/uploads |
Receipt images and file uploads |
Backup¶
Two-stage process:
- Appdata Backup plugin runs nightly on Lotus — stops each container before copying, ensuring a consistent backup
- Daily rsync cron job copies the backup from Lotus to Cooper
Stop/start order for the backup plugin:
- Stop: splitpro → splitpro-postgresql17
- Start: splitpro-postgresql17 → splitpro
Recovery¶
Restore via the Appdata Backup plugin — works on either Lotus or Cooper.
- Restore appdata from backup using the Appdata Backup plugin on the target server
- Recreate both containers using the same template settings if not already present
- Start
splitpro-postgresql17first, thensplitpro - App runs database migrations automatically on startup
- Update DNS if restoring to Cooper
Known Issues¶
| Issue | Status | Notes |
|---|---|---|
postgres:17 vanilla image missing pg_cron |
Resolved | Must use ossapps/postgres:17.7-trixie — see below |
Why not vanilla postgres:17¶
SplitPro requires the pg_cron PostgreSQL extension, which is not included in the official postgres:17 Docker image. The ossapps/postgres:17.7-trixie image is the project's own image with pg_cron pre-installed. When updating the database container, always check the splitpro releases for the current recommended image tag rather than pulling vanilla postgres.