Open Net Worth
Open Net Worth is an open-source personal AI wealth assistant you run yourself: one ledger for your whole financial life, worked by an AI agent you control.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
Loading the full README. The saved excerpt is shown below.
Multi-company budgeting and accounting system. Budget plans, Finance executes, and
on Post a single business event writes to several independent books in parallel.
Built from the reference material in Initialization/:
The mockup is a reference for interface and behaviour only. Its data was
demo content baked into a file with no database; this application keeps none of
it.Read the full README ↗Multi-company budgeting and accounting system. Budget plans, Finance executes, and on Post a single business event writes to several independent books in parallel.
Built from the reference material in Initialization/:
| File | Role |
|---|---|
Konsep SIBA 3.0 v3.md | Concept / behaviour spec |
SIBA 3.0 DBML.txt | Source database schema |
SIBA Mockup 2.0.html | UI reference (a self-contained JS prototype) |
akui_proto_ui_reference.md | UI/UX benchmark study behind the interface design |
The mockup is a reference for interface and behaviour only. Its data was demo content baked into a file with no database; this application keeps none of it.
Built. Authentication and role-based access control, Master data, the Accounting module (chart of accounts, budget-category mapping, fiscal calendar), Budget planning through approval, and the Cash Bank Book — the append-only ledger each cash and bank resource's balance is derived from.
Not yet built. The posting engine that fans a Finance transaction out into the journal and the subject books (Prive / Titipan / Hutang / Piutang), the General Ledger, Opening Balance, and the intercompany Funding Request flow.
5432npm install
cp .env.example .env
Edit .env and set DATABASE_URL to match your Postgres password.
Set SIBA_ADMIN_PASSWORD too if you want to choose the first administrator's
password; in development the seed falls back to a weak shared password and
prints it. Outside development that variable is required and the seed refuses to
run without it. Sessions need no secret — the cookie carries an opaque random
token and everything else lives in the database.
createdb -U postgres siba30
On Windows, createdb lives in C:\Program Files\PostgreSQL\<version>\bin and
may not be on your PATH. If it isn't, either add it or create the database with
pgAdmin.
npx prisma migrate dev
npm run db:seed
The seed creates system data only. It syncs the permission catalogue, the
ADMIN and STAFF roles, the bootstrap administrator, the two Companies, the
reference tables application logic reads by label (account types, document
types, budget and partner categories, and the account category / subcategory
skeleton), and the base reporting currency.
| Role | Notes | |
|---|---|---|
[email protected] | Administrator | Bootstrap account. Address and password come from SIBA_ADMIN_*; in development the password defaults to siba123. |
[email protected] | — | Owns seeded rows. Seeded inactive with an unusable password hash, so it can never sign in. |
Everything else — partners, cash & bank resources, currencies beyond the base, the chart of accounts, budget-category mappings, fiscal years, budgets — is business data you create through the application. A fresh installation therefore starts empty, and the dashboard's Perlu Perhatian card lists what to set up first, in the order the modules depend on each other.
A Fiscal Year is the exception to "you create it": you choose a year, and the
name, the 01/01 start and the 31/12 end follow. Setting its status to Open
generates its twelve monthly periods, which are shown inside the year and are not
editable one by one — a calendar month is not a judgement call.
The seed is idempotent and deletes nothing: run it again after any release that
adds a permission. To start over from scratch, npm run db:reset drops the
database, reapplies every migration and reseeds — it destroys all data.
npm run build
npm start
Each way of running SIBA has its own fixed port, so two can run side by side:
| Run | Command | Port |
|---|---|---|
| Development server (hot reload) | npm run dev | 3000 |
| Local run — production build | npm run build, then npm start | 3010 |
| Local run of a temporary branch worktree | npm run build, then npm run start:branch | 3020 |
| Vercel-style run | npm run build, then npm run start:vercel | 3030 |
| Command | Does |
|---|---|
npm run dev | Dev server, port 3000 |
npm start | Local run of the production build, port 3010 |
npm run start:branch | A branch worktree's production build, port 3020 |
npm run start:vercel | Vercel-style production run, port 3030 |
npm run build | Production build |
npm run lint | ESLint |
npm test | Test suite (needs a migrated, seeded database) |
npm run db:seed | Sync system data — idempotent, destroys nothing |
npm run db:reset | Destructive. Drop, re-migrate and reseed |
npx prisma studio | Browse the database |
npx prisma migrate dev | Create and apply a migration |
Every route and every Server Action requires a session, and each operation requires a named permission. The model is deliberately small:
USER ──► ROLE ──► PERMISSION
A permission is one atomic capability (PARTNER_CREATE, BUDGET_APPROVE,
USER_ROLE_ASSIGN). A role bundles permissions. A user's access is exactly the
union of their active roles' permissions — there is no direct user-to-permission
grant, so there is one authoritative answer to "may this user do this?".
This is the beginning of the README. Read the rest at the original. Read the full README ↗