Skip to content

Latest commit

 

History

284 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Dompetku

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

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.

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 one person (you): a single login defined in environment variables, 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

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 npm run screenshots (see Regenerating screenshots).

Dashboard: balances, assets, cash flow and spending per category

Transactions
Transactions: Search, filter and sort every transaction; CSV import/export and PDF.
Reports
Reports: Category trends over 6 or 12 months and a yearly recap.
Budgets
Budgets: Monthly budgets with rollover and 80% / 100% alerts.
Account detail
Account detail: 12-month balance, spending per category and reconciliation.
Savings goals
Savings goals: Progress, monthly target and projected completion date.
Gold
Gold: Antam and world gold prices with unrealised profit.
Recurring transactions
Recurring transactions: Salary, rent and top-ups posted automatically when due.
Settings
Settings: Categories, app settings and optional two-factor login.

On your phone and in Telegram

Dashboard on mobile Transactions on mobile Telegram bot: preview with Save/Cancel, budget alert and /saldo

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.
  • 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.

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.

Automation

  • Telegram bot: record transactions by chat (kopi 25rb, gaji masuk 8jt ke BCA) or by sending a receipt photo. Every entry is shown as a preview with buttons before it is saved; /undo removes the last one. 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.
  • 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.

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 (also runs on Lovable)
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

You need Node.js 22 or newer (or Bun, which CI uses) and a Supabase project with the schema applied.

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

Acknowledgements


If Dompetku is useful to you, please consider giving it a star. 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

16 stars

Watchers

3 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages