Finance App

Project Details

Finance App is a personal finance tracker that turns bank and credit card PDF statements into structured, categorized spending data. Uploaded statements go through extraction, deduplication, categorization, and period-aware analysis, and an AI assistant sits on top, grounded in the user’s real data, to answer natural-language questions about spending.

Key Features

  • Statement import: Upload a bank/credit-card PDF and a document-parsing pipeline (DataLab) extracts the raw transactions, which Gemini then classifies into a fixed set of categories (Food & Dining, Transportation, Shopping, Entertainment, Travel, Health & Pharmacy, Subscriptions & Software, Utilities & Bills, Education, Other) and separates spending from refunds/credits.
  • Duplicate-safe imports: Re-uploading a statement never double-counts transactions, expenses are de-duplicated by date, description, and amount.
  • Statement-period awareness: Statements are tracked by billing period rather than forced into calendar months, since bank cycles rarely line up with the 1st-31st.
  • Reports & trends: Category breakdowns, spending trends over time, and per-category trend charts.
  • Savings analysis: An automated review of each statement that flags category spending increases, likely duplicate charges, and subscription price hikes, surfaced as concrete savings suggestions.
  • AI chat assistant: A conversational assistant that answers questions like “how much did I spend on subscriptions last statement?” or “what could I cut back on?” in whatever language the user asks in, using tool calls against real data instead of guessing numbers.
  • Admin-managed accounts: Authentication via Better Auth with public sign-up disabled; an admin creates and manages user accounts instead.

Technical Implementation

  • Built with Nuxt 4, Nuxt UI v4, Tailwind CSS, and TypeScript.
  • Used SQLite with Kysely as the type-safe query builder for persistence.
  • Integrated DataLab for PDF document parsing to extract raw transaction data from statements.
  • Integrated Google Gemini (@google/genai) for transaction categorization, savings analysis, and the grounded chat assistant.
  • Implemented deduplication logic keyed on date, description, and amount to make repeated statement uploads idempotent.
  • Modeled statements by billing period rather than calendar month to match real bank cycles.
  • Built category and trend visualizations with Chart.js.
  • Secured authentication with Better Auth, restricting account creation to admin-issued accounts only.