Personal Finance / ProductFeatured

Money

A private, local-first personal ledger

A private and recoverable PWA built around years of real bookkeeping habits, combining fast mobile entry, cross-device sync, and progressive access to the full ledger history.

  • PWA
  • Local-first
  • Cloudflare D1
  • Service Design
FeaturedResponsive PWA / Private serviceCase study public · Product access privateMobile WebDesktop WebPWACreated 2026-07-13Updated 2026-07-14
Money cover

Overview

What shaped the work

Outcome

Results and impact

  • Closed the demo-to-production loop in roughly 24 hours elapsed time.
  • Created a verifiable, exportable, recoverable private ledger used as a real service.

Decision

Key decisions and tradeoffs

  • Used Worker + D1 as the source of truth and IndexedDB as the local read layer.
  • Stopped expanding scope and prioritized real loading and history-navigation friction.

Evidence

Evidence and proof

  • 15 staged commits plus architecture, verification, and backup documentation.
  • Production site, mobile screenshots, and automated release gates.

Case study

Narrative, decisions, and proof

01

Outcome

Results and impact

  • Closed the demo-to-production loop in roughly 24 hours elapsed time.
  • Created a verifiable, exportable, recoverable private ledger used as a real service.

02

Decision

Key decisions and tradeoffs

  • Used Worker + D1 as the source of truth and IndexedDB as the local read layer.
  • Stopped expanding scope and prioritized real loading and history-navigation friction.

03

Evidence

Evidence and proof

  • 15 staged commits plus architecture, verification, and backup documentation.
  • Production site, mobile screenshots, and automated release gates.

04

Role

Role and contribution

  • Owner / Product Engineer across product, design, frontend, backend, data migration, and release.

05

Problem

Problem to solve

  • Turn years of private bookkeeping data into a trustworthy, low-friction, maintainable personal product.

06

Constraints

Constraints and boundaries

  • Financial data must remain private.
  • Mobile experience comes first while maintaining one Web/PWA codebase.

07

Background

Why this exists

Years of personal finance data should not remain trapped in a closed tool. This project turns that history into an owned system that stays private, exportable, recoverable, and open to continuous product improvement.

08

Scenario

Core scenarios

  • Record an expense quickly on mobile and confirm it in the daily ledger.
  • Review year, month, and week trends, then drill into categories, dates, and transactions.
  • Search all historical notes, subcategories, and categories by keyword.
  • Organize categories, export data, and manage the private account on desktop.

09

Delivery

What I shipped

  • Moved from visual demo to production private PWA across roughly 24 hours elapsed time and 15 staged commits.
  • Shipped authentication, database-backed CRUD, category management, export, search, PWA behavior, and a production domain.
  • Added 14 automated tests plus type, build, and leak-scan release gates.
  • The AI collaboration log recorded about 139.8M tokens, roughly 96.5% cached long-thread context; the $125.83 flat-rate estimate is not an actual provider bill.

10

Design

Design decisions

  • A monochrome workbench keeps yellow reserved for recording, selection, and sync feedback.
  • The taxonomy was rebuilt into 12 spending domains with one stable home for each concrete item.
  • Recording is a global mobile action while desktop emphasizes analysis, search, and management.
  • Large loading states were replaced by in-place progress and quiet skeletons so content remains primary.

11

Tech

Implementation

  • React, TypeScript, and Vite power the responsive PWA; Cloudflare Worker and D1 provide authentication and relational storage.
  • IndexedDB stale-while-revalidate keeps ledger, analytics, search, and category details immediately available locally.
  • Stable cursor pagination progressively traverses full history and search results; integer cents and idempotency protect writes.
  • A same-origin Vercel proxy connects the Worker API, with migrations, backup, restore, and production smoke checks.

12

Access

Access boundary

  • The live product remains behind a private login with no public registration.
  • Portfolio imagery uses synthetic data and never exposes real financial records.
  • The public case study focuses on product judgment and architecture without account or infrastructure details.

Flow

The path from entry to completion

This project is best read through the product shape itself: screenshots, access boundaries, and the sequence of key tasks explain the experience more clearly than a single static description.

Record / Sync / Review / Search / Own

Money flowRecordSyncReviewSearchOwn

Explore

Continue through the material

Money preview

Access

This entry is still part of a living practice. The public surface may be a live URL, a guided preview, or a curated set of interface states depending on the current release shape.