A directory of University of Pittsburgh Computer Science Club alumni — where they work, where they interviewed, and how they can help current students (coffee chats, mentorship, referrals, resume reviews).
Backend — FastAPI · SQLModel · SQLite (dev) / Postgres (prod) · JWT + passwordless email OTP · SMTP
Frontend — React 18 · TypeScript · Vite · Tailwind CSS · Zustand · Axios · Lucide
- Python 3.12
- Node.js 20
- (Prod only) Postgres + an SMTP provider
The backend runs on SQLite with zero config and seeds a first admin on startup — no database setup needed.
cd backend
python3.12 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --host 127.0.0.1 --port 8000- API:
http://127.0.0.1:8000· docs at/docs - On first boot it creates the tables and the admin from
.env(admin@test.com/admin123by default). - Load demo alumni:
python -m scripts.seed_demo
cd frontend
npm install
echo 'VITE_API_URL=http://127.0.0.1:8000/api/v1' > .env.local
npm run dev # http://localhost:5173Use
127.0.0.1, notlocalhost, inVITE_API_URL— some machines resolvelocalhostto IPv6 while the dev backend binds IPv4, which causes 404s.
- Email OTP (default): enter any
@pitt.eduemail → the 6-digit code is shown on screen in dev (SMTP is off locally) → sign in. New emails auto-create an account. - Password:
admin@test.com/admin123(admin), or any seeded alum withpittcsc2025.
- Backend reads the repo-root
.env— see.env.example. - Frontend reads
frontend/.env.local— seefrontend/.env.example. - Local dev uses SQLite; set
POSTGRES_SERVER(+POSTGRES_*) to switch to Postgres. - SMTP is required in production for OTP login to deliver codes (password login works without it).
Backend on Render (Docker + managed Postgres), frontend on Netlify, served at alumni.pittcs.wiki. Full runbook: DEPLOYMENT.md (blueprint in render.yaml, config in netlify.toml).
backend/
app/
api/routes/ # auth (login + OTP), users, companies, interviews,
# employment, connections, emails, utils
core/ # config, db, security
models.py # SQLModel tables + schemas
scripts/seed_demo.py
frontend/
src/
components/ # ui/, layout/, alumni/, home/
pages/ # Home, Alumni list/detail, Profile, Interview Prep, Admin, ...
services/api.ts # FastAPI client
store/ # Zustand stores (auth, alumni, connection, profile, admin)
REST API under /api/v1. Auth is JWT (Bearer). Browse the full, live API at http://127.0.0.1:8000/docs. Highlights:
POST /login/access-token,POST /login/otp/request,POST /login/otp/verifyGET /users/,GET /users/{id},GET /users/preview(public),PATCH /users/meGET /companies/,GET /interviews/,GET /employment/POST /connections/,POST /connections/accept/{id},GET /connections/pending/incoming
CSC blue #1d2758 (the printer-gamut brand blue used on the logo and pittcs.wiki) with gold #FFB81C. Inter for body, Lexend for headings.
MIT — see LICENSE.
PittCSC — pittcsc.org