2026

Financial Plan: a local-first budgeting app

A local-first budgeting PWA: data lives on the device and works offline, syncs both ways between devices in a single request, and every change lands in a PostgreSQL audit log where a quiet edit gets caught.

Financial Plan: a local-first budgeting app

Built with

  • Fastify
  • PostgreSQL
  • IndexedDB
  • PWA
  • React

Write-ups

  1. A tamper-evident audit log in PostgreSQL with hash chains and HMAC

    Building an audit log whose history can’t be quietly rewritten, layer by layer, plus detecting truncation and clearing IPs without breaking the chain.

    Read →

  2. Local-first PWA sync: last-writer-wins done carefully

    Offline-first sync with IndexedDB: idempotent pushes, tombstones, seq order with advisory locks, server-corrected clocks, and data shaped to avoid conflicts.

    Read →

  3. An installed PWA on iPhone: safe updates, deploys and iOS details

    Updates that wait for the user, deploys that broke open tabs, a launch logo measured on the device, zooming fields, and Web Push for a local-first app.

    Read →

  4. Parsing money the way Vietnamese people type it: 2,5tr, 500k and 1tr+500k

    Units like tr and tỷ, a dot that means two things, sums typed as in Excel, a caret that stays put, and the missing + key on phone keypads.

    Read →