title: "profdash" date: "2026-08-31" description: "Self-hosted professor outreach tracker for prospective CS grad students."
profdash
Self-hosted professor outreach tracker for prospective CS grad students.
Applying to CS grad programs means emailing dozens — often hundreds — of professors. Spreadsheets collapse fast. profdash is a pipeline that automates the grunt work while keeping you in control.
The pipeline
- Import ~10k active CS faculty from CSRankings — name, university, country, homepage, Scholar, ORCID — filtered to whatever countries you care about.
- Score the backlog with an AI coding agent (Claude Code, Codex, ...) driven by a prompt pack this repo ships: the agent fetches each professor's DBLP publication digest, judges research fit against your profile, and writes evidence-backed judgments into SQLite.
- Outreach — one-click paper-fetching and email-drafting per professor. Drafts land in your Gmail Drafts folder; nothing is ever sent automatically.
- Track replies — a Gmail scanner classifies incoming replies (interested / no-funding / template / rejected / ...) with confidence levels and queues them for your confirmation. A human always approves status changes.
- See the whole pipeline — deadlines, universities, positions board, follow-ups, shortlists, and stats.
Architecture
- Backend: Python, FastAPI, SQLite (WAL mode)
- Frontend: Server-rendered Jinja2 + HTMX + Alpine.js + Tailwind (vendored, no CDN, no node_modules)
- Data sources: CSRankings (GitHub), DBLP search API, Gmail API (optional)
- Package:
pip install profdash
The server binds to 127.0.0.1 by default — it's designed for localhost/personal LAN use. Everything lives in a single SQLite file with XDG-style paths (~/.config/profdash, ~/.cache/profdash, ~/.local/share/profdash).
Key design decisions
- Local-first. Your data never leaves your machine except for the API calls you choose to make (DBLP, Gmail). No telemetry, no cloud dependency.
- Human-in-the-loop. The AI scores with evidence and the Gmail scanner suggests classifications, but every status change requires your explicit confirmation.
- Tool-agnostic scoring. The scoring pass works with any AI coding agent — the repo ships a ready-to-paste prompt pack for Claude Code / Codex, including calibration guidance and safety rules (never invent papers, never score without evidence).
- No build step. Vendored frontend assets, single
prof servecommand, zero JavaScript toolchain.
Commands
| Command | What it does |
|---|---|
| prof init [--demo] | Create database + starter profile + sample data |
| prof import csrankings | Pull faculty from CSRankings |
| prof serve | Run the dashboard |
| prof digest <ids...> | Fetch DBLP publication digests |
| prof apply judgment.json | Apply an AI/human scoring judgment |
| prof worker tasks | Process paper-fetch / email-draft queue |
| prof worker gmail-scan | Scan Gmail replies → confirmation queue |
| prof setup-gmail | One-time OAuth flow for Gmail features |