Split expenses. Settle cleanly. Work offline.
Shared trips, household costs, and personal budgets — with balances that stay clear
when everyone chips in. Flutter · offline-first · optional Supabase sync.
Open the web app · Latest release · Documentation
| Groups & people | Trips, events, or household lists — with participants linked to real accounts when online. |
| Expenses | Multi-currency amounts, categories, receipts, equal / parts / amounts splits, transfers. |
| Balance & settle-up | Who owes whom, minimal settlement suggestions, record payments in one tap. |
| Profile | Cross-group dashboard: net balances, KPIs, personal budgets, and an in-app activity feed (online). |
| Personal lists | Solo budgets and spending (no split UI); optional Android notification scanner drafts. |
| Offline-first | Full local SQLite. Sync, invites, and members when you connect Supabase. |
| Locales | English and Arabic (RTL), themes, and subtle accent controls. |
Modes
| Mode | Data | Extra |
|---|---|---|
| Local-only (default) | Device SQLite | Everything except sign-in & cross-device sync |
| Online | Supabase + local cache | Invites, members, push, multi-device |
Temporarily offline in online mode: expense writes queue and sync later. Invites and member admin need a connection.
Live at hisab.shenepoy.com (Firebase Hosting).
Install from the in-app banner when offered (Chromium Android uses the native install prompt; iPhone/iPad and other mobile browsers get Add-to-Home-Screen steps). On iOS, open the Home Screen app for web push. Works offline after install.
| Option | |
|---|---|
| Obtainium (recommended) | Add Hisab — tracks GitHub Releases |
| APK | Download app-release.apk from latest release |
| Play Store | Listing (WIP / when published) |
Requirements: Flutter / Dart ^3.10
flutter pub get
dart run build_runner build --delete-conflicting-outputs
flutter runNo --dart-define → local-only mode.
Online (hosted Supabase):
flutter run \
--dart-define=SUPABASE_URL=https://YOUR_PROJECT.supabase.co \
--dart-define=SUPABASE_ANON_KEY=YOUR_ANON_KEYOr use define files (gitignored): copy dart_defines_online.example.json / dart_defines_local.example.json, then launch with --dart-define-from-file=... (see .vscode/launch.json).
Web: generate WASM once if needed:
flutter pub run powersync:setup_webFuller local stack (Supabase + Edge Functions on LAN):
./scripts/local_test_env.sh upDetails: docs/LOCAL_TEST_ENV.md · docs/CONFIGURATION.md · docs/SUPABASE_SETUP.md
| Issue | Fix |
|---|---|
| Stays local-only | Pass both SUPABASE_URL and SUPABASE_ANON_KEY |
| SQLite crash on web | flutter pub run powersync:setup_web |
| OAuth redirect fails | Align Supabase Auth redirect URLs with your app / SITE_URL |
| Migration errors | Stable network; migrations are idempotent — see Supabase setup docs |
- UI / state — Flutter, Riverpod 3 (codegen), GoRouter
- Local DB — SQLite via PowerSync package (always on)
- Cloud — Optional Supabase (Auth, Postgres, RPCs, Edge Functions)
- Sync — Online writes to Supabase then cache; reads from SQLite; pending queue when offline
- Domain — Groups, participants, expenses (cents), balances, settlements, invites
Deeper map: docs/CODEBASE.md
| Guide | |
|---|---|
| Documentation index | All topics |
| Configuration | --dart-define, online vs local |
| Supabase setup | Project, migrations, auth, Edge Functions |
| Local test env | Podman / CLI stack for device + Edge tests |
| Security | Public-repo secret policy (what never to commit) |
| GitHub Actions secrets | CI/CD secret names and sources |
| Tests | Unit, widget, integration, online |
flutter test
# Local stack + Edge smoke
./scripts/local_test_env.sh up
./scripts/local_test_env.sh test-edge
# Online integration (Docker/Podman + Supabase CLI)
./scripts/run_online_tests.shCI builds Android, deploys web, and runs tests on tags v* / manual dispatch (.github/workflows/release.yml). Secrets live in GitHub Actions — see docs/GITHUB_ACTIONS_SECRETS.md, not in this repo.
This repository is public. Never commit real keys, service-account JSON, or filled define/env files. Use *_example templates and SECURITY.md.
CC BY-NC-SA 4.0 — share and adapt with attribution, non-commercial only, same license for derivatives.
Full text: LICENSE.