Expenditure Tracker is a responsive web application for managing personal expenses. The mobile mode is optimized for fast input, while the desktop mode focuses on overview and analysis.
This project was created as a semester project for the course KIV/UUR (Introduction to User Interfaces) at the University of West Bohemia, Faculty of Applied Sciences.
- Expense management (CRUD) with storage in
localStorage. - Recurring expenses: daily / weekly / monthly / yearly, generated until a selected end date (or automatically up to 2 years).
- Quick filters: period (including custom range), category, recurrence, spent only (past/present).
- Summary expense card with period selection.
- Desktop overview in MUI DataGrid (sorting, pagination, edit/delete, empty state).
- Mobile expense list as expandable cards with details and actions.
- Destructive actions confirmed by a dialog; for recurring items, the option to delete just one or all future items simultaneously.
- Statistics: month selection, KPIs (total, daily average, most expensive category), pie chart with a legend, bar chart of the last 6 months + planned next month, list of the 3 closest future expenses.
- JSON Import/Export (expenses + settings) with a warning before overwriting data.
- Settings: category management (name, icon, color), deletion only if unused; language CZ/EN; currency is currently fixed to CZK.
- UI localization (cs/en).
- In the wizard, you can select receipt scanning (camera or upload); AI will fill in the amount, date, location, and category.
- The receipt is analyzed using the Gemini 2.5 Flash model and requires a
VITE_GEMINI_API_KEY. Without the API key, only manual expense entry is fully functional.
- Desktop: top bar with export/import and settings, left sidebar with expense summary and navigation.
- Mobile: bottom navigation (Expenses, +, Statistics), the wizard is a full-screen dialog.
uuid: stringamount: numberdate: string (ISO)category: stringnote?: stringlocation?: stringrecurrence:none | daily | weekly | monthly | yearlyrecurringGroupId?: string (group for deleting recurring items)
- Expenses:
localStoragekeytracker_expenses - Settings:
localStoragekeytracker_settings
To enable OCR and automatic expense autofill features, proceed as follows:
- Go to https://aistudio.google.com/api-keys.
- Click the Create API Key button.
- Create a project, e.g., named Expenditure Tracker, and have it generate a key.
- Copy the generated key.
- Create or open a
.env.localfile in the root directory of the project. - Insert the key into the file after the corresponding variable:
VITE_GEMINI_API_KEY=<API_key>
npm install # Required only before the first run
npm run devAfter running the second npm command, the application will start on a local HTTP server, and its localhost address will be displayed below. Open this address in your browser.
- React 19, TypeScript 5, Vite
- MUI (Material UI), MUI X DataGrid, MUI Date Pickers
- Recharts, lucide-react, dayjs
- react-router-dom
- @google/generative-ai
- Multi-currency support: Support for multiple currencies and currency conversion.
- Multi-user system: Transforming the app into a multi-user platform.
- Database persistence: Replacing
localStoragewith a PostgreSQL database.