Inspiration

As a high school student, I've seen firsthand how my peers struggle with financial literacy. We get our first debit cards, part-time job paychecks, or allowances—but no real understanding of where our money goes. Parents want to help, but constant "how much did you spend?" conversations create tension instead of trust.

I built Savva to bridge this gap: a mobile app that gives teenagers visibility into their spending while giving parents peace of mind, without the awkwardness.

What it does

Savva is a React Native mobile app designed specifically for teens to track their personal finances:

  • Real bank account integration via Plaid API—no manual entry required
  • Teen dashboard with spending summaries, transaction history, and savings progress
  • Parent monitoring view with configurable visibility controls
  • Goal tracking to help teens save for what matters (college, a car, that Japan trip)
  • Budget limits with overspend alerts to build healthy spending habits

The key insight: transparency without surveillance. Teens control what parents see, creating accountability without resentment.

How we built it

Tech Stack:

  • Frontend: React Native with Expo (TypeScript) for cross-platform mobile development
  • Backend: Supabase for authentication, database, and serverless edge functions
  • Banking: Plaid API integration (sandbox mode) for secure account connections
  • Testing: Android Studio emulator + Expo Go for rapid iteration

Architecture: React Native App (Expo) ↓ Supabase (auth + PostgreSQL + edge functions) ↓ Plaid API (via edge functions only—keys never exposed to client) Security-first design:

  • Plaid API keys stored as Supabase edge function secrets (never in app code)
  • Row-Level Security (RLS) policies ensure users only access their own data
  • Parent-child connections use explicit opt-in visibility toggles

Development workflow:

  1. Built authentication and user role system (teen vs. parent)
  2. Implemented Plaid Link flow with token exchange
  3. Created dual dashboards with role-based access control
  4. Added transaction sync and categorization
  5. Built goal tracking with progress visualization

Challenges we ran against

1. Plaid Link in React Native

Plaid's SDK kept crashing the app on the Android emulator. The issue? Expo Go doesn't fully support native modules like Plaid Link.

Solution: Switched from expo start to npx expo run:android to create a development build with native support. This required setting up Android SDK, Java environment variables, and local.properties configuration—easily 3 hours of debugging environment issues.

2. Supabase Edge Functions for Token Exchange

Plaid requires a backend to securely exchange public tokens for access tokens. I initially tried calling Plaid directly from the app (bad idea—exposed secrets).

Solution: Built two Supabase edge functions:

  • create-link-token to generate Plaid Link sessions
  • exchange-public-token to convert temporary tokens into permanent access tokens

Learning Deno (the edge function runtime) and debugging CORS issues taught me why proper backend architecture matters.

3. Parent-Child Data Access Control

How do you let parents see their kid's data without breaking database security? Supabase RLS policies alone weren't enough—I needed a join table.

Solution: Created a parent_child_connections table with visibility flags. RLS policies check both user ownership AND connection permissions before returning data. This taught me how real-world auth is way more nuanced than "just check if user.id matches."

4. Transaction Categorization

Plaid returns raw transaction data, but "AMAZON.COM*ABC123" isn't user-friendly.

Solution (in progress): Built a categorization system using Plaid's merchant data + custom rules. Planning to add ML-based category suggestions using transaction patterns—this is where I see the most potential for AI/ML integration.

Accomplishments that we're proud of

  • Shipped a working fintech app with real banking integration (even if it's sandbox mode—still counts!)
  • Secure architecture that never exposes API keys to the client
  • Dual-role system that actually respects both teen autonomy and parent oversight
  • Overcame platform-specific bugs (Android development is painful, but I learned so much)

What we learned

Technical:

  • How financial APIs work (OAuth flows, token management, webhook patterns)
  • Edge functions and serverless architecture
  • Row-Level Security and database authorization
  • React Native's limitations vs. native development

Product:

  • Fintech isn't just "connect to a bank"—it's about trust, privacy, and behavior change
  • Good UI for finance = invisible complexity (transactions should "just appear")
  • Parents and teens have fundamentally different mental models of money

Personal:

  • Debugging environment setup is 70% of React Native development
  • Reading documentation > random Stack Overflow fixes
  • "Just one more feature" is how you never ship

What's next for Savva

Phase 1: Core Features (current)

  • ✅ Authentication & role system
  • ✅ Plaid bank connection
  • ✅ Basic dashboards
  • 🔄 Transaction sync & display
  • 🔄 Budget tracking

Phase 2: Intelligence

  • AI-powered spending insights using Claude API ("You spent 40% more on fast food this month")
  • Anomaly detection for unusual purchases
  • Predictive budgeting based on spending patterns

Phase 3: Behavior Change

  • Gamification (spending streaks, savings challenges)
  • Peer comparisons (anonymized) for teens who opt-in
  • Push notifications for budget alerts and goal milestones

Phase 4: Production

  • Apply for Plaid production access
  • EAS Build for iOS/Android app stores
  • Real user testing with local high school students

Long-term vision: Make Savva the financial literacy tool we wish we had at 15. Not a lecture from parents, not a boring budgeting spreadsheet—just clear visibility into where my money goes and how to reach my goals.


Built for: HackAmerica Timeline: 3 weeks Status: Functional MVP in sandbox mode, actively building toward production launch

Built With

Share this project:

Updates