A modern, minimalist expense tracking application built with PyQt5 and powered by Supabase for cloud storage and multi-user support.
- User Authentication: Secure login/registration with PBKDF2 password hashing
- Multi-User Support: Each user has isolated access to their own expenses
- Dashboard: Quick overview with today's, weekly, and monthly expense totals plus recent expense history
- Expense Management: Add, edit, delete, and search expenses with full details
- History: Browse all expenses with date range and category filters
- Analytics: Multiple visualization types:
- Daily expenses (last 30 days)
- Weekly expenses (last 12 weeks)
- Monthly expenses (last 12 months)
- Yearly expenses (last 5 years)
- Category breakdown (pie chart and bar chart)
- Search: Advanced search by description, date, amount, category, or transaction ID
- Categories: 7 pre-configured expense categories with color coding
- Payment Methods: Support for multiple payment methods (Cash, Credit Card, Debit Card, Digital Wallet, Bank Transfer)
- Cloud Storage: All data securely stored in Supabase PostgreSQL with Row Level Security
- Frontend: PyQt5 (Modern Desktop UI)
- Backend: Supabase (PostgreSQL + Authentication)
- Database: PostgreSQL
- Charting: Matplotlib
- Security: PBKDF2-SHA256 password hashing (100,000 iterations)
- Python 3.8 or higher
- A Supabase account (free tier is fine)
- Go to supabase.com
- Sign in or create a free account
- Create a new project (or use existing)
- Go to Settings → API
- Copy:
- Project URL → This is your
SUPABASE_URL - anon public key → This is your
SUPABASE_ANON_KEY
- Project URL → This is your
- In your project root folder (where
main.pyis), create a file named.env - Add your credentials: ``` SUPABASE_URL=https://your-project-id.supabase.co SUPABASE_ANON_KEY=your-anon-key-here ```
- Save the file
- Press
Win + Xand select "Command Prompt (Admin)" - Run these commands (replace with your actual credentials): ``` setx SUPABASE_URL "https://your-project-id.supabase.co" setx SUPABASE_ANON_KEY "your-anon-key-here" ```
- Restart your terminal or IDE for changes to take effect
```bash pip install -r requirements.txt ```
If you get an error, try: ```bash python -m pip install -r requirements.txt ```
```bash python scripts/verify_setup.py ```
You should see ✓ Setup verification PASSED
- Go to your Supabase project dashboard
- Click SQL Editor in the left sidebar
- Click + New Query
- Open
scripts/supabase_schema.sqlwith a text editor - Copy ALL the SQL code
- Paste it into the Supabase SQL Editor
- Click Run (or press Ctrl + Enter)
- Wait for success message
```bash python main.py ```
- Click the Register tab
- Create a new account with username and password
- Click Register
- Switch to Login tab
- Login with your credentials
- Start tracking expenses!
- Check Step 1 and Step 2 above
- Make sure you created the
.envfile correctly - If using environment variables, restart your terminal/IDE
- Verify your SUPABASE_URL is correct (should start with
https://) - Check that your Supabase project is active
- Try running
python scripts/verify_setup.pyfor more details
- You haven't run the database schema yet (Step 5)
- Go to Supabase SQL Editor and run
scripts/supabase_schema.sql
- Run
python scripts/verify_setup.pyto diagnose the issue - Check your internet connection
- Ensure all dependencies are installed:
pip install -r requirements.txt
- Supabase Docs: https://supabase.com/docs
- Check if
verify_setup.pycan help diagnose issues - Review logs in the console window ```
- View today's, this week's, and this month's spending totals
- See your 10 most recent expenses
- Click "+ Add Expense" to create a new expense entry
- Browse all your expenses
- Filter by category and date range
- Edit or delete individual expenses
- Visualize spending over time (daily, weekly, monthly, yearly)
- View category breakdown as pie or bar chart
- Search expenses by description, date, amount, category, or transaction ID
id(UUID): Primary keyusername(VARCHAR): Unique login identifierpassword_hash(VARCHAR): Encrypted password with saltemail(VARCHAR): Optional emailcreated_at,updated_at: Timestamps
id(SERIAL): Primary keyuser_id(UUID): Foreign key to usersamount(DECIMAL): Expense amountcategory(VARCHAR): Expense categorydescription(TEXT): Optional descriptiondate(DATE): Expense datetime(TIME): Expense timepayment_method(VARCHAR): Payment typetransaction_id(VARCHAR): Optional transaction referencecreated_at,updated_at: Timestamps
- Per-user categories with custom colors
- Default categories created automatically
- Password Encryption: PBKDF2-SHA256 with 100,000 iterations + salt
- Row Level Security: PostgreSQL RLS policies enforce user data isolation
- User Authentication: Verified login system with session management
- Data Privacy: Each user can only access their own expenses
- Automatic Triggers: Timestamp updates on data changes
- Color Scheme: Blue (#3498db), Red (#e74c3c), Orange (#f39c12), Green (#27ae60), Teal (#1abc9c), Gray (#95a5a6)
- Minimalist Design: Clean, distraction-free interface
- Responsive Layout: Tables and charts scale with window size
- Modern Styling: Rounded corners, smooth hover effects, professional typography
``` expense_tracker
- ├──
main.py# Application entry point with login
├──requirements.txt# Python dependencies
├──README.md# This file
├──SUPABASE_SETUP.md# Detailed Supabase setup guide
└──scripts- ├──
supabase_db.py# Supabase database layer
├──supabase_schema.sql# Database schema (run in Supabase)
├──auth_utils.py# Password encryption utilities
├──login_dialog.py# Login/registration UI
├──charts.py# Chart generation
├──supabase_init.py# Supabase connection test
├──verify_setup.py# Setup verification script\
- ├──
```
Required:
SUPABASE_URL: Your Supabase project URLSUPABASE_ANON_KEY: Your Supabase anonymous key
See Supabase Setup Guide for detailed instructions.
- Verify
SUPABASE_URLandSUPABASE_ANON_KEYare correct - Ensure your Supabase project is active
- Run
python scripts/verify_setup.pyto diagnose issues
- Username is case-sensitive
- Minimum 3 characters for username, 6 for password
- Ensure you registered before attempting login
- Data is user-specific; verify you're logged in as the correct user
- Check database connection is active
- Ensure you have expenses in your database
- Charts will show "No expenses yet" if data is missing
- Budget alerts and notifications
- Recurring expense templates
- Multi-currency support
- Mobile app (iOS/Android)
- Data export (CSV, PDF)
- Advanced analytics and reports
- Shared expenses/splitting
- Receipt image attachment
- Python 3.8+
- PyQt5 5.15+
- Matplotlib 3.8+
- Supabase 2.4+
- Vipul Vinod Deshmukh
- Vinayraj Singh Chouhan
IT License
Copyright (c) 2025 Vipul Vinod Deshmukh Vinayraj Singh Chouhan
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
For issues or questions:
- Check the Supabase Setup Guide
- Review the Troubleshooting section
- Run
python scripts/verify_setup.pyfor diagnostics - Check Supabase documentation: https://supabase.com/docs