Skip to content
ilramdhanPublic

About

Dompetku — a private, self-hosted personal finance tracker: budgets, goals, recurring & split transactions, gold & net worth, Telegram bot, receipt OCR, 2FA and backups.

Topics

Resources

Code of conduct

Contributing

Security policy

Accessibility

Stars

25 stars

Watchers

5 watching

Forks

Latest commit

 

History

323 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

English · Bahasa Indonesia

Dompetku — catat keuangan pribadi dengan rapi: Telegram bot, receipt OCR, dashboard, budgets and gold tracking

Dompetku

A private, self-hosted personal finance tracker with a Telegram bot and receipt OCR.

GitHub stars Latest release CI License: MIT TanStack Start Supabase Vercel Live demo

Demo credentials are shown on the login page (one-click Masuk ke demo). Fake data, resets daily at 00:00 WIB.

⭐ If Dompetku helps you, star the repo — it helps others find it.

Dompetku ("my wallet" in Indonesian) helps you track income, expenses, transfers, installments, subscriptions, budgets, savings goals, gold and money people owe you, all in one place. Log a coffee by sending "kopi 25rb" to your own Telegram bot, or snap a photo of a receipt and let AI fill in the details. Everything lives in your own Supabase database and your own Vercel deployment, so your financial data stays yours.

It is built for you and your family: the owner login is defined in environment variables, and the owner can add family members from the web UI, each with access to only the wallets you choose (view or manage). No sign-up pages, no shared servers. The interface is available in Indonesian and English (switch any time), and amounts support IDR and USD.

Note

Dompetku was designed with Indonesian users in mind (Rupiah, local banks and e-wallets, Antam gold prices, chat shortcuts like 25rb / 2jt), but it works for anyone who tracks money in IDR and/or USD.

Table of contents

What's new in v1.7

A plain-language summary of the v1.7 release, ready to share: Reports and the Yearly recap can now be filtered by wallet, dark mode is easier to read (and works better with screen readers), and pages load faster on phones and show their data right away. No database changes this time; just update the app.

Apa yang baru di Dompetku v1.7 (Bahasa Indonesia) What's new in Dompetku v1.7 (English)

Full size: Bahasa Indonesia · English · Changelog

Previously in v1.6: Docker image, search-friendly landing page, streamed AI answers and sponsors

Apa yang baru di Dompetku v1.6 (Bahasa Indonesia) What's new in Dompetku v1.6 (English)

Previously in v1.5: bot settings in the app, profile page, family accounts and pockets

Already on v1.4 or older? Run supabase/schema.sql once more for the v1.5 features; everything else is optional.

Apa yang baru di Dompetku v1.5 (Bahasa Indonesia) What's new in Dompetku v1.5 (English)

Live demo

Try it without installing anything: https://demo.dompetku.ilramdhan.dev

  • The demo login is shown on the login page — click Masuk ke demo to sign in with one click.
  • All data is fake and resets daily at 00:00 WIB; feel free to add, edit and delete.
  • AI receipt scanning, photo upload, CSV import, restore, app settings and the Telegram bot are turned off in the demo. Want to run your own public demo? See docs/DEMO.md.

Screenshots

All screenshots use the fictional demo data and follow your GitHub theme (light or dark). Regenerate them with bun run screenshots (see Regenerating screenshots).

Dompetku dashboard — personal finance overview with balances, net worth, cash flow and spending per category

Dompetku transactions list — personal expense tracker with search, filters, sorting and CSV/PDF export
Transactions: Search, filter and sort every transaction; CSV import/export and PDF.
Dompetku reports — monthly spending trends per category over 6 or 12 months and a yearly recap
Reports: Category trends over 6 or 12 months and a yearly recap.
Dompetku budgets — monthly budget per category with rollover and 80% / 100% alerts
Budgets: Monthly budgets with rollover and 80% / 100% alerts.
Dompetku wallet detail — 12-month bank account balance chart, spending per category and reconciliation
Account detail: 12-month balance, spending per category and reconciliation.
Dompetku savings goals — progress bars, monthly target and projected completion date
Savings goals: Progress, monthly target and projected completion date.
Dompetku gold tracker — Antam and world (XAU) gold prices with unrealised profit
Gold: Antam and world gold prices with unrealised profit.
Dompetku recurring transactions — salary, rent and top-ups posted automatically when due
Recurring transactions: Salary, rent and top-ups posted automatically when due.
Dompetku settings — categories, app settings and optional two-factor (TOTP) login
Settings: Categories, app settings and optional two-factor login.
Dompetku wallet detail with Kantong (pockets) — envelope budgeting inside one wallet with low-balance badge
Kantong (pockets): Envelopes inside a wallet with what is left this month and a low-balance badge.
Dompetku transaction form with the Kantong (pocket) select open while recording an expense
Kantong on transactions: Pick the wallet's pocket when recording an expense, income or transfer.
Dompetku dashboard pocket alert — pockets at or below their low-balance threshold this month
Pocket alerts: The dashboard flags pockets at or below their threshold this month.
Dompetku family members settings — add users and choose which wallets each can view or manage
Family members: Add members and choose which wallets they can view or manage.
Dompetku integrations settings — configure Telegram bot, AI receipt OCR, email and n8n with encrypted secrets
Integrations: Configure the Telegram bot, AI, email and n8n from the web UI; secrets stay encrypted.
Dompetku profile page — name, address, avatar and password change
Profile: Name, address, avatar and password change.

On your phone and in Telegram

Dompetku dashboard on a mobile phone — mobile-first personal finance app Dompetku transactions list on a mobile phone Dompetku Telegram bot — expense preview with Save/Cancel buttons, budget alert and /saldo balance command

Features

Money tracking

  • Income, expenses and transfers between accounts (banks, e-wallets, cash, and so on) with live balances.
  • IDR and USD amounts with an automatic daily exchange rate.
  • Debts and installments (paylater, loans) with payment tracking.
  • Subscriptions, monthly or yearly, in IDR or USD, with optional tax.
  • Account fees: transfer, top-up and monthly admin fees recorded as separate expenses.
  • Recurring transactions (salary, rent, regular transfers) posted automatically when due. A long-missed schedule posts only its latest 12 occurrences; resuming a paused one skips what was missed while paused.
  • Split transactions: split one receipt across several categories.
  • Up to 5 receipt photos per transaction, stored privately, plus search by receipt item name.
  • CSV import with a preview, duplicate detection and optional creation of new categories or accounts.

Budgets and goals

  • Monthly budgets per category, with optional rollover of unused amounts.
  • Instant alerts at 80% and 100% of a budget, on the web and in the bot.
  • Savings goals, optionally linked to a savings account.
  • Kantong (pockets) inside a wallet: earmark part of one wallet's money (e.g. Mandiri → Makan 500rb, Transport 250rb), monthly or running, with an "unallocated" figure and alerts when a pocket runs low or is empty, on the web and in the bot (kopi 25rb #makan, /kantong; schema v19).

Assets and net worth

  • Gold savings with daily world (XAU) and Antam prices, optionally linked to an account.
  • Receivables (money others owe you) with partial payments.
  • Net worth that counts account balances, gold and outstanding receivables.
  • Multi-user (family): add members in Settings → Pengguna and give each one view or manage access per wallet; members only see the dashboard, transactions, accounts and reports of their wallets (schema v18).

Automation

  • Telegram bot: record transactions by chat (kopi 25rb, gaji masuk 8jt ke BCA) or by sending a receipt photo. Chat and receipt entries are shown as a preview with buttons before they are saved (change the category, account, type or description — even for a receipt); /undo removes the last one. /bayar <name> (subscription or installment payment) and /tarik <amount> dari <account> (cash withdrawal) are recorded immediately, without a preview. Slash commands give balances, reports, bills, budgets and more.
  • Receipt OCR in the web app and the bot, using any OpenAI-compatible AI provider (for example Google Gemini or OpenAI).
  • Reminders for upcoming bills via Telegram or email, plus daily, weekly and monthly reports, all scheduled by ready-to-import n8n workflows.

Reports

  • Dashboard with cash flow, category breakdowns and net worth charts.
  • Monthly reports, a printable yearly summary with CSV export, for all wallets or one wallet (transfers in and out included).
  • Per-account report with a balance chart and bank statement reconciliation.
  • Activity log of every change.

Security and privacy

  • Your database, your server. The browser never talks to the database; only server code holds the key, and database row-level security blocks everything else.
  • Single-user login with a signed, httpOnly session cookie and a brute-force login limit.
  • Optional two-factor login (TOTP) with any authenticator app.
  • Privacy mode (eye icon or Shift+H) hides every amount, balance and chart value on the current device, handy when sharing your screen.
  • Telegram bot answers only the chat IDs you allow.

Reliability and experience

  • Backup and restore of all data as one JSON file, plus an optional weekly automatic backup to Google Drive or email via n8n.
  • Error monitoring: structured server logs and optional Sentry reporting.
  • Installable as an app (PWA) on phone and desktop.
  • Indonesian / English interface and light / dark theme.
  • Mobile-first design that works on small screens.

Deploy your own in ~20 minutes

You need free accounts on GitHub, Supabase and Vercel. No coding is required.

  1. Fork this repository to your GitHub account (the Fork button at the top right of this page).
  2. Create a Supabase project, open SQL Editor, paste the contents of supabase/schema.sql and click Run.
  3. Import your fork into Vercel (or use the button below).
  4. Add the required environment variables: SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY, APP_USERNAME, APP_PASSWORD and SESSION_SECRET (a random string of at least 32 characters).
  5. Deploy, open your site and log in. Add the Telegram bot, OCR and reminders later if you want them.

Deploy with Vercel

Important

The button deploys the app, but you still need to run supabase/schema.sql in your Supabase project (step 2) before logging in. Never share your SUPABASE_SERVICE_ROLE_KEY: it gives full access to your database.

Prefer your own server? An official multi-arch Docker image (ghcr.io/ilramdhan/dompetku) and a docker-compose.yml are published for every release: docker compose up -d with your .env, behind an HTTPS reverse proxy. Supabase stays external. See SELF-HOSTING.md → Docker.

The complete, beginner-friendly walkthrough (exact clicks, optional features, updating and troubleshooting) is in docs/SELF-HOSTING.md. Every environment variable is explained in docs/ENVIRONMENT.md.

Tech stack

Layer Technology
App TanStack Start (React 19, SSR, server functions)
Data & UI TanStack Router & Query, Tailwind CSS v4, shadcn/ui (Radix), Recharts, zod
Database Supabase PostgreSQL + private Storage (server-only)
Hosting Vercel serverless, Lovable or Docker (Node)
Automation n8n + Telegram Bot API
AI Any OpenAI-compatible API (receipt OCR and chat parsing)
Extras Resend (email, optional), Sentry (errors, optional)
Quality Vitest, Testing Library, ESLint, Prettier, GitHub Actions

How it all fits together, with diagrams: docs/ARCHITECTURE.md.

Project structure

src/
  routes/        Pages (file-based) and the /api/public/n8n/* API used by n8n
  components/    UI components (shadcn/ui in components/ui, lazy charts in components/charts)
  lib/           Business logic: *.server.ts = server-only, *.functions.ts = server functions,
                 other files = pure, tested helpers
  test/          Vitest test suites
supabase/        schema.sql — the whole database, in re-runnable sections v1–v13
n8n/             Importable n8n workflows: Telegram bot, schedules, error alerts, backup
docs/            Documentation
public/          PWA manifest, icons and self-hosted fonts

Documentation

Document What it covers
Self-hosting guide Step-by-step install: Supabase, Vercel, first login, optional features, updates
Environment variables Reference for every setting
n8n, Telegram & email Telegram bot, reminders, reports, weekly backup, Google Drive, Gmail SMTP, Resend
Architecture Tech stack, directory layout, data flows, contributor rules
FAQ Common questions and troubleshooting
Public demo How the live demo works and how to run your own
n8n templates What each workflow file does
Changelog Notable changes
Contributing How to propose changes
Security policy How to report a vulnerability
Accessibility Accessibility goals, supported environments, known gaps and how to report barriers

Local development

Open in GitHub Codespaces

Prefer zero setup? Open the repo in GitHub Codespaces: the dev container installs dependencies and includes Docker, so bun run db:up, bun run dev and bun run test work right away.

Locally, you need Node.js 22 or newer, Bun (the primary package manager, used by CI) and a Supabase project with the schema applied. npm also works (npm install / npm run <script>).

git clone https://github.com/<your-username>/dompetku.git
cd dompetku
bun install
cp .env.example .env    # then fill in at least the five required variables
bun run dev             # open the URL printed in the terminal
Command What it does
bun run dev Start the development server
bun run build Production build
bun run lint ESLint
bun run typecheck TypeScript check
bun run test Run all tests once (bun run test:watch to keep watching)
bun run format Format the code with Prettier
bun run gen:types Regenerate database types (needs SUPABASE_PROJECT_ID and the Supabase CLI)

More detail is in the local development section of the self-hosting guide.

Contributing

Contributions are welcome, from typo fixes and translations to new features. Please read CONTRIBUTING.md and the Code of Conduct first. Before opening a pull request, make sure bun run lint, bun run typecheck, bun run test and bun run build all pass; CI runs the same checks. Contributor rules (schema sections, i18n, privacy mode and more) are summarised in docs/ARCHITECTURE.md and listed in full in AGENTS.md. For user-facing changes, also follow the accessibility expectations.

Security

Please do not open a public issue for security problems. See SECURITY.md for how to report a vulnerability privately.

License

Released under the MIT License. Copyright (c) 2026 Ilham Ramadhan.

Every instance also serves short, public privacy policy (/privacy) and terms (/terms) pages written for a self-hosted deployment; they are linked from the landing page footer. Edit src/components/legal/legal-content.ts (and the matching English strings in src/lib/i18n.tsx) if your instance needs different wording.

Contributors

Thanks to everyone who has helped build Dompetku. Want to join them? Pick a good first issue.

Dompetku contributors

Star history

Dompetku GitHub star history chart

Acknowledgements


If Dompetku is useful to you, please consider giving it a star, or support its development via GitHub Sponsors. Feedback, ideas and bug reports are welcome in GitHub Issues.

About

Dompetku — a private, self-hosted personal finance tracker: budgets, goals, recurring & split transactions, gold & net worth, Telegram bot, receipt OCR, 2FA and backups.

Topics

Resources

Code of conduct

Contributing

Security policy

Accessibility

Stars

25 stars

Watchers

5 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages