A modern, full-stack expense tracking application built with React and Node.js, featuring real-time data synchronization, multi-language support, and intelligent financial insights.
Hananel Sabag - Software Engineer πΌ GitHub: @HananelSabag
Portfolio Showcase Project - This project demonstrates full-stack development skills including React, Node.js, PostgreSQL, authentication, real-time features, and production deployment. Created as part of my software engineering portfolio.
This repository is shared for educational and portfolio demonstration purposes only.
- β Clone and explore the codebase to see implementation patterns
- β Study the architecture and coding techniques used
- β Review the documentation and project structure
- β Use as reference for learning full-stack development
- β Do NOT deploy this project as your own website
- β Do NOT use for commercial purposes
- β Do NOT claim as your own work
- β Critical configuration files are excluded for security
For security reasons, sensitive configuration files and production secrets are not included in this repository. The project is designed to showcase code quality and architecture while protecting the live production environment.
SpendWise is a comprehensive personal finance management tool that helps users track expenses, manage budgets, and gain insights into their spending patterns. The application features a clean, responsive interface with support for both English and Hebrew languages, dark/light themes, and offline capabilities through Progressive Web App (PWA) technology.
- Smart Transaction Management - Add, edit, and categorize transactions with intelligent suggestions
- Real-time Dashboard - Visual insights with charts and spending analytics
- Multi-language Support - Full Hebrew and English localization with RTL support
- Responsive Design - Optimized for desktop, tablet, and mobile devices
- Offline Capabilities - PWA with offline data synchronization
- Secure Authentication - JWT-based authentication with email verification
- Data Export - Export transactions in CSV, JSON, and PDF formats
- Category Management - Custom categories with icons and descriptions
- Dark/Light Themes - User preference-based theme switching
- Automated Testing - Unit and integration test suite (Vitest for frontend, Jest for backend)
- CI/CD Pipeline - GitHub Actions for automated testing and linting on every push
- Row-Level Security (RLS) - Supabase RLS policies for data isolation per user
- Framework: React 18 with Vite
- Styling: Tailwind CSS with custom components
- State Management: TanStack Query (React Query) + Zustand
- Routing: React Router v6
- Forms: React Hook Form with Zod validation
- Charts: Recharts for data visualization
- Icons: Lucide React + Heroicons
- PWA: Vite PWA plugin with Workbox
- Testing: Vitest + React Testing Library
- Runtime: Node.js 18+
- Framework: Express.js
- Database: PostgreSQL with native pg driver
- Authentication: JWT with bcrypt password hashing
- Email: Nodemailer with Gmail SMTP
- File Upload: Multer for profile images
- Security: Helmet, CORS, XSS protection, rate limiting
- Logging: Winston with daily log rotation
- Scheduling: Node-cron for automated tasks
- Testing: Jest with supertest
- Database: Supabase (PostgreSQL)
- Backend Hosting: Render
- Frontend Hosting: Vercel
- File Storage: Server-based uploads with CORS support
- GitHub Actions
SpendWise/
βββ .github/ # CI/CD workflows (GitHub Actions)
βββ client/ # Frontend React application
β βββ src/
β β βββ components/ # Reusable UI components
β β βββ pages/ # Main application pages
β β βββ hooks/ # Custom React hooks
β β βββ context/ # React context providers
β β βββ utils/ # Utility functions
β β βββ config/ # Configuration files
β βββ public/ # Static assets
β βββ dist/ # Production build output
βββ server/ # Backend Node.js application
β βββ routes/ # API route definitions
β βββ controllers/ # Business logic controllers
β βββ middleware/ # Express middleware
β βββ config/ # Database and app configuration
β βββ utils/ # Server utilities
β βββ __tests__/ # Backend test suite (Jest)
β βββ uploads/ # File upload storage
βββ mcp-tools/ # MCP server for AI-powered database queries
- Node.js 18+ and npm 8+
- PostgreSQL database (or Supabase account)
- Gmail account for email services (optional)
git clone https://github.com/HananelSabag/SpendWise.git
cd SpendWise# Install client dependencies
cd client
npm install
# Install server dependencies
cd ../server
npm installNote: You'll need to create your own environment files as they're not included in the repository for security reasons.
Server (.env in server/ directory):
# Database
DATABASE_URL=postgresql://username:password@host:port/database
# JWT
JWT_SECRET=your-super-secret-jwt-key
JWT_REFRESH_SECRET=your-refresh-secret-key
# Email (optional)
GMAIL_USER=your-email@gmail.com
GMAIL_APP_PASSWORD=your-app-password
# Server
PORT=5000
NODE_ENV=development
ALLOWED_ORIGINS=http://localhost:5173,http://localhost:3000Client (.env in client/ directory):
# API Configuration
VITE_API_URL=http://localhost:5000
VITE_CLIENT_URL=http://localhost:5173
VITE_ENVIRONMENT=development
VITE_DEBUG_MODE=trueRun the database migrations (if using local PostgreSQL):
cd server
npm run migrateFor Supabase, import the provided SQL schema file.
Terminal 1 - Backend:
cd server
npm run devTerminal 2 - Frontend:
cd client
npm run devThe application will be available at:
- Frontend: http://localhost:5173
- Backend API: http://localhost:5000
The application supports mobile development with network access:
# Start with network access for mobile testing
cd client
npm run dev:mobile
# Your mobile device can access the app at:
# http://YOUR_LOCAL_IP:5173# Run frontend tests (Vitest)
cd client
npm run test
# Run frontend tests with coverage
cd client
npm run test:coverage
# Run backend tests (Jest)
cd server
npm test
# Lint frontend code
cd client
npm run lintEvery push to main triggers the GitHub Actions pipeline which:
- Runs all frontend tests (Vitest)
- Runs all backend tests (Jest)
- Lints the frontend codebase (ESLint)
This project is licensed under the ISC License - see the LICENSE file for details.
This is a portfolio project, but feedback and suggestions are welcome:
- Fork the repository
- Create a feature branch (
git checkout -b feature/suggestion) - Commit your changes (
git commit -m 'Add suggestion') - Push to the branch (
git push origin feature/suggestion) - Open a Pull Request
For questions about this project or collaboration opportunities:
Hananel Sabag πΌ GitHub: @HananelSabag
SpendWise - A full-stack portfolio project demonstrating modern web development practices and technologies.