Jose Rivera Morales
← All writing

Engineering a local finance workspace

I built Personal Finance to turn account exports into a consistent, explorable financial history. The project combines a Windows desktop application with a validated import pipeline, keeping source documents portable and analytical results traceable to the records behind them.

The interface uses React and TypeScript, with ECharts for visualization and Motion for transitions. Electron provides the desktop shell, while a Python importer reads standardized Excel workbooks. Original exports remain in an iCloud Drive archive; a rebuildable local cache supplies the dashboard. Separating the archive from application state keeps the documents useful independently of the software.

Data integrity drives the import design. The importer validates account references, unique identifiers, dates, currencies, and manifest row counts before publishing a new snapshot. It retains source-row references, hashes the workbook, and preserves the original alongside an audit report. The active cache is replaced atomically after validation, so a rejected import leaves the previous dataset available.

Automatic refresh runs on launch and every minute while the application is open. Unchanged files skip reimporting. Updated exports must retain previously accepted accounts and posted transactions, preventing a partial export from silently truncating history. This version consumes complete snapshots; incremental merging across separate account exports is a planned extension.

The analysis layer uses integer cents for monetary aggregation, excludes pending transactions from posted totals, and separates source-classified transfers from income and expenses. Potential duplicates remain available for review. Account coverage is visible because adding a bank or filling a historical gap can change a trend without reflecting a change in spending behavior.

The desktop renderer accesses local data through a restricted IPC bridge with context isolation and sandboxing. Transaction filters, source details, and back/forward navigation support moving from a chart to its underlying records and returning to the same view. A separate synthetic workspace supports interface experimentation without exposing financial records.

The delivered application includes a bundled importer and launch shortcuts. Validation covers financial calculations, import safeguards, refresh behavior, and a packaged startup smoke test. Next steps are incremental imports, persistent review decisions, statement reconciliation, and trend analysis that accounts for incomplete history.