Open Budget Tracker.
An open-source personal budget app in English and Arabic, with USD and LBP wallets and one traceable journal.
App screenshot with synthetic test data; names and amounts are illustrative.
Try the journal
Browser demoA simplified USD sandbox with sample data. Add income or an expense, then reverse an entry to see how an append-only journal works. Changes stay on this page and reset when you reload.
Balance $1,125.00USD · derived from the sample journal
| Entry | Description | Amount (USD) | Action |
|---|
Inside the app.
Personal budgeting in English and Arabic.
Open Budget Tracker is an open-source personal budget app with English and Arabic interfaces, including a right-to-left Arabic layout. It supports USD and Lebanese pound wallets. The aim is to make two questions clear: where your money is, and what you have set it aside for.
I build and maintain the project. Its current connected money model records wallet changes and budget purposes together in one append-only journal. This portfolio page explains the engineering behind that model and offers a small USD example. Open the full app for the complete budgeting workflow, or inspect the repository to run a local preview.
Built by Daniel Awde, engineering manager and software developer in Beirut.
Decisions behind the work.
Wallets say where; the plan says what for
A wallet represents a place you hold spendable money, such as cash or a bank account. A plan item represents a purpose, such as groceries, an insurance reserve or a holiday goal. Money without a purpose is ready to assign. These are two views of the same cash, so adding the wallet total to the plan total would count that cash twice.
Expected income does not create spendable money
Planning describes intentions. Expected income and group percentages help size a plan, but only money already held or actually received can fund it. Giving existing cash a purpose is an assignment, not new income or an expense. Separating those actions makes it possible to explain a change in available money without inventing earnings or spending.
One journal, with database-enforced rules
Postgres is the authority for money changes. Protected commands append journal entries, and the database checks that wallet and purpose effects agree. The React interface reads derived results rather than maintaining an independent balance. Corrections retain a traceable history. In the page sandbox, reversing an expense adds an opposite entry while leaving the original visible, illustrating that principle in a simpler form.
English, Arabic and separate currencies
The Arabic interface uses a right-to-left layout rather than translating labels alone. USD and LBP amounts remain separate, with no implicit conversion between them. That matters when a person uses more than one currency: a displayed total needs a clear unit. The screenshots use synthetic test data; the USD sandbox is an illustration of journal behavior, not the complete multi-currency app.
Inspect the code or run a local preview
The repository includes a local preview runbook using Docker, Supabase, Node and pnpm. It runs a local backend with demonstration data so contributors can explore the workflow without using their personal finances. The source also documents database, interface and end-to-end verification. Use the current README and preview runbook for setup requirements and commands.
Stack.
Frequently asked questions.
What is Open Budget Tracker?
It is an open-source personal budgeting app with English and Arabic interfaces. Wallets show where money is held, and plan items show its purpose. A shared journal connects both views so the interface can explain balances from recorded activity.
Does it support Arabic and Lebanese pounds?
Yes. The project supports English and Arabic, including right-to-left Arabic layouts, and tracks USD and LBP amounts separately. The portfolio screenshots include an Arabic view. The interactive journal on this page uses USD only to keep the example focused.
Does assigning money to a goal count as spending?
No. Assigning money changes its purpose while it remains in a wallet. For example, setting aside cash for a future purchase does not mean the purchase has happened. Keeping assignments separate from expenses is central to the connected money model.
Will the demo save or change my real budget?
No. The page demo uses sample income and an expense in temporary browser memory. You can add entries, reverse them and reset the example. It has no connection to a budget account, and reloading the page restores the sample journal.
Can I inspect the source and try it locally?
Yes. The project is published on GitHub under the MIT license. The README links to local preview instructions and verification commands. The local preview uses a Docker-based Supabase stack and seeded demonstrations; this portfolio demo is a separate, smaller example.
Explore the project.
Repository and setup instructions ↗


