Finance Tracker

Inspiration

Finance Tracker was inspired by a personal problem: my money is spread across many different places.

Some of it is held as physical cash or in regular bank accounts. Other portions are placed in fixed deposits, CPF, and PSEA. I also invest through multiple brokerage platforms and may hold the same stock across more than one brokerage.

For example, I might own four NVDA shares through Moomoo and another six through Longbridge. Each platform shows only part of my portfolio, making it difficult to understand my complete financial position.

Most existing finance applications focus on expense tracking, budgeting, daily stock movements, or active trading. However, those were not the main questions I wanted to answer.

I wanted one place where I could see:

  • How much money I own in total.
  • Where my assets are held.
  • How much of my money is readily accessible.
  • How much is invested or locked.
  • How my total wealth changes over time.

This led to Finance Tracker: a private, native macOS application that consolidates a user’s assets into a clear monthly wealth dashboard.

What it does

Finance Tracker is a personal wealth tracker designed to be updated once a month. It is not an expense tracker, budgeting tool, or real-time trading dashboard.

The application is organized into three main pages: Overview, Cash Assets, and Stocks.

Overview

The Overview page provides a consolidated summary of the user’s financial position.

It displays:

  • Total assets.
  • Mobile assets.
  • Non-mobile assets.
  • Liquidity ratio.
  • Asset allocation.
  • A historical line chart of total assets.
  • A monthly wealth calendar.

The monthly calendar compares each recorded month with the previous month. A month is shown in green when total assets increase, red when they decrease, and light grey when they remain unchanged.

The page helps users understand not only how much they own, but also how their wealth is developing over time.

Cash Assets

The Cash Assets page tracks non-market assets, including:

  • Physical cash.
  • Bank accounts.
  • Fixed deposits.
  • CPF accounts.
  • PSEA.

Each asset is classified according to its liquidity.

Physical cash and regular bank account balances are treated as mobile assets because they are readily accessible. Fixed deposits, CPF, and PSEA are treated as non-mobile assets because they are locked, restricted, or intended for longer-term purposes.

Stocks

The Stocks page tracks investments held across multiple brokerage accounts.

Each position remains associated with its original brokerage. This preserves important details when the same stock is held through different platforms.

For example:

  • Moomoo: 4 NVDA shares.
  • Longbridge: 6 NVDA shares.
  • Consolidated holding: 10 NVDA shares.

Finance Tracker presents one aggregated holding while allowing the user to expand it and inspect the individual brokerage positions.

The Stocks page focuses on the total portfolio value, number of brokerages, unique holdings, and latest recorded values. It deliberately avoids daily gains and intraday market movements because the application is designed for monthly financial reviews.

Monthly Snapshots

At the end of each month, the user updates their balances and holdings before recording a monthly snapshot.

A snapshot captures:

  • Physical cash.
  • Bank balances.
  • Fixed deposits.
  • CPF and PSEA balances.
  • Stock values.
  • Mobile assets.
  • Non-mobile assets.
  • Total assets.

These snapshots power the historical line chart, monthly calendar, and asset allocation view.

Previously recorded snapshots remain unchanged when the user edits their current financial information. This ensures the historical data accurately represents what was recorded during each month.

How we built it

We approached Finance Tracker using specification-driven development.

Before implementing the application, we defined the product, engineering standards, and delivery process through a set of structured project documents:

  • A project constitution defining code quality, testing, architecture, privacy, and financial correctness principles.
  • A current-state specification documenting the repository before implementation.
  • A target specification defining the intended MVP.
  • A phased implementation plan.
  • A detailed task breakdown.
  • A traceability matrix connecting requirements to tasks and tests.

This approach helped us transform a broad finance-tracking idea into a focused and testable product.

Finance Tracker is designed as a native macOS application using Swift and SwiftUI. AppKit can be used where deeper macOS integration is needed, while Objective-C interoperability remains available for components that may benefit from it.

The application architecture separates:

  • Presentation and user-interface logic.
  • Financial domain rules.
  • Local persistence.
  • Feature-specific state and workflows.

Financial values use decimal-safe representations rather than binary floating-point values. This prevents avoidable precision errors when calculating balances, stock values, portfolio totals, and historical snapshots.

The application follows a local-first design. User financial data is stored on the Mac without requiring an external account, cloud backend, analytics platform, or continuous internet connection.

Automated testing is planned around the most important financial and product behaviours, including:

  • Asset total calculations.
  • Mobile and non-mobile classifications.
  • Liquidity ratio calculations.
  • Stock aggregation across brokerages.
  • Snapshot uniqueness by month.
  • Historical snapshot stability.
  • Persistence between application launches.
  • The primary end-to-end user workflow.

Challenges we ran into

One of the biggest challenges was controlling the project scope.

A personal finance application could easily expand to include expense tracking, budgeting, transaction imports, live market prices, foreign-exchange services, dividend tracking, tax calculations, liabilities, and financial goals.

Trying to implement all of these features would have weakened the core product and made the hackathon MVP much harder to complete.

We therefore focused Finance Tracker on one specific problem: consolidating fragmented wealth and reviewing it monthly.

Another challenge was defining liquidity.

Different assets have different levels of accessibility. Physical cash and bank balances are immediately available, while fixed deposits, CPF, PSEA, and stock investments may be restricted, locked, or exposed to market conditions.

For the MVP, we simplified this into two understandable categories:

  • Mobile assets.
  • Non-mobile assets.

This gives the user a useful liquidity overview without introducing an overly complicated classification system.

The stock data model also required careful planning. The same ticker may be held through multiple brokerages, and each position may have a different quantity, price, or cost basis.

Merging these positions permanently would remove useful information. Keeping them completely separate, however, would make it difficult to understand the user’s overall exposure to a company.

We solved this by preserving each brokerage position while calculating an aggregated holding for display.

Historical data introduced another challenge. If the Overview recalculated previous months using current account values, the user’s financial history would change whenever they updated an asset.

To avoid this, monthly snapshots store fixed totals that remain independent of current records.

Finally, we had to balance development speed with software quality. Finance Tracker handles sensitive financial data, so calculation accuracy, local privacy, testing, and maintainability could not be treated as optional, even within a hackathon environment.

Accomplishments that we're proud of

We are proud that Finance Tracker has a clearly defined purpose rather than trying to become another general-purpose finance application.

Its main accomplishment is combining several different financial perspectives into one coherent experience:

  • Total personal wealth.
  • Liquidity and accessibility.
  • Asset location.
  • Multi-brokerage investment aggregation.
  • Long-term monthly progression.

We are also proud of the way the Stocks feature handles duplicate holdings across brokerages. Users can see their total ownership of a stock while retaining the ability to identify exactly where every share is held.

The monthly snapshot system is another important accomplishment. It transforms the application from a static balance sheet into a personal wealth journal, allowing users to build a reliable historical record over time.

We are also proud of taking a disciplined specification-driven approach. By defining requirements, phases, tasks, and traceability before implementation, we created a clearer development path and reduced the risk of losing important requirements during the hackathon.

Finally, Finance Tracker is designed around privacy from the beginning. The local-first architecture means the user does not need to upload sensitive financial information to an external service simply to understand their own wealth.

What we learned

The most important lesson was that understanding the real user problem is more valuable than immediately choosing features.

At first, Finance Tracker could have become a conventional budgeting or investment app. By examining the actual problem more closely, we realized that the need was not daily transaction tracking or live market information. It was the lack of a consolidated view across fragmented assets.

We also learned that aggregation and detail do not have to be mutually exclusive.

A useful financial system can present one consolidated NVDA holding while still preserving separate Moomoo and Longbridge positions. The right data model can support both simplicity and traceability.

Another major lesson was that historical financial information should be treated as immutable. A chart is only meaningful if past values remain stable after current records change.

We also learned the value of designing around the intended usage frequency. Because Finance Tracker is meant to be reviewed monthly, features such as daily gain, intraday movement, and continuous synchronization would add complexity without supporting the core workflow.

The specification-driven process taught us how requirements, implementation tasks, and tests can remain connected. This provides a clearer definition of completion than judging a feature only by whether it appears in the interface.

What's next for Finance Tracker

The immediate next step is to complete the hackathon MVP with the three primary pages, local persistence, multi-brokerage stock aggregation, monthly snapshots, and the historical Overview dashboard.

After the MVP, Finance Tracker could be expanded with optional integrations and additional asset types.

Potential future features include:

  • Automatic stock-price updates when recording a snapshot.
  • CSV imports from banks and brokerage platforms.
  • Multi-currency support with exchange-rate conversion.
  • Singapore Savings Bonds and Treasury bills.
  • Unit trusts and mutual funds.
  • Dividend tracking.
  • Fixed-deposit maturity reminders.
  • Financial goals and milestones.
  • Local data export and backup.
  • iCloud synchronization between trusted Apple devices.
  • Liabilities for a complete net-worth calculation.
  • Historical position-level portfolio analysis.

Any future automation should preserve the application’s core principles: user control, local privacy, financial accuracy, and a calm monthly review experience.

The long-term vision for Finance Tracker is to become a trusted personal wealth dashboard for people whose assets are spread across multiple institutions.

Instead of focusing on daily financial noise, it should help users answer three enduring questions:

How much do I own, where is it, and how has it changed over time?

Built With

Share this project:

Updates