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.
Manage employee payroll, track hours, and compute salaries with voice-command entry
AI summary · website content
FinanceJavaScript · TypeScriptGitHub @Jayronj0616OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗1:1 port of the Laravel payroll system to Next.js (App Router) for Vercel + Supabase Postgres. No authentication (matches the source app — this is meant to sit behind a private Vercel URL only you know).
Install dependencies
npm install
Create the Supabase tables
Open your Supabase project → SQL Editor → run the files in supabase/migrations/ in numeric order (001-initial-schema.sql, 002-multiuser.sql, etc.). See supabase/migrations/README.md for details.
Env vars
Copy .env.example to .env.local and fill in your Supabase project's URL and keys (Project Settings → API):
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=
The service role key is used server-side only (Server Components/Actions) since there's no auth/RLS — never expose it to client code.
Run locally
npm run dev
Deploy to Vercel Push to a git repo, import into Vercel, and set the same three env vars in Vercel's Project Settings → Environment Variables.
employees / payrolls tables — same columns, same (employee_id, payroll_date) uniqueness (now enforced as a real DB constraint instead of just updateOrCreate semantics)total = (daily_rate * days_worked) + ((daily_rate / 8) * overtime_hours) — unchangedPULONG, TATA ROMY, ARIEL, WILSON → MF, everyone else → BASE 3) — lib/employee.tslib/employee.tsapp/payrolls/PayrollsClient.tsxhttp://localhost testing works too since browsers treat localhost as a secure context.?success= query param that gets stripped from the URL after the toast fires. Functionally equivalent, slightly different mechanism.