A comprehensive personal finance management application that empowers users to take control of their finance health through intelligent expense tracking, budget management, and goal setting.
SpendWise is a modern, full-stack personal finance application designed to help individuals manage their money effectively. Built with a Ruby on Rails API backend and a React frontend, it provides a seamless experience for tracking expenses, managing budgets, and achieving financial goals.
- Create and manage budgets for different financial goals
- Set financial targets for each budget
- Track progress towards your financial objectives
- User-specific budgets with secure access control
- Record expenses with detailed descriptions
- Categorize transactions for better organization
- Track spending patterns across different categories
- Date-based transaction filtering
- Create custom spending categories
- Organize transactions by category
- Flexible category system for personalized financial tracking
- Secure user registration and login
- JWT-based authentication for API security
- User-specific data isolation
- Role-based access control
- Ruby on Rails 6.1.3 - Web framework
- PostgreSQL - Database
- Devise + JWT - Authentication
- JSONAPI Serializer - API responses
- RSpec - Testing framework
- Puma - Web server
- React - User interface
- Create React App - Development environment
- Modern JavaScript (ES6+)
- Rack CORS - Cross-origin resource sharing
- Spring - Application preloader
- Bootsnap - Fast boot times
SpendWise follows a modern client-server architecture:
┌─────────────────────────────────────────────────┐
│ React Frontend │
│ (Port 3001 - Development) │
│ │
│ - Component-based UI │
│ - State Management │
│ - API Integration │
└──────────────────┬──────────────────────────────┘
│
│ HTTP/JSON API
│ JWT Authentication
│
┌──────────────────▼──────────────────────────────┐
│ Rails API Backend │
│ (Port 3000 - Development) │
│ │
│ - RESTful API Endpoints │
│ - Business Logic │
│ - Authentication & Authorization │
└──────────────────┬──────────────────────────────┘
│
│ ActiveRecord ORM
│
┌──────────────────▼──────────────────────────────┐
│ PostgreSQL Database │
│ │
│ - User Data │
│ - Budgets & Transactions │
│ - Categories │
└─────────────────────────────────────────────────┘
For detailed architecture documentation, see docs/ARCHITECTURE.md
- Ruby 2.7.4
- Rails 6.1.3+
- PostgreSQL
- Node.js & npm
- Git
-
Clone the repository
git clone https://github.com/Limeload/SpendWise.git cd SpendWise
-
Backend Setup
# Install dependencies bundle install # Setup database rails db:create rails db:migrate rails db:seed # Start Rails server rails server
The API will be available at
http://localhost:3000
-
Frontend Setup
# Navigate to client directory cd client # Install dependencies npm install # Start React development server npm start
The frontend will be available at
http://localhost:3001
# Backend tests
bundle exec rspec
# Frontend tests
cd client && npm test
# Create database
rails db:create
# Run migrations
rails db:migrate
# Seed database
rails db:seed
# Reset database
rails db:reset
# Start both frontend and backend
./bin/start
# Setup development environment
./bin/setup
Method | Endpoint | Description |
---|---|---|
POST | /login |
User authentication |
POST | /signup |
User registration |
DELETE | /logout |
User logout |
Method | Endpoint | Description |
---|---|---|
GET | /api/v1/budgets |
List user budgets |
POST | /api/v1/budgets |
Create new budget |
GET | /api/v1/budgets/:id |
Get specific budget |
PATCH | /api/v1/budgets/:id |
Update budget |
DELETE | /api/v1/budgets/:id |
Delete budget |
Method | Endpoint | Description |
---|---|---|
GET | /api/v1/budgets/:budget_id/transactions |
List transactions |
POST | /api/v1/budgets/:budget_id/transactions |
Create transaction |
GET | /api/v1/budgets/:budget_id/transactions/:id |
Get transaction |
PATCH | /api/v1/budgets/:budget_id/transactions/:id |
Update transaction |
DELETE | /api/v1/budgets/:budget_id/transactions/:id |
Delete transaction |
Method | Endpoint | Description |
---|---|---|
GET | /api/v1/categories |
List categories |
POST | /api/v1/categories |
Create category |
GET | /api/v1/categories/:id |
Get category |
PATCH | /api/v1/categories/:id |
Update category |
DELETE | /api/v1/categories/:id |
Delete category |
email
- Unique user emailencrypted_password
- Securely hashed passwordname
- User's full namerole
- User role for authorizationjti
- JWT token identifier
name
- Budget namefinancial_goal
- Target amountuser_id
- Foreign key to users
amount
- Transaction amountdescription
- Transaction detailsdate
- Transaction datetimebudget_id
- Foreign key to budgetscategory_id
- Foreign key to categories
name
- Unique category nameuser_id
- Foreign key to users
- Password encryption using bcrypt
- JWT-based stateless authentication
- CORS configuration for secure cross-origin requests
- Input validation and sanitization
- User-specific data isolation
- Role-based access control
RAILS_MASTER_KEY # Rails credentials key
DATABASE_URL # PostgreSQL connection string
JWT_SECRET_KEY # JWT secret for token signing
We welcome contributions! Please see our CONTRIBUTING.md file for details.
- 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
- Follow Ruby style guide for backend code
- Use ESLint/Prettier for frontend formatting
- Write tests for new features
- Update documentation for API changes
✅ User authentication and authorization
✅ Budget creation and management
✅ Transaction tracking
✅ Category management
✅ RESTful API design
✅ React frontend interface
- Dashboard analytics with spending insights
- Budget vs actual spending comparisons
- Recurring transaction support
- Export functionality for financial data
- Mobile app using React Native
- Multi-currency support
- Enhanced financial goal tracking and visualization
This project is licensed under the MIT License - see the LICENSE.md file for details.
If you need help:
- Check the documentation
- Search existing issues
- Create a new issue with detailed information
Made with ❤️ for better financial management