UangKu
Full-Stack Developer
UangKu is a production personal-finance PWA (live at uangku-web.my.id) built with Next.js 16, FastAPI, and PostgreSQL, featuring proactive category budgeting, payday-aware safe daily spend calculations, and server-synced recurring reminders. The platform is hardened with Argon2 HTTP-only sessions, automatic Google OAuth linking, and a 500+ automated test suite spanning pytest, Vitest, and Playwright E2E.
Key features
Proactive budget thresholds & safe daily spend
Per-category spending limits enforce proactive 75% amber and 90% critical alert thresholds via server-side PostgreSQL aggregations, paired with a payday-aware algorithm that divides net liquidity across remaining pay-cycle days.
Idempotent cross-device recurring reminders
Recurring commitments persist in PostgreSQL to keep reminders synchronized across authenticated devices without auto-debit risks, executing monthly user confirmations as atomic transactions backed by HTTP 409 conflict guards.
Hardened Argon2 sessions & OAuth linking
Authentication pairs HTTP-only signed session cookies with 7-day rolling lifetimes, server-enforced absolute caps, and memory-hard Argon2id hashing, automatically linking Google OAuth 2.0 profiles to existing email accounts.
500+ automated tests & injection-safe reporting
A multi-tier test pyramid of 323 pytest API tests, 177 Vitest frontend suites, and Playwright E2E browser flows enforces strict regression boundaries, paired with formula-injection sanitized CSVs and landscape A4 PDF reports.
Screens
A walk through the key screens in UangKu, one at a time.

Beranda
The daily home screen. Overall balance, this month’s income and expenses and a safe-to-spend recommendation sit above a weekly reflection, so the money picture is read in one glance.

Anggaran
Category budgets for the month. A total allocated figure heads the page, then each category shows what is spent against its limit with inline progress, all saved with a debounced autosave.

Landing
The public landing screen. It states the promise plainly — record what comes in, understand what goes out, stay calm — and shows the app itself before asking for a sign-up.
