Inspiration

Forty-five million people in the US live paycheck to paycheck, and a disproportionate share are immigrants and first-generation families navigating an unfamiliar financial system. Every fintech app on the market assumes you already know what a credit score is, what a W-2 is, what a 401(k) is. We built FinPath to dismantle those cold, intimidating barriers and humanize the process of financial literacy and wellness — meeting people where they actually are.

What it does

FinPath is a full-stack financial wellness app that gives underserved communities a personal financial mentor powered by AI. Users complete a guided onboarding assessment and receive a Financial Health Score out of 100, calculated from their debt-to-income ratio, savings runway, and monthly obligations. A large language model then explains that score in plain language, tailored to their specific situation — not generic advice, but actionable guidance based on their actual income, debts, and employment type.

The health score is computed as a weighted sum:

$$S = S_{\text{DTI}} + S_{\text{savings}} + S_{\text{expense}} + S_{\text{emergency}} + S_{\text{base}}$$

where:

Debt-to-income (35 pts):

$$S_{\text{DTI}} = \left(1 - \min\left(\frac{\text{total_debt}}{12 \times \text{monthly_income}}, 1\right)\right) \times 35$$

Savings ratio (25 pts):

$$S_{\text{savings}} = \min\left(\frac{\text{total_savings}}{6 \times \text{monthly_income}}, 1\right) \times 25$$

Expense ratio (20 pts):

$$S_{\text{expense}} = \left(1 - \min\left(\frac{\text{monthly_expenses}}{\text{monthly_income}}, 1\right)\right) \times 20$$

Emergency fund (10 pts):

$$S_{\text{emergency}} = \min\left(\frac{\text{total_savings}}{\max(\text{monthly_expenses}, 1) \times 3}, 1\right) \times 10$$

Baseline (10 pts):

$$S_{\text{base}} = 10$$

Beyond the score, users get a conversational AI mentor that already knows their full financial context, a zero-based or envelope budget with real-time category tracking, a net worth tracker across assets and debts, live transaction simulation with automatic merchant category code tagging, and a learn section with plain-language lessons on topics the existing system takes for granted.

How we built it

  • Frontend: Next.js 14 (App Router) with Server Components, deployed on Vercel
  • Auth & Database: Supabase with row-level security — every query is scoped to the authenticated user's ID, not by policy but by enforcement boundary
  • AI Backend: FastAPI streaming server using Claude (claude-haiku-4-5-20251001) for cost-efficient real-time responses (~\$0.0005/message), deployed on Render
  • Design System: Custom Tailwind CSS theme with Material Design 3 tokens, Plus Jakarta Sans and Inter typography
  • Real-time: Supabase Realtime subscriptions for live transaction feeds via Postgres change events
  • Categorization: MCC (Merchant Category Code) mapping system with fallback chains to automatically classify spending into budget categories

Challenges we ran into

  • Conversation memory without storage: We needed the AI mentor to remember context within a session without persisting chat history to a database. We solved this by maintaining the full message array in React state and sending it with each request to Claude's messages API.
  • Budget-transaction sync: Transactions posted before a budget category existed wouldn't retroactively appear in the budget. We built a sync engine that replays all transaction history against current budget categories using a fallback chain, and triggers it automatically on budget creation.
  • Real-time duplication: Optimistic UI updates from the API response combined with Supabase Realtime subscription events caused duplicate transactions in the feed. We implemented ID-based deduplication and proper state synchronization with server props.
  • Cross-origin deployment: Vercel generates unique preview deployment URLs for every build, which broke CORS against our FastAPI backend. We added origin regex matching to handle dynamic subdomains.
  • Health score design: Choosing appropriate weights for the financial health score required balancing clinical accuracy with actionability. We settled on DTI as the heaviest factor (35%) because it's the single strongest predictor of financial distress, while giving emergency savings a dedicated 10% component to reward even small safety nets.

Accomplishments that we're proud of

  • Every feature — onboarding, health score, AI mentor, budgeting, transactions, net worth, and learn — was built in a single weekend
  • The AI mentor contextually understands the difference between a W-2 employee and a 1099 contractor and adjusts its financial advice accordingly
  • Sub-two-second interaction times across the entire app on a single developer's laptop
  • Row-level security means user data isolation is an enforcement boundary, not just an application-level policy

What we learned

  • Financial literacy is not a knowledge problem — it's an accessibility problem. The information exists; it's just locked behind jargon and assumptions about prior knowledge.
  • Streaming LLM responses dramatically improve perceived performance and user trust compared to waiting for a complete response.
  • MCC codes are surprisingly effective for automatic expense categorization — the card network infrastructure already classifies merchants, and exposing that to users removes the friction of manual entry.
  • Designing a health score is as much a UX decision as a math one: the formula has to be legible enough that users trust it, and granular enough that small positive actions move the needle.

What's next for FinPath

  • Group savings: Letting users pool money with family and friends across separate banks — a common pattern in immigrant communities that no major fintech supports well
  • Spanish language support: Serving users in the language they think in, not just the language the system defaults to
  • Real bank integration: Moving from simulated transactions to live bank feeds via Plaid, while keeping the same categorization and budget sync engine
  • Tool-calling for the AI mentor: Letting users update their financial data conversationally ("I just got a raise to \$5,000/month") without navigating back through forms

Built With

Share this project:

Updates

Submission history