A comprehensive budget tracking and spending visualization tool for University of Waterloo students
Live App: https://watspend.vercel.app
Go to https://watspend.vercel.app and sign in with your Google account.
- Download the extension: Download ZIP
- Extract the ZIP file
- Open Chrome and go to
chrome://extensions/ - Enable Developer mode (toggle in top right)
- Click Load unpacked
- Select the
src/extensionfolder from the extracted files - The WatSpend icon appears in your toolbar
- Go to the WatCard portal and log in
- Navigate to your transaction history
- Click the WatSpend extension icon
- Click "Scrape Transactions"
- Return to watspend.vercel.app to see your data!
If you want to run WatSpend locally for development:
| Requirement | Version | Download |
|---|---|---|
| Node.js | 18+ | https://nodejs.org |
| npm | 9+ | Included with Node.js |
| Google Chrome | Latest | https://google.com/chrome |
git clone https://gitlab.uwaterloo.ca/se101-f24/project_team_10.git
cd project_team_10You need your own Google OAuth credentials for local login to work:
- Go to Google Cloud Console
- Create a new project (or select existing)
- Navigate to APIs & Services → Credentials
- Click Create Credentials → OAuth 2.0 Client ID
- Configure consent screen if prompted (External, add your email as test user)
- Select Web application as application type
- Add authorized origins and redirects:
- Authorized JavaScript origins:
http://localhost:5173 - Authorized redirect URIs:
http://localhost:4000/api/auth/google/callback
- Authorized JavaScript origins:
- Click Create and copy your Client ID and Client Secret
cd mealplan-server
npm installCreate mealplan-server/.env:
PORT=4000
DB_HOST=riku.shoshin.uwaterloo.ca
DB_USER=<your_uwaterloo_db_username>
DB_PASS=<your_uwaterloo_db_password>
DB_NAME=SE101_Team_10
JWT_SECRET=any-random-string-here
SESSION_SECRET=another-random-string-here
GOOGLE_CLIENT_ID=<your_google_client_id_from_step_2>
GOOGLE_CLIENT_SECRET=<your_google_client_secret_from_step_2>
GOOGLE_CALLBACK_URL=http://localhost:4000/api/auth/google/callback
FRONTEND_URL=http://localhost:5173
NODE_ENV=developmentStart the server:
npm startBackend runs at http://localhost:4000
cd src
npm installCreate src/.env:
VITE_API_URL=http://localhost:4000Start the development server:
npm run devFrontend runs at http://localhost:5173
- Open Chrome and go to
chrome://extensions/ - Enable Developer mode (toggle in top right)
- Click Load unpacked
- Select the
src/extensionfolder - The WatSpend icon appears in your toolbar
- Open http://localhost:5173 in Chrome
- Click "Sign in with Google"
- Go to the WatCard portal and log in
- Click the WatSpend extension icon
- Click "Scrape Transactions"
- Return to the dashboard to see your imported data
cd tests
pip install -r ../requirements.txt
pytest test_code.py -v├── README.md ← This file
├── requirements.txt ← Python dependencies
├── build/ ← Compiled output (generated)
├── database/ ← Database schema and migrations
├── docs/ ← Documentation
│ └── user_manual.md ← End-user guide
├── mealplan-server/ ← Backend API (Node.js/Express)
├── src/ ← Frontend (React/TypeScript/Vite)
│ └── extension/ ← Chrome extension
└── tests/ ← Test files
| Component | URL |
|---|---|
| Frontend | https://watspend.vercel.app |
| Backend | https://watspend-api.onrender.com |
- Push to GitHub
- Go to vercel.com → New Project
- Import repository
- Add env:
VITE_API_URL=https://your-backend.onrender.com - Deploy
- Go to render.com → New Web Service
- Connect repository
- Add environment variables (same as local
.envbut with production URLs) - Deploy
- Update Google OAuth redirect URIs in Google Cloud Console
- Update
API_BASE_URLinsrc/extension/background.js - Reload the Chrome extension
| Layer | Technology |
|---|---|
| Frontend | React 18, TypeScript, Vite, Tailwind CSS, Shadcn/ui, Recharts |
| Backend | Node.js, Express, JWT, Google OAuth 2.0 |
| Database | MySQL 8.0 |
| Extension | Chrome Manifest V3 |
| Member | Role |
|---|---|
| Shiman | Extension Lead |
| Liron | Auth Lead |
| Ava | Frontend Lead |
| Krish | Backend Lead |
| Elaine | Reports Lead |
SE101 Fall 2025 | University of Waterloo