RateMyGaucho enhances UCSB GOLD to 1,200+ students per month by showing professor ratings and course data directly on course result pages. It works offline and preserves your privacy by using a local dataset.
Demo Video: https://www.youtube.com/watch?v=fl7-icSAves
courses_final_enrollment.csv).chrome://extensions, and enable “Developer mode”.To create a distributable ZIP file, run the appropriate script for your OS:
./scripts/package.ps1bash ./scripts/package.shThe build script bundles the unified dataset and content script into dist/RateMyGaucho.zip, which is ready to upload to the Chrome Web Store.
The extension ships with courses_final_enrollment.csv as its only data source. Every rating, review, and course record comes from this file, ensuring consistent results across the UI. When updating data, replace this CSV and rebuild the package.
The backend/ directory contains a production-grade Python API that powers search, analytics, and data ingestion.
| Layer | Technology |
|---|---|
| API | Python 3.12 · FastAPI · Pydantic v2 |
| Database | PostgreSQL 16 (SQLAlchemy ORM, connection pooling) |
| Search | Elasticsearch 8.17 (full-text, fuzzy matching, filters) |
| Cache | Redis 7 (cache-aside, 300 s TTL, 128 MB LRU) |
| Messaging | Apache Kafka 3.8 KRaft (no ZooKeeper) |
| Observability | OpenTelemetry → Jaeger (distributed tracing) |
| Orchestration | Docker Compose (all services with health checks) |
app/etl.py) — Reads the CSV, normalises into Department → Professor → Course → Review tables in Postgres, bulk-indexes into Elasticsearch, and publishes Kafka events.app/es_service.py) — Index management, multi-match search with fuzziness, department/GPA/professor filters.app/cache.py) — JSON cache-aside pattern reducing median latency from ~650 ms to ~180 ms.app/kafka_producer.py, app/kafka_consumer.py) — Event-driven pipeline; the consumer upserts into Postgres + ES on course.created / course.updated events.app/routes.py) — /search/courses, /search/reviews, /courses, /analytics, /healthapp/tracing.py) — Auto-instruments FastAPI, SQLAlchemy, Redis, and Elasticsearch via OTLP → Jaeger.# From the repo root
docker compose up --build -d
# API at http://localhost:8000
# Jaeger UI at http://localhost:16686
# Elasticsearch at http://localhost:9200
# Health check
curl http://localhost:8000/api/v1/health
# Search courses
curl -X POST http://localhost:8000/api/v1/search/courses \
-H 'Content-Type: application/json' \
-d '{"query": "machine learning", "department": "CMPSC"}'
# Analytics
curl http://localhost:8000/api/v1/analytics
cd backend
pip install -r requirements.txt
pytest
Contributions are welcome! Please fork the repository and submit a pull request.
MIT © 2025