Self-hosted finance manager for Georgian banks.
Georgian banks don't provide public APIs for accessing transaction data. There's no way to programmatically track your spending, build budgets, or analyze your finances. You're stuck with whatever the bank's app shows you — no exports, no integrations, no control.
But banks do send SMS notifications for every transaction.
Xarji reads bank SMS notifications from your Mac's Messages app, parses the transaction details, and syncs them to your own InstantDB instance. You get a real-time dashboard with analytics, category breakdowns, and full control over your financial data.
Your data never touches third-party servers — everything runs locally on your machine.
Messages.app → xarji service (parses SMS) → InstantDB (your account) → xarji client (dashboard)
- Bank of Georgia / Solo
- TBC Bank
- Liberty Bank
- Credo Bank
- Basis Bank
- Tera Bank
- Custom sender IDs
- macOS (Messages app is the data source)
- Bun runtime
- Free InstantDB account
- Bank SMS notifications enabled on your Mac
git clone https://github.com/tornikegomareli/Xarji.git
cd Xarji/service
bun install
bun run setupThe setup wizard walks you through everything:
- Paste your InstantDB App ID and Admin Token
- Pick your banks from the list
- It checks macOS Full Disk Access
- Generates all config and env files
- Pushes the database schema to InstantDB
Then start the client:
cd ../client
bun install
bun run devOpen http://localhost:5173.
Start the service (foreground):
cd service && bun run startInstall as background daemon (auto-starts on login):
cd service && bun run install-serviceOther commands:
bun run status # check service status
bun run test-parse # test SMS parsing without syncingXarji/
├── service/ # Bun backend — reads Messages.app, parses SMS, syncs to InstantDB
│ └── src/
│ ├── setup.ts # Interactive onboarding wizard
│ ├── service.ts # File watcher + polling daemon
│ ├── parser.ts # Georgian bank SMS parser
│ ├── instant-sync.ts # InstantDB sync layer
│ └── config.ts # ~/.xarji/config.json management
├── client/ # React dashboard — Vite + Tailwind + Recharts
│ └── src/
│ ├── pages/ # Dashboard, Transactions, Analytics, Categories, Settings
│ ├── hooks/ # InstantDB query hooks
│ └── components/ # UI components and charts
- Service: Bun, TypeScript, SQLite (local state)
- Client: React, Vite, Tailwind CSS, Recharts
- Database: InstantDB (real-time sync, user-owned)
All SMS parsing happens locally on your Mac. InstantDB is your own account — no shared databases, no analytics, no telemetry. Delete your data anytime from the Settings page.
MIT