FinBuddy turns a personal-finance workbook into a shared, interactive dashboard. It imports monthly expense, income, and budget-plan data, normalizes the workbook structure, and stores the resulting records in a server-side D1 database.
- Open the import dialog and select an Excel workbook.
- Review the detected months, categories, values, and warnings.
- Confirm the import to update matching periods in the shared dataset.
- Explore expense trends, category changes, cash flow, and budget variance.
- Edit a monthly category value directly from the data view.
The workbook is parsed in the browser. The server receives normalized finance records and import metadata rather than the original file bytes.
- Next App Router on vinext
- React, TypeScript, and MUI
- TanStack Query for server state
- Zustand for transient interface state
- SheetJS for workbook parsing
- Drizzle ORM with Cloudflare D1
- Vitest and Node test runner
Requirements: Node.js 22.13 or newer.
npm install
npm run devThe development server uses the project-local D1 binding declared in .openai/hosting.json.
npm run lint
npm run test
npm run buildGenerate a database migration after changing db/schema.ts:
npm run db:generateimport_batchesrecords import metadata.monthly_expensesstores category amounts by month in integer minor units.monthly_incomesstores income by month in integer minor units.budget_planstores the latest planned category amounts.
The current demonstration uses one shared dataset. Authentication and tenant isolation are outside the current product scope.