A modern, full-stack personal finance tracker to help you manage your expenses, income, and budgets.
- 📊 Transaction Management: Track all your expenses and income
- 🏦 Account Tracking: Manage bank accounts and credit cards
- 🏷️ Customizable Categories: Default categories with full customization
- 📈 Visual Reports: Charts and graphs for spending analysis
- 💵 Budget Tracking: Set and monitor spending limits per category
- 📎 Attachments: Upload receipts and documents
- 🏷️ Tags: Organize transactions with custom tags
- 📅 Time-based Analysis: View spending patterns over time
- React - UI library
- Vite - Build tool and dev server
- React Router - Navigation
- Recharts - Data visualization
- Lucide React - Icons
- Axios - HTTP client
- Node.js - Runtime environment
- Express - Web framework
- PostgreSQL - Production database
- PostgreSQL - Primary database
- Multer - File upload handling
- Express Validator - Input validation
- Docker - Containerization
- Docker Compose - Multi-container orchestration
- Nginx - Production web server and API reverse proxy
Deploy FinVibe to Azure using Terraform and GitHub Actions. The deployment uses:
- Infrastructure as Code: Terraform with Azure Verified Modules (AVM)
- Automated CI/CD: GitHub Actions with OIDC authentication
- Container orchestration: Azure Container Apps with auto-scaling
- Managed services: Azure Container Registry, Log Analytics
See the Azure Deployment Guide for complete setup instructions.
The easiest way to deploy FinVibe locally or on your own server is using Docker. See the Docker Setup Guide for comprehensive instructions.
Quick Docker Start:
# Copy environment file
cp .env.example .env
# Start all services
docker-compose up -d
# Initialize database
docker-compose exec backend npm run migrate
docker-compose exec backend npm run seedAccess:
- Frontend: http://localhost
- Backend API: http://localhost:3000
For detailed instructions, troubleshooting, and production deployment, see DOCKER_SETUP.md
For local development without Docker:
Before you begin, ensure you have the following installed:
- Node.js (v18 or higher) - Download here
- npm (comes with Node.js)
- Git - Download here
To check if you have them installed:
node --version
npm --version
git --versiongit clone https://github.com/Egoorbis/finvibe.git
cd finvibe# Navigate to backend directory
cd backend
# Install dependencies
npm install
# Create environment file
cp .env.example .env
# Initialize the database (creates tables)
npm run migrate
# Seed default categories (adds starter data)
npm run seed
# Start the development server
npm run devThe backend API will run on http://localhost:3000
Open a new terminal window:
# Navigate to frontend directory (from project root)
cd frontend
# Install dependencies
npm install
# Create environment file
cp .env.example .env
# Start the development server
npm run devThe frontend will run on http://localhost:5173
Open your browser and navigate to:
http://localhost:5173
- Azure Deployment Guide - Production deployment using Terraform and GitHub Actions
- Docker Setup Guide - Local deployment with Docker Compose
- Getting Started - Step-by-step local development setup
- Windows Setup - Windows-specific installation instructions
- Architecture Overview - System design, components, and data flow
- Environment Variables - Environment configuration reference
- Terraform Infrastructure - Infrastructure as Code documentation
finvibe/
├── backend/
│ ├── src/
│ │ ├── controllers/ # Request handlers
│ │ ├── models/ # Database models
│ │ ├── routes/ # API routes
│ │ ├── middleware/ # Custom middleware
│ │ ├── db/ # Database setup and migrations
│ │ └── index.js # Entry point
│ └── package.json
├── frontend/
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── pages/ # Page components
│ │ ├── services/ # API services
│ │ ├── utils/ # Helper functions
│ │ ├── App.jsx # Main App component
│ │ └── main.jsx # Entry point
│ ├── nginx.conf.template # Nginx reverse proxy config
│ ├── public/ # Static assets
│ └── package.json
└── README.md
The frontend communicates with the backend through an nginx reverse proxy pattern:
- Development: Vite dev server proxies
/apirequests tohttp://localhost:3000 - Production: Nginx proxies
/apirequests to the backend container - Configuration: The
BACKEND_URLenvironment variable specifies the backend location
This approach allows the frontend to use relative URLs (/api/...) that work seamlessly across all deployment environments without requiring different builds.
- Click "Add Transaction" button
- Fill in the details (date, amount, category, account)
- Optionally add description, tags, and attachments
- Click "Save"
- Navigate to "Categories" page
- Click "Add Category"
- Enter name and select type (income/expense)
- Choose a color (optional)
- Click "Save"
- Go to "Budgets" page
- Click "Create Budget"
- Select category and time period
- Set spending limit
- Monitor your progress on the dashboard
GET /api/transactions- Get all transactionsGET /api/transactions/:id- Get single transactionPOST /api/transactions- Create transactionPUT /api/transactions/:id- Update transactionDELETE /api/transactions/:id- Delete transaction
GET /api/accounts- Get all accountsPOST /api/accounts- Create accountPUT /api/accounts/:id- Update accountDELETE /api/accounts/:id- Delete account
GET /api/categories- Get all categoriesPOST /api/categories- Create categoryPUT /api/categories/:id- Update categoryDELETE /api/categories/:id- Delete category
GET /api/reports/summary?period=month- Get period summaryGET /api/reports/by-category- Get spending by categoryGET /api/reports/account-balance- Get account balances
- id, date, amount, type (income/expense), description
- account_id, category_id, tags, attachment_path
- created_at, updated_at
- id, name, type (bank/credit_card), balance, currency
- created_at, updated_at
- id, name, type (income/expense), color, icon
- created_at, updated_at
- id, category_id, amount, period (monthly/yearly)
- start_date, end_date
- created_at, updated_at
- Investment account tracking
- Multi-currency support
- Recurring transactions
- Data export (CSV/PDF)
- Mobile app
- Cloud database migration
- User authentication
- Data backup and restore
- Receipt OCR scanning
- Budget alerts and notifications
This is a personal project, but suggestions and improvements are welcome!
MIT
For questions or issues, please open an issue on GitHub.
Built with ❤️ using React and Node.js