Inspiration
When I saw Josh's brief, it clicked immediately. I manage a small portfolio myself — some stocks, a bit of crypto, a tiny gold position and I was already frustrated with having to check three different apps just to know my net worth. Josh described the exact same problem: investors with diversified portfolios have no single place to see everything together. That's Vesta.
What it does
- A real-time portfolio overview with allocation charts
- Live price updates from Finnhub (stocks/ETFs), CoinGecko (crypto), and Metals API (commodities)
- Smart price alerts with push notifications so you never miss a move
- An AI Portfolio Advisor (Premium+) that analyzes your actual holdings and answers questions like "How diversified am I?" or "Should I rebalance?"
- Diversification analysis by asset type, sector, and geography ## How we built it The app is built with React Native and Expo SDK 54 using TypeScript throughout. Navigation is handled by Expo Router with a tab-based layout. State management uses Zustand — lightweight and perfect for this scale.
The backend runs on Supabase with PostgreSQL, Row Level Security policies on every user table, and authentication via email. Price data flows from three APIs (Finnhub, CoinGecko, Metals API) with caching to respect rate limits.
Charts are rendered using Shopify's React Native Skia — I went with raw Canvas/Path rendering for the donut charts because it gave me full control over the visuals. The AI advisor connects to Claude via a secure service layer, with conversation history persisted in Supabase.
Challenges we ran into
Getting charts to render properly in React Native was harder than expected. I started with Victory Native but ran into rendering issues on iOS, so I rewrote the allocation chart using direct Skia paths — drawing SVG arcs manually. It was painful but the result is much smoother.
Another challenge was keeping price APIs within free-tier limits while still feeling "real-time." I built a tiered refresh system: free users get updates every 15 minutes, premium users every minute, with smart caching in Supabase so we're not hammering the APIs.
Accomplishments that we're proud of
The thing I'm most proud of is the AI Portfolio Advisor. It's not a generic chatbot — it actually reads your holdings, calculates your allocation percentages, and gives you personalized answers. When you ask "How diversified am I?" it knows you're 60% in tech stocks and tells you to consider other sectors. That feels like real value, not a gimmick.
I'm also proud of how the app feels. The donut charts are hand-drawn with Skia, the price updates feel snappy, and the whole flow from adding your first asset to seeing your portfolio come alive takes under a minute. It doesn't feel like a hackathon project — it feels like something I'd actually use daily.
Getting three different price APIs (stocks, crypto, commodities) to work together seamlessly and display unified data was satisfying. Each API has different formats, rate limits, and quirks, but the user never sees any of that complexity.
And honestly, shipping a full subscription model with three tiers through RevenueCat in this timeframe felt like a win on its own.
What we learned
This was my first time integrating RevenueCat, and honestly it was smoother than I expected. The SDK handles a lot of the complexity around receipt validation and entitlement management that would've taken days to build manually.
I also learned a lot about financial data APIs — the inconsistencies between providers, the importance of caching, and how to normalize data from completely different sources into a unified format.
What's next for Vesta
If I continue with Josh, the roadmap includes:
- Multi-currency support with automatic conversion
- Portfolio performance tracking over time (daily/weekly/monthly returns)
- CSV/PDF export for tax season
- Watchlists for assets you don't own yet
- Widget support for checking your portfolio from the home screen
- Android release
Built With
- expo.io
- react-native
- revenue-cat
- skia
- supabase
- typescript
- zustand

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