Inspiration

Josh's brief resonated with me immediately: modern investors are spread across too many platforms. A tech investor might have stocks on Fidelity, gold through a broker, real estate tracked manually, and crypto on an exchange. Each platform shows a different picture. There's no single source of truth.

I built PENNY to solve this. Not just as a portfolio tracker, but as an intelligent aggregation platform that understands the full investment landscape. Josh's audience—DIY investors who take their diversification seriously—needed a tool that could unify everything and surface insights that matter.

The insight that drove me: the real value isn't in tracking individual holdings; it's in understanding the relationships between them. That's where diversification analysis, country exposure, and sector breakdown become powerful.


What It Does

PENNY is a unified portfolio aggregation and intelligence platform designed for investors who manage diversified portfolios across multiple asset classes and platforms.

Core Features

1. Universal Portfolio Aggregation

Users photograph brokerage statements, tax documents, and investment confirmations. PENNY's vision engine extracts holdings from tables, charts, and text—parsing document structure semantically, not just running OCR. Each extraction includes confidence scores so users can verify uncertain entries.

The app supports all asset classes: stocks, bonds, funds, ETFs, real estate, gold, crypto, and alternative investments. Users can manually add non-listed assets (private equity, direct real estate holdings) with manual pricing.

2. Real-Time Price Updates

For listed assets (stocks, ETFs, crypto), PENNY fetches real-time prices from multiple data sources. The portfolio value updates continuously, and users see daily/weekly/monthly performance metrics at a glance.

3. Intelligent Risk & Diversification Analysis

The premium tier unlocks advanced analytics:

  • Country Exposure: See which countries your portfolio is exposed to (e.g., 40% US, 15% EU, 10% emerging markets)
  • Sector Breakdown: Understand sector concentration (e.g., 25% tech, 20% healthcare)
  • Asset Class Distribution: Visual breakdown of stocks vs. bonds vs. alternatives
  • Concentration Risk: Identify if any single position exceeds recommended thresholds
  • Correlation Analysis: Understand how holdings move together (coming soon)

4. Alerts & Rebalancing

PENNY monitors portfolio allocation and alerts users when it drifts from targets. The app suggests specific rebalancing trades and identifies tax loss harvesting opportunities across holdings.

5. Actionable Insights

PENNY analyzes the portfolio and generates personalized insights: "Your portfolio is overweight in US tech. Consider adding international exposure," or "You're under-diversified in bonds. A 20% allocation would reduce volatility."

6. AI Financial Advisor

Users ask Penny questions about their portfolio by text or voice. Penny analyzes actual holdings and gives specific advice. Voice coaching streams responses in real time via Gemini.

7. Portfolio Tools

Tax loss harvesting recommendations, rebalancing suggestions when allocation drifts, loan and dividend tracking, and PDF portfolio reports.


How I Built It

Architecture

PENNY is built on a modern, scalable stack designed for real-time data and premium monetization:

┌─────────────────────────────────────────────────────────────┐
│                    PENNY APP                                │
├─────────────────────────────────────────────────────────────┤
│  ┌──────────────┐  ┌──────────────┐  ┌────────────────────┐ │
│  │   Camera     │  │   Manual     │  │   Real-Time Data   │ │
│  │ (Vision API) │  │   Entry      │  │   Integration      │ │
│  └──────┬───────┘  └──────┬───────┘  └────────┬───────────┘ │
│         │                 │                    │             │
│         ▼                 ▼                    ▼             │
│  ┌────────────────────────────────────────────────────────┐ │
│  │              PORTFOLIO AGGREGATION LAYER               │ │
│  │  • Document parsing (Vision + Gemini 3)                │ │
│  │  • Unified data model (stocks, bonds, real estate)     │ │
│  │  • Real-time price feeds                               │ │
│  │  • Confidence scoring & validation                     │ │
│  └────────────────────────────────────────────────────────┘ │
│         │                 │                    │             │
│         ▼                 ▼                    ▼             │
│  ┌──────────────┐  ┌──────────────┐  ┌────────────────────┐ │
│  │  Portfolio   │  │   Premium    │  │   Reminders &      │ │
│  │  Dashboard   │  │  Analytics   │  │   Alerts           │ │
│  └──────────────┘  └──────────────┘  └────────────────────┘ │
│         │                 │                    │             │
│         └─────────────────┼────────────────────┘             │
│                           ▼                                  │
│  ┌────────────────────────────────────────────────────────┐ │
│  │              REVENUCAT MONETIZATION LAYER              │ │
│  │  • Subscription tiers (Free, Pro)                       │ │
│  │  • Feature gating (analytics, advanced insights)       │ │
│  │  • Entitlement management                              │ │
│  └────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘

Technology Stack

The application is built with production-grade technologies:

Component Technology
Frontend React Native + Expo (iOS/Android)
AI/Vision Gemini 3 Vision API + Structured Output
Monetization RevenueCat SDK (subscriptions & IAP)
Authentication Firebase Authentication
Real-Time Data Yahoo Finance, Finnhub, Binance, CoinGecko, Gold API
Storage AsyncStorage (local) + Firebase Authentication
Background Tasks expo-background-fetch + expo-task-manager
Analytics Opik for observability

RevenueCat Integration

PENNY integrates RevenueCat deeply for sustainable monetization:

// Feature gating based on subscription tier
const canAccessPro = async () => {
  const customerInfo = await Purchases.getCustomerInfo();
  return customerInfo.entitlements.active['coach_plus'] !== undefined;
};

// Subscription offerings
const offerings = await Purchases.getOfferings();
const monthlyPlan = offerings.current?.monthly;
const annualPlan = offerings.current?.annual;
// RevenueCat handles subscription tracking automatically

RevenueCat handles:

  • Subscription management across iOS and Android
  • Entitlement validation for feature gating
  • Revenue tracking and analytics
  • Promotional offers and trial periods
  • Cross-platform user identity

Document Analysis Pipeline

The core innovation: intelligent document parsing for portfolio imports.

// 1. User photographs a brokerage statement
const image = await capturePortfolioStatement();

// 2. Gemini 3 Vision extracts structure
const extraction = await generateStructuredWithGemini({
  prompt: `Extract all holdings from this brokerage statement.
           Return: name, symbol, quantity, price, confidence score.`,
  schema: StatementAnalysisSchema,
  image: base64Image,
  thinkingLevel: 'high',
});

// 3. Validate against known symbols
const validated = await validateHoldings(extraction.holdings);

// 4. Import into unified portfolio
await importPortfolioHoldings(validated);

Real-Time Price Integration

PENNY fetches real-time prices from multiple sources:

  • Stocks & ETFs: Yahoo Finance (primary), Finnhub (fallback)
  • Crypto: Binance (primary), CoinGecko (fallback)
  • Commodities: Yahoo Finance (primary), Gold API (fallback)

Prices update every 5 minutes during market hours, with caching to minimize API costs.

Premium Analytics Engine

The analytics layer computes diversification metrics:

// Calculate country exposure
const countryExposure = calculateCountryExposure(portfolio);
// Returns: { US: 40%, EU: 15%, EM: 10%, ... }

// Calculate sector breakdown
const sectorBreakdown = calculateSectorBreakdown(portfolio);
// Returns: { Technology: 25%, Healthcare: 20%, Finance: 15%, ... }

// Identify concentration risk
const concentrationRisk = identifyConcentration(portfolio);
// Returns: holdings exceeding 10% threshold with recommendations

Challenges I Ran Into

1. Unified Data Model Across Asset Classes

Stocks have symbols and exchanges. Real estate has property addresses. Gold has purity grades. Building a data model that handles all of these without becoming unwieldy was challenging. I solved this with a flexible schema that stores asset-class-specific metadata in a details field while maintaining consistent core fields (name, quantity, value, date).

2. Document Parsing Reliability

Early iterations of the document parser missed holdings that were in non-standard formats or partially visible. I improved accuracy by:

  • Adding explicit instructions: "Extract EVERY holding, even if partially visible"
  • Using high thinking levels for complex documents
  • Implementing confidence scoring so users can verify uncertain extractions
  • Building a manual entry fallback for edge cases

3. Real-Time Price Feed Reliability

Different APIs have different coverage, rate limits, and latency. I built a multi-source fallback system: if Yahoo Finance is unavailable, the app falls back to Finnhub. If both fail, it uses cached prices from the last successful fetch. Same pattern for crypto (Binance → CoinGecko) and commodities (Yahoo Finance → Gold API).

4. RevenueCat Integration Complexity

RevenueCat's SDK requires careful handling of entitlements, subscription states, and cross-platform user identity. I spent time understanding:

  • How entitlements map to features
  • Handling subscription transitions (trial → paid, monthly → annual)
  • Managing grace periods and billing issues
  • Testing with sandbox mode before going live

5. Feature Gating Without Frustration

The challenge: monetize premium features without making the free tier feel crippled. I solved this by:

  • Offering a 7-day free trial of premium features
  • Making the free tier genuinely useful (portfolio aggregation, basic tracking)
  • Positioning premium as "advanced insights for serious investors," not essential functionality

Accomplishments I'm Proud Of

Not Just Another Portfolio Tracker

Typical Portfolio App PENNY
Tracks stocks only Aggregates all asset classes
Shows portfolio value Analyzes diversification & risk
Reactive (waits for user input) Proactive (drift alerts & rebalancing)
Manual data entry Automated document parsing
Generic advice Personalized insights based on portfolio

Comprehensive Asset Class Support

PENNY handles:

  • Listed Assets: Stocks, ETFs, bonds, mutual funds (real-time pricing)
  • Unlisted Assets: Real estate, private equity (manual pricing)
  • Commodities: Gold, silver, platinum (real-time via Yahoo Finance + Gold API)
  • Crypto: Bitcoin, Ethereum, and major tokens (real-time via Binance + CoinGecko)

Most portfolio trackers don't support this range of assets. This directly addresses Josh's audience.

Production-Grade Implementation

The application includes production details that demonstrate maturity:

  • Exponential backoff retry logic for API failures
  • Multi-source price feed fallbacks
  • Response caching with intelligent TTL
  • Opik observability for monitoring document parsing accuracy
  • Comprehensive error handling and user feedback
  • RevenueCat integration with proper entitlement validation

Audience-Centric Monetization

The subscription model is designed for Josh's audience—serious DIY investors:

  • Free Tier: Portfolio aggregation, basic tracking, manual reminders
  • Penny Pro ($6.99/month or $69.99/year): Real-time price updates, advanced alerts, full diversification analysis, sector breakdown, country exposure, personalized AI insights, tax loss harvesting, PDF reports

One paid tier, no confusion. Users get the full experience.


What I Learned

1. Document Parsing Is Hard, But Valuable

Automating portfolio imports is genuinely useful. Users don't want to manually type holdings from statements. The investment in getting document parsing right pays dividends in user satisfaction and retention.

2. Diversification Analysis Resonates

Country exposure and sector breakdown are immediately understandable. "I didn't realize I was 60% overweight in US tech" is the kind of insight that drives engagement.

3. RevenueCat Simplifies Monetization

Rather than building subscription logic from scratch, RevenueCat handles the complexity: billing, entitlements, cross-platform identity, promotional offers. This let me focus on product rather than payment infrastructure.

4. Real-Time Data Is Expensive

Fetching real-time prices for thousands of holdings across multiple APIs is costly. I learned to balance freshness with cost through intelligent caching and selective updates.

5. Trust Matters in Finance

Users are cautious about sharing portfolio data. Building trust through transparency (showing confidence scores, explaining how data is used, offering manual verification) is essential.


What's Next for PENNY

Immediate Roadmap

Correlation Analysis: Show how holdings move together, helping users understand true diversification.

Portfolio Comparison: Compare your portfolio to benchmarks (S&P 500, 60/40 portfolio, etc.).

Long-Term Vision

PENNY is positioned to become the unified portfolio platform for serious DIY investors. The roadmap includes:

  • AI-Powered Insights: Use Gemini to analyze portfolio trends and generate actionable recommendations
  • Social Features: Share portfolio insights with other investors (anonymously)
  • Integration with Brokers: Direct API connections to Fidelity, Schwab, etc. for real-time sync
  • Automated Rebalancing: Execute trades automatically to maintain target allocation
  • Tax Optimization: Integrated tax planning and reporting

Built With

Share this project:

Updates