helen-akateva/spendy-expense-tracker-web
π°Modern personal finance tracker built with Next.js, React, TypeScript, and Zustand. Track expenses, analyze statistics, and manage your budget.
π° Spendy - Personal Finance Tracker
Spendy is a modern web application for tracking personal finances, managing expenses and income, and visualizing financial statistics. Built with Next.js 16 and TypeScript, it provides an intuitive interface for managing your budget across all devices.
π Links
Live Demo: https://spendy-expense-tracker-web.vercel.app
Backend Repository: spendy-expence-tracker-api
π About the Project
Spendy helps users:
- Track transactions - Record income and expenses with categories
- Monitor balance - Real-time balance updates with every transaction
- Analyze spending - Visual statistics and charts by category and period
- Stay informed - Live currency exchange rates (UAH, USD, EUR)
- Access anywhere - Fully responsive design for mobile, tablet, and desktop
π Technologies Used
Core Technologies
State Management & Data Fetching
Forms & Validation
UI Components & Visualization
π¦ Installation and Setup
Prerequisites
- Node.js 20+
- npm or yarn
Installation Steps
- Clone the repository
git clone https://github.com/helen-akateva/spendy-expense-tracker-web.git
cd spendy-expense-tracker-web- Install dependencies
npm install
# or
yarn install- Run development server
npm run dev
# or
yarn devOpen http://localhost:3000 in your browser.
- Build for production
npm run build
npm start
# or
yarn build
yarn startποΈ Project Structure
spendy-expense-tracker-web/
βββ app/ # Next.js App Router
β βββ (auth)/ # Authentication pages (public routes)
β β βββ login/
β β βββ register/
β βββ (dashboard)/ # Dashboard pages (private routes)
β β βββ transactions/ # Home tab - transaction list
β β βββ statistics/ # Statistics with charts
β β βββ currency/ # Currency rates (mobile)
β βββ api/ # API Route Handlers
β βββ globals.css # Global styles and CSS variables
β βββ layout.tsx # Root layout
βββ components/ # React components
β βββ Auth/ # Login & Registration forms
β βββ HomeTab/ # Transaction list & items
β βββ StatisticsTab/ # Charts and statistics
β βββ UserAcountLayout/ # Header, Sidebar, Navigation
β βββ Modal*/ # Modal windows
β βββ ...
βββ lib/ # Utilities and services
β βββ api/ # API client functions
β βββ hooks/ # Custom React hooks
β βββ stores/ # Zustand stores
β βββ services/ # Business logic
β βββ validations/ # Yup schemas
βββ public/ # Static assets
βββ middleware.ts # Route protection middleware
βββ package.json
π Authentication
The app uses JWT-based authentication with:
- Public routes:
/login,/register - Private routes:
/,/transactions,/statistics,/currency - Middleware protection: Automatic redirects based on auth status
- Persistent sessions: Zustand with localStorage
π¨ Features
π Transaction Management
- Add, edit, and delete transactions
- Categorize as income or expenses
- Add comments and select dates
- Real-time balance updates
π Statistics & Analytics
- Interactive charts (Recharts)
- Filter by month and year
- Toggle between income/expenses
- Category breakdown
π± Currency Rates
- Live exchange rates from Monobank API
- Cached for 1 hour (localStorage)
- UAH, USD, EUR support
π± Responsive Design
- Mobile-first approach
- Breakpoints: 320px, 768px, 1280px
- Optimized layouts for all devices
π Deployment
The application can be deployed on:
- Vercel (recommended for Next.js)
- Netlify
- Custom server with Node.js
Deploy to Vercel
vercel deployπ API Integration
The app connects to a backend API with the following endpoints:
POST /api/auth/register- User registrationPOST /api/auth/login- User loginPOST /api/auth/logout- User logoutGET /api/users/current- Get current userGET /api/transactions- Get all transactionsPOST /api/transactions- Create transactionPATCH /api/transactions/:id- Update transactionDELETE /api/transactions/:id- Delete transactionGET /api/summary/:period- Get statisticsGET /api/categories- Get categories
π License
This project was created for educational purposes.
π₯ Team
This project was developed as the final capstone for our Fullstack Development course, showcasing our skills in both Backend and Frontend technologies:
π©βπ» Olena Akatieva - Team Lead, Fullstack Developer (LinkedIn)
π¨βπ» Denis Shulga - Scrum Master, Fullstack Developer (LinkedIn)
π¨βπ» Roman Kniazhyk - Fullstack Developer (LinkedIn)
π©βπ» Faina Kusiaka - Fullstack Developer (LinkedIn)
π¨βπ» Anton Shuvalov - Fullstack Developer (LinkedIn)
π©βπ» Anastasiia Mamatova - Fullstack Developer (LinkedIn)
π¨βπ» Artem Ivanichenko - Fullstack Developer (LinkedIn)
π¨βπ» Dmytro Kravchenko - Fullstack Developer (LinkedIn)
π Acknowledgments
- Design inspiration from modern fintech apps
- Next.js team for the amazing framework
- Monobank API for currency rates
- All open-source libraries used in this project
Made with β€οΈ for better financial management