Skip to content
All projects
ProductShipped2026

Aqsha

A production-grade personal finance platform — atomic money math, multi-currency, and a recurring-billing engine.

16

normalized data models

12

currencies with FX rollups

100%

money mutations in transactions

Aqsha (“money” in Kazakh) is a Monarch/YNAB-class finance app: 16-model normalized PostgreSQL schema, strictly layered service/repository architecture, atomic reversible balance mutations, and FX rollups across 12 currencies — validated end-to-end against a live database.

01

Engineering for correctness

Finance software fails in quiet ways, so Aqsha treats correctness as the core feature. Every monetary value is a decimal, never a float. Every balance change happens inside a database transaction, and every edit is expressed as “reverse the old effect, apply the new one” so the ledger can never drift. Cross-currency transfers are a single row with an explicit FX conversion rather than two loosely coupled entries.

The recurring engine is idempotent by construction: generated transactions are deduplicated by recurring-rule and date, missed runs are caught up under a hard cap, and the cron endpoint is secured so re-delivery can't double-post.

02

Real production debugging

Shipping against a serverless Postgres (Neon) surfaced real reliability work: long interactive transactions failing over PgBouncer's pooled connections led to a rewrite of category seeding as pooler-safe bulk writes. A Recharts 2 → 3 upgrade was forced by React 19 removing function-component defaultProps — identified, diagnosed, and migrated.

Features cover the full personal-finance surface: dashboards computed from live data, six account types, budgets with subcategory roll-up, savings goals with auto-completion, tags, search, and month-to-month navigation.

03

Highlights

  • Strictly layered architecture — UI → TanStack Query → route handlers → Zod validation → services → repositories → Prisma → PostgreSQL; no handler touches the database directly
  • Money correctness: all values stored as PostgreSQL NUMERIC / Prisma Decimal, never JS floats; balances derived per account type with liability sign-flipping
  • Atomic, reversible mutations: create/edit/delete recompute balances inside database transactions; edits reverse the prior effect and apply the new one atomically
  • Idempotent recurring-transaction engine deduplicated by (recurringId, date), with a catch-up cap so retries never double-post
  • Multi-currency FX: net worth and budget spend computed across mixed-currency accounts via a USD-base rate table, 12 currencies supported
  • Every user-owned query scoped by userId — IDOR-safe tenant isolation; caught a category-reparenting bug and a unique-constraint race through adversarial code review