Settl is two pieces: a static web app, and a Supabase backend (Postgres with sign-in and file storage). Run both yourself and every expense your group adds stays on infrastructure you control.
What you need
- A Supabase instance you control.
- Somewhere to host static files.
- Node.js 20 on your computer to build the app.
1. Run Supabase on your own server
Self-hosting Supabase by hand means Docker Compose, a reverse proxy, TLS certificates and keeping a server patched. If you would rather skip that, Selfhost.dev offers Supabase as a one-click template on a dedicated server it provisions and maintains for you, so the data is on your server without the operations work. You can also follow Supabase's own self-hosting docs if you prefer to run everything yourself.
Note your instance's API URL and anon key. Set its site URL to wherever you will host the app (for example https://split.yourdomain.com/app/).
2. Create the database
Clone the Settl repository and apply the migrations in supabase/migrations in order, using the Supabase CLI or the SQL editor. They create the tables, the row-level security rules and the functions the app uses.
3. Build the app
npm ci
VITE_SUPABASE_URL=https://your-instance VITE_SUPABASE_ANON_KEY=your-anon-key npm run build:deploy
This produces a dist-deploy folder: the landing page at the root and the app under /app.
4. Host it
Upload dist-deploy to any static host. If you want it on the same provider as your database, Selfhost.dev can also build and run a Docker container from your repo; serve the folder with any small web server image. Point your domain at it and you are done.
5. Check it
- Sign in, add a friend, add an expense.
- Open the database and confirm the rows are there, on your server.
- Keep backups: download a database dump on a schedule.
Questions? Use the suggestion form on the roadmap.