- Project Overview
- Features
- Tech Stack
- Architecture
- Getting Started
- API Documentation
- Contributing
- Team
- License
BudgetWise+ is a modern, full-stack web application designed to help users take control of their personal finances. Track income and expenses, categorize transactions, set budgets, and visualize financial trends with beautiful, interactive charts.
A sleek, full-stack web app to track income and expenses, categorize transactions, set budgets, and visualize financial trends β powered by Spring Boot and React.
This project represents the culmination of the ALX Software Engineering Webstack specialization, demonstrating proficiency in:
- Full-stack web development
- RESTful API design and implementation
- Database design and management
- User authentication and security
- Modern frontend frameworks
- Third-party API integration
Project Timeline: June 27 - July 10, 2025
Team: Otmane Touhami
- π€ User Authentication: Secure JWT-based login and registration system
- π° Transaction Management: Complete CRUD operations for income and expense tracking
- π Category Management: Custom category creation and management
- π Interactive Dashboard: Real-time financial overview with visual analytics
- π Smart Filtering: Filter transactions by date ranges (today, week, month, custom)
- π€ Data Export: Export transaction history to CSV format
- πΈ Budget Alerts: Smart notifications when approaching spending limits
- π§Ύ Receipt Upload: Image upload and storage for transaction receipts
- π± SMS Notifications: Real-time alerts via Twilio integration
- π Trend Analysis: Historical spending patterns and insights
- π¨ Responsive Design: Seamless experience across all devices
- βοΈ Email Notifications: Account verification and notifications via SendGrid.
- π Recurring Transactions: Automate scheduling of regular income and expenses.
- π Transaction Templates: Create transactions from predefined templates.
- Framework: Spring Boot 3.x
- Security: Spring Security + JWT Authentication
- Database: Spring Data JPA + Hibernate + MariaDB
- API Documentation: SpringDoc (Swagger/OpenAPI)
- File Storage: AWS S3 for receipt uploads
- Notifications: Twilio API for SMS alerts, SendGrid for email
- DTO Mapping: MapStruct
- Utilities: Lombok, Spring Dotenv
- Framework: React 19
- Routing: React Router DOM
- State Management: Zustand & Context API
- HTTP Client: Axios
- Charts: Recharts
- Styling: Tailwind CSS + shadcn/ui
- Build Tool: Vite
- Version Control: Git & GitHub
- Database: MySQL 8.0
- API Testing: Postman
- Development: VS Code - intellij IDE
Our application follows a clean, layered architecture pattern:
βββ Controller Layer (REST APIs)
βββ Service Layer (Business Logic)
βββ Repository Layer (Data Access)
βββ Entity Layer (Data Models)
The class diagram above illustrates our database design, showing relationships between Users, Transactions, Categories, Budgets, and supporting entities.
- User: Authentication and profile management
- Transaction: Income and expense records with categorization
- Category: User-defined spending categories
- Budget: Monthly spending limits per category
- Receipt: Optional transaction receipt storage
- RecurringTransaction: Automated recurring transactions
- Java 17+
- Node.js 16+
- MariaDB 10.5+
- Maven 3.6+
-
Clone the repository
git clone https://github.com/OtmaneTouhami/budget-wise.git cd budget-wise
-
Backend Setup
cd api mvn clean install # Configure database in application.properties mvn spring-boot:run
-
Frontend Setup
cd ../frontend npm install npm run dev
-
Database Setup
CREATE DATABASE budgetwise; -- Tables will be auto-created via JPA
Create a .env
file in the api
backend directory with the following variables:
Backend (api/.env
)
# Database Configuration
DB_URL=jdbc:mariadb://localhost:3306/budgetwise
DB_USERNAME=your_username
DB_PASSWORD=your_password
# JWT Configuration
JWT_SECRET=your_super_secret_and_long_jwt_key
JWT_EXPIRATION_MS=86400000 # 24 hours
JWT_REFRESH_EXPIRATION_MS=604800000 # 7 days
# AWS S3 Configuration (for file storage)
AWS_ACCESS_KEY_ID=your_aws_access_key
AWS_SECRET_ACCESS_KEY=your_aws_secret_key
AWS_S3_BUCKET_NAME=your_s3_bucket_name
AWS_REGION=your_aws_region
# SendGrid Configuration (for email notifications)
SENDGRID_API_KEY=your_sendgrid_api_key
FROM_EMAIL=your_verified_sender_email@example.com
# Twilio Configuration (for SMS notifications)
TWILIO_ACCOUNT_SID=your_twilio_account_sid
TWILIO_AUTH_TOKEN=your_twilio_auth_token
TWILIO_TRIAL_NUMBER=your_twilio_phone_number
Frontend (frontend/.env
)
VITE_API_BASE_URL=http://localhost:8080/api/v1
All endpoints are prefixed with /api/v1
.
POST /register
: User registrationPOST /login
: User loginPOST /verify
: Verify user account with a tokenPOST /resend-verification
: Resend verification tokenPOST /refresh
: Refresh JWT tokenPOST /logout
: Invalidate refresh token
GET /
: Get user profilePUT /
: Update user profilePOST /change-password
: Change user passwordDELETE /
: Delete user account
GET /
: Get all transactions (with date filtering)POST /
: Create new transactionGET /{id}
: Get a single transactionPUT /{id}
: Update transactionDELETE /{id}
: Delete transactionGET /export
: Export transactions to CSVPOST /from-template/{templateId}
: Create a transaction from a template
GET /
: Get all categories for the userPOST /
: Create new categoryGET /{id}
: Get a single categoryPUT /{id}
: Update categoryDELETE /{id}
: Delete category
GET /
: Get all budgets (with year/month filtering)POST /
: Create/update budgetGET /{id}
: Get a single budgetPUT /{id}
: Update a budgetDELETE /{id}
: Delete a budget
POST /transactions/{transactionId}/receipts
: Upload and attach a receiptGET /transactions/{transactionId}/receipts
: Get all receipts for a transactionDELETE /receipts/{receiptId}
: Delete a specific receipt
GET, POST /
: Get all or create a new recurring transactionGET, PUT, DELETE /{id}
: Get, update, or delete a specific onePATCH /{id}/status
: Activate or deactivate a recurring transaction
GET, POST /
: Get all or create a new transaction templateGET, PUT, DELETE /{id}
: Get, update, or delete a specific template
GET /stats
: Get financial statistics for a date range
GET /
: Get all notifications for the userPOST /{id}/read
: Mark a notification as readPOST /read-all
: Mark all notifications as read
GET /
: Get a list of all countriesGET /{id}
: Get a single country by ID
Full API documentation available at /api/v1/api-docs
and Swagger UI at /swagger-ui.html
when running the backend.
This project demonstrates mastery of:
β Backend Development
- RESTful API design and implementation
- JWT authentication and authorization
- Database design and ORM usage
- File upload and storage
- Third-party API integration
β Frontend Development
- Modern React development patterns
- State management and component architecture
- Responsive design principles
- Data visualization and charting
- Form handling and validation
β Full-Stack Integration
- Frontend-backend communication
- Error handling and user feedback
- Security best practices
- Performance optimization
β Project Management
- Agile development methodology
- Version control with Git
- Documentation and code organization
- Testing and debugging
Phase | Duration | Tasks |
---|---|---|
Setup & Auth | Days 1-2 | β Project setup, JWT authentication |
Core CRUD | Days 3-4 | β Transaction and category APIs |
Frontend CRUD | Days 5-6 | β React components and forms for Transactions, Budgets, Categories |
Dashboard | Days 7-8 | β Charts and data visualization |
Filtering & Export | Days 9-10 | β Date filters and CSV export |
Advanced Features | Days 11-12 | β All advanced features implemented |
Polish & Deploy | Days 13-14 | β Final testing, bug fixes, and deployment preparations complete |
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature
) - Commit your changes (
git commit -m 'Add some AmazingFeature'
) - Push to the branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
Otmane Touhami
- GitHub: @OtmaneTouhami
- Email: otmanetouhami.dev@gmail.com
- LinkedIn: Otmane Touhami
ALX Software Engineering Student
Phase: Project Complete & Ready for Deployment
Completed:
- Full backend and frontend implementation of all core and advanced features.
- Comprehensive end-to-end testing has been performed.
- The application is stable and all major bugs have been addressed.
Next: The application is ready for deployment to a live environment.
This project is licensed under the MIT License - see the LICENSE file for details.
- ALX Africa - For the comprehensive software engineering program
- The ALX SE Community - For continuous support and collaboration
- Open Source Libraries - For the amazing tools that make this project possible
Made with β€οΈ as part of the ALX SE Webstack Portfolio Project