Live dashboard: https://chrischizinski.github.io/wildlife-grad-dashboard/
This project tracks U.S. wildlife and natural resources graduate assistantship postings and turns raw listings into a public-facing trends dashboard.
The system is designed to answer practical questions for students and advisors:
- How many assistantships are being posted over time?
- Which disciplines are most active?
- What salary ranges are being reported?
- Where are opportunities concentrated geographically?
- How complete/clean is the underlying data?
- A scraper (
src/wildlife_grad/scraper/) for TAMU wildlife job board listings. - Analysis/classification modules (
src/wildlife_grad/analysis/) for graduate relevance and discipline tagging. - Data pipeline scripts (
scripts/) to refresh and transform outputs. - A static web dashboard (
web/wildlife_dashboard.html) with JS/CSS assets and JSON-driven charts. - GitHub Actions workflows for scheduled data refresh and GitHub Pages deploy.
This status is based on the latest local analytics artifacts in this repository.
- Analytics last generated:
2026-02-15 05:19:25(web/data/dashboard_analytics.json) - Dataset represented in analytics:
229positions - Postings with salary parsed:
138 - Current graduate-assistantship file size:
22records (data/processed/verified_graduate_assistantships.json) - Automation workflows present:
.github/workflows/scrape-and-update-dashboard.yml.github/workflows/deploy-pages.yml
- Core scraping and dashboard pipeline exists and is operational.
- Data products are versioned into
data/,dashboard/data/, andweb/data/. - CI/CD automation is present for refresh + deploy.
- Dashboard redesign/rebuild work is currently in progress (see
AGENTS.mddashboard contract).
- Improve dashboard coherence across overview, discipline, compensation, geography, and data quality sections.
- Harden empty-state handling for all KPI cards and charts.
- Keep GitHub Pages path behavior robust (relative data fetches).
- Continue improving salary/location parse coverage and transparency.
src/wildlife_grad/ Python package (scraper + analysis)
scripts/ Data pipeline and maintenance scripts
web/ Dashboard frontend (HTML/CSS/JS + web/data)
data/ Raw, processed, archived, and fallback artifacts
dashboard/data/ Analytics outputs used by dashboard build flow
docs/ Supplemental architecture/setup notes
cd web
python -m http.server 8080
# then open http://localhost:8080/wildlife_dashboard.htmlThe weekly scrape workflow can post a Discord summary after each successful run.
Configure a GitHub Actions secret named DISCORD_WEBHOOK_URL and the workflow
will send:
- total graduate positions in the refreshed dashboard dataset
- salary-parsed count
- latest scrape timestamp
- titles, organizations, and locations from the latest capture batch
The discipline classifier now supports a versioned promoted model plus an
uncertainty review queue.
Detailed step-by-step guide: docs/DISCIPLINE_REVIEW_LOOP.md.
# 1) Rebuild analytics + refresh confidence queue
python scripts/generate_dashboard_analytics.py
# 2) Retrain candidate model and promote only if validation improves
python scripts/retrain_discipline_model.py
# 3) Seed conservative starter gold labels from stored assistantships, then retrain
python scripts/retrain_discipline_model.py --auto-seed-from-positions
# 4) After editing discipline_confidence_queue.csv with review decisions,
# import them into the gold label store
python scripts/import_discipline_queue_reviews.pyArtifacts:
- Gold labels:
data/processed/discipline_labels_gold.json - Model manifest:
data/models/discipline/manifest.json - Training report:
data/models/discipline/latest_training_report.json - Confidence queue:
data/processed/discipline_confidence_queue.json
Review CSV conventions (data/processed/discipline_confidence_queue.csv):
- Add
review_statuswith one of:accept_model,keep_final,override,skip - For
override, also setreviewed_discipline - Optional:
review_notes,reviewer
- This README is intentionally project/status oriented.
- Operational command details are maintained in repo docs and script help output.