Back to Home

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

  1. Import ~10k active CS faculty from CSRankings — name, university, country, homepage, Scholar, ORCID — filtered to whatever countries you care about.
  2. 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.
  3. Outreach — one-click paper-fetching and email-drafting per professor. Drafts land in your Gmail Drafts folder; nothing is ever sent automatically.
  4. 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.
  5. 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 serve command, 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 |