Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ modes/_profile.md
# Secrets (never commit — use .env.example as template)
.env

# Google OAuth credentials and tokens
calendar/credentials.json
calendar/token.json

# Generated
.resolved-prompt-*
node_modules/
Expand Down
30 changes: 30 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,36 @@ The scanner comes with **45+ companies** ready to scan and **19 search queries**

**Job boards searched:** Ashby, Greenhouse, Lever, Wellfound, Workable, RemoteFront

## Gmail Interview Scanner

Automatically detects interview invitation emails, updates your tracker to `Interview` status, creates prep files, and adds Google Calendar events. Zero LLM calls.

```bash
node scan-gmail.mjs # scan last 7 days
node scan-gmail.mjs --days 14 # scan last 14 days
node scan-gmail.mjs --dry-run # preview without writing files
node scan-gmail.mjs --no-calendar # skip calendar event creation
```

### Setup

1. Go to [Google Cloud Console](https://console.cloud.google.com/apis/credentials) and create a project.
2. Enable **Gmail API** and **Google Calendar API**.
3. Create an **OAuth 2.0 Client ID** (Desktop app type).
4. Download the JSON and save it as `calendar/credentials.json`.
5. Run `node scan-gmail.mjs` — a browser window opens for authorization.
6. After approving, the token is saved to `calendar/token.json` automatically.

Both `credentials.json` and `token.json` are in `.gitignore` and will never be committed.

Configure scan behavior in `config/profile.yml`:

```yaml
google:
gmail_scan_days: 7 # days back to scan
calendar_id: primary # or a specific calendar ID
```

## Dashboard TUI

The built-in terminal dashboard lets you browse your pipeline visually:
Expand Down
Empty file added calendar/.gitkeep
Empty file.
11 changes: 10 additions & 1 deletion config/profile.example.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,13 @@ cv:
# (Optional) Canva resume design ID for visual CV generation via /career-ops pdf.
# Find it in your Canva design URL: https://www.canva.com/design/DAxxxxxxx/...
# The ID starts with "D" and is 11 characters long.
# canva_resume_design_id: "DAxxxxxxxxx"
# canva_resume_design_id: "DAxxxxxxxxx"

# Google Workspace integration (Gmail + Calendar)
# Required for: node scan-gmail.mjs
# Setup: see README.md — "Gmail Interview Scanner" section
google:
credentials_path: calendar/credentials.json # OAuth2 client credentials from Google Cloud Console
token_path: calendar/token.json # Auto-generated after first auth — do not commit
gmail_scan_days: 7 # How many days back to scan (override with --days N)
calendar_id: primary # Google Calendar to add events to ("primary" or calendar ID)
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
"rollback": "node update-system.mjs rollback",
"liveness": "node check-liveness.mjs",
"scan": "node scan.mjs",
"scan:gmail": "node scan-gmail.mjs",
"gemini:eval": "node gemini-eval.mjs"
},
"keywords": [
Expand All @@ -34,6 +35,7 @@
"dependencies": {
"@google/generative-ai": "^0.24.1",
"dotenv": "^17.0.0",
"googleapis": "^171.4.0",
"js-yaml": "^4.1.1",
"playwright": "^1.58.1"
}
Expand Down
Loading