All works
Laby Finance
AIFintechNext.jsPrismaPostgreSQL

Laby Finance

Wayan Phantom Megaditha

Wayan Phantom Megaditha

Fullstack Developer

GitHub ↗

The Problem

Personal finance apps in Indonesia track spending. They show bar charts of categories and send notifications when you overspend. None of them give you a real financial position: net worth, cash flow trends, or an income statement over twelve months. Understanding where your money actually stands requires the same tools companies use, double-entry bookkeeping and three standard financial reports. Those tools have never been packaged cleanly for individuals. Laby is that product.


How It Works

  1. Every transaction creates balanced journal entries automatically. The user selects a category (mapped to a chart of accounts entry) and enters an amount. The debit and credit sides are calculated by the system.
  2. The chart of accounts follows Indonesian accounting conventions with 62 default accounts across Assets, Liabilities, Equity, Revenue, and Expenses. Amounts are stored as integer cents to avoid floating-point rounding errors.
  3. The Income Statement, Balance Sheet, and Cash Flow Statement are calculated in real time from raw journal lines. They are always consistent with the underlying data because there is no separate aggregation layer.
  4. The AI entry layer accepts a bank screenshot or a natural language description. Gemini parses it into a structured draft entry with account, amount, and date.
  5. No AI result auto-commits. Every draft requires explicit user confirmation before hitting the database. The confirmation step is non-negotiable for financial data.
  6. The audit log records every create, update, and delete with a timestamp and source: manual, screenshot AI, or chat AI. Soft deletes only. Nothing is permanently removed.

Tech Stack

Next.js 15App Router with React Server Components for fast dashboard loading
PrismaORM with ACID transaction support, maps naturally to journal entries and account hierarchies
Neon PostgreSQLServerless Postgres with branching, zero infrastructure management
Auth.jsHandles session management and provider integrations without custom auth code
Gemini APIReliable structured output extraction from bank screenshots at the volume this app needs
ZodSchema validation on AI-parsed entries before any data hits the database

What I Would Improve

The chart of accounts is fixed at 62 entries. A real accounting system lets users add custom accounts within each category. Adding account creation and the ability to reclassify existing entries would make Laby usable for more complex financial situations. The AI parsing for bank screenshots works well on major Indonesian bank formats but fails on unusual layouts. Training on a wider range of screenshot formats or adding a manual fallback edit step after parsing would improve reliability. Budget tracking is missing. Adding a budget layer that compares actual versus planned spending per account category would complete the personal finance use case.

Screenshots

Wayan Phantom Megaditha

Wayan Phantom Megaditha

Fullstack Engineer · AI & Web3

Next.jsPrismaPostgreSQLGemini AIAuth.jsRecharts