An AI-powered job application tracking desktop app that automatically syncs with Gmail, classifies job-related emails using machine learning, and provides real-time analytics.
git clone --recurse-submodules https://github.com/yourusername/onlyjobs-desktop.git
cd onlyjobs-desktop
# if you already cloned without submodules
git submodule update --init --recursive
npm install
cd ml-classifier
pip install -r requirements.txt
cd ..
gmail_credentials.json in the project root (downloaded from Google Cloud Console)..env file in the project root with values for:GOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRETGOOGLE_REDIRECT_URIREACT_APP_* Firebase variables required by the React appCreate electron/.env with:
GOOGLE_OAUTH_CLIENT_IDGOOGLE_OAUTH_CLIENT_SECRETGOOGLE_OAUTH_REDIRECT_URI(Optional) Run the setup script to install all dependencies automatically:
bash setup.sh
Start both React and Electron in development mode:
# Terminal 1 - Start React dev server
npm start
# Terminal 2 - Start Electron
npm run electron-dev
# Build React app
npm run build
# Package Electron app
npm run electron-pack
Run the Jest test suite:
npm test
onlyjobs-desktop/
├── electron/ # Electron main process files
│ ├── main.js # Main entry point
│ ├── ipc-handlers.js # IPC communication handlers
│ ├── gmail-auth.js # Gmail authentication
│ └── gmail-multi-auth.js # Multi-account support
├── src/ # React app source
│ ├── components/ # React components
│ ├── pages/ # Page components
│ └── ElectronApp.tsx # Main Electron app component
├── ml-classifier/ # Python ML classifier
│ ├── scripts/ # Classification scripts
│ └── data/models/ # Trained ML models
└── public/ # Static assets
The app uses SQLite with the following main tables:
- emails: Stores all fetched emails
- jobs: Stores classified job applications
- gmail_accounts: Manages multiple Gmail accounts
- sync_status: Tracks sync progress
The classifier uses a trained model to identify job-related emails based on:
- Email content and structure
- Keywords and patterns
- Sender information
- Subject line analysis
If you encounter module version mismatch errors:
# For Electron
npm rebuild better-sqlite3 --runtime=electron --target=37.2.5 --dist-url=https://electronjs.org/headers
# For Node.js (testing)
npm rebuild better-sqlite3
Ensure redirect URIs use 127.0.0.1 (not localhost) as per Google's requirements.
HTML emails are automatically converted to plain text for better readability.
git checkout -b feature/amazing-feature)git commit -m 'Add some amazing feature')git push origin feature/amazing-feature)This project is licensed under the MIT License - see the LICENSE file for details.