Visual Money

Inspiration

We wanted to kill the fragmented spreadsheet. For too long, retail investors have had to toggle between three different brokerage apps, a crypto wallet, and a messy Excel sheet just to understand their net worth. We were inspired to build a "Bloomberg Terminal for your pocket"—a tool that brings institutional-grade analytics, high-fidelity visualization, and true cross-asset tracking (Stocks, Crypto, ETFs, Commodities) into a single, unified experience.

What it does

Visual Money is a professional-grade portfolio tracker that unifies your financial life.

  • Unified Dashboard: Users can track equities, cryptocurrencies, and precious metals in one place with real-time price updates.
  • Pro-Level Visualization: We moved beyond simple line charts, offering interactive historical charts (1D to 5Y) and sparklines for every asset.
  • Portfolio Pulse (Premium): A suite of risk analysis tools usually reserved for hedge funds, including Volatility Scores, Sharpe Ratios, and automated Diversification Metrics (Sector/Geography).
  • Dividend Intelligence: Automatically estimates projected annual income and tracks payment dates via a dedicated Dividend Calendar.
  • Smart News: Curates a real-time news feed tailored specifically to the assets the user actually holds.

How we built it

We went "all-in" on Kotlin Multiplatform (KMP) to achieve true native performance on both Android and iOS with a shared codebase.

  • UI: We used Compose Multiplatform to share 100% of our UI code, ensuring a premium look and feel across devices.
  • Architecture: The app follows Clean Architecture and MVVM patterns. We used Koin for dependency injection and Kotlin Flows for reactive data handling.
  • Data & Networking: We utilized Ktor for asynchronous network requests to the Financial Modeling Prep (FMP) API and stored data locally using Room (KMP) for offline caching.
  • Monetization: We integrated RevenueCat to handle cross-platform subscriptions seamlessly.
  • Security: We used BuildKonfig to inject API keys at build time, separating our sandbox environments from production releases.

Challenges we ran into

  • Cross-Platform Data Persistence: Getting Room to work flawlessly across both Android and iOS in a KMP environment was a hurdle, specifically regarding database driver configuration.
  • Complex Financial Math: Calculating the Sharpe Ratio and volatility scores on the client side without causing UI jank required heavy optimization of our calculation logic and threading.
  • API Security: Managing sensitive keys for FMP and RevenueCat in an open-source friendly way was tricky. We solved this by implementing a strict local.properties injection system via BuildKonfig.

Accomplishments that we're proud of

  • True "Write Once, Run Everywhere": We successfully shared the UI logic via Compose Multiplatform, meaning our iOS app is not a web wrapper—it is native, performant, and shares the exact same drawing logic as Android.
  • Institutional Metrics: We are proud of the "Portfolio Pulse" feature. Bringing complex risk-adjusted return metrics (like Sharpe Ratio) to a retail app interface in a way that is easy to understand is a major UX win.
  • Clean Architecture: The codebase is fully modular. The separation of our FmpDataSource from the UI layer means we can easily swap data providers in the future without breaking the app.

What we learned

  • The Power of KMP: We learned that Kotlin Multiplatform is ready for prime time. It allowed us to move twice as fast by writing our business logic and networking code only once.
  • Financial Data Handling: We gained deep insight into the complexities of normalizing financial data—handling stock splits, currency differences, and market closures programmatically.
  • State Management: We refined our skills in using Kotlin Flows to drive a declarative UI, ensuring that when a stock price updates in the background, the UI reflects it instantly without a refresh.

What's next for Visual Money

  • Automated Import: Currently, users search and add assets manually. We plan to integrate Plaid to allow users to link their brokerage accounts for automated portfolio syncing.
  • AI-Driven Insights: We want to expand the "Strategic Insights" feature to use LLMs to give personalized commentary on why a user's portfolio is volatile, rather than just showing a score.
  • Social Sentiment: Adding a layer of social data to see how the community feels about the specific assets in your watchlist.

Built With

  • fmp
  • kmp
Share this project:

Updates