A production-grade semantic course search platform for NYU students (Feb 2026)
A robust, full-stack application to scrape, index, and semantically search 19,000+ NYU courses. Built with FastAPI, React 19, PostgreSQL (pgvector), and Redis.
1. Clone the repository:
git clone https://github.com/harshagarwalnyu/nyu-course-search.git
cd nyu-course-search2. Setup Environment Variables:
Copy .env.example to .env and fill in your API keys (see API Keys section).
cp .env.example .env3. Start the application:
# Option 1: Start Core Stack (Backend, Frontend, DB, Redis) - Recommended
make dev
# Option 2: Start Full Stack (Includes Neo4j & Workers)
make dev-fullAccess the application:
- 🌐 Frontend: http://localhost:3005
- 📚 Backend API: http://localhost:8005/docs
- 🧠 AI Semantic Search: Find courses by concept (e.g. "ethics in AI") using
pgvector. - 🔐 NYU Auth Wall: Strict student-only access via @nyu.edu OTP verification.
- 📊 Massive Index: Over 19,000 courses scraped from NYU Bulletin and Albert.
- 🎨 Modern Dashboard: Responsive UI with dark mode, real-time filtering, and "Thinking UI" traces.
- ⚡ Optimized Dev: Docker profiles for fast startup and
uvfor lightning-fast Python installs.
To enable AI features, add these keys to your .env:
| Service | Key Name | Purpose | Cost |
|---|---|---|---|
| Hugging Face | HF_INFERENCE_API_KEY |
Vector Embeddings | Free |
| Jina AI | JINA_API_KEY |
Search Reranking | Free Tier |
| Groq | GROQ_API_KEY |
Llama 4 Reasoning | Free Beta |
| OpenRouter | OPENROUTER_API_KEY |
Graph Extraction | Cheap |
| Command | Action |
|---|---|
make setup |
Initial build and dependency pull |
make dev |
Start Core stack in background (Fast) |
make dev-full |
Start All services (Neo4j, Temporal, Workers) |
make logs-core |
View live logs for the core application |
make build |
Rebuild all containers in parallel |
make clean |
Stop and wipe all data/containers |
make migrate-embeddings |
Regenerate all 19k course vectors |
- Backend: FastAPI (Python 3.11) + Celery (Workers)
- Frontend: React 19 + Vite + Tailwind CSS 4.0
- Database: PostgreSQL 17 +
pgvector - Cache: Redis 7.4
- Intelligence: Neo4j (Knowledge Graph) + Temporal (Durable Workflows)
make test # Run all tests
make test-backend # Backend only
make test-frontend # Frontend only- Fork the repo
- Create your branch (
git checkout -b feature/AmazingFeature) - Commit changes (
git commit -m 'Add some AmazingFeature') - Push to branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Built with ❤️ for the NYU community by Harsh Agarwal