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.propertiesinjection 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
FmpDataSourcefrom 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



Log in or sign up for Devpost to join the conversation.