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.