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
- 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
- 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
- Database: Supabase (PostgreSQL)
- Backend Hosting: Render
- Frontend Hosting: Vercel
- File Storage: Server-based uploads with CORS support
SpendWise/
βββ 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
β βββ uploads/ # File upload storage
βββ mcp-tools/ # Development tools and scripts
- 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 root dependencies
npm install
# Install client dependencies
cd client
npm install
# Install server dependencies
cd ../server
npm install
Note: 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:3000
Client (.env in client/ directory):
# API Configuration
VITE_API_URL=http://localhost:5000
VITE_CLIENT_URL=http://localhost:5173
VITE_ENVIRONMENT=development
VITE_DEBUG_MODE=true
Run the database migrations (if using local PostgreSQL):
cd server
npm run migrate
For Supabase, import the provided SQL schema file.
Terminal 1 - Backend:
cd server
npm run dev
Terminal 2 - Frontend:
cd client
npm run dev
The 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
cd client
npm run test
# Run backend tests
cd server
npm run test
# Lint code
npm run lint
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.