Project Info
Inspiration
At UCSC, you don’t really know what a class is like until you’re already enrolled and see the syllabus. By then, it’s often too late to switch. The course catalog doesn’t tell you workload, grading style, or how strict the prerequisites really are. SlugSyllabus is a way to make that information visible before committing to a class.
What it does
SlugSyllabus lets you browse real UCSC course syllabi and automatically pulls out the parts students actually care about: • workload and pacing • grading breakdown • prerequisite expectations • a quick TLDR of what the course emphasizes You can also compare two courses side by side to help decide which one is a better fit for a given quarter.
How we built it
We built a small web app that treats the syllabus as the source of truth: • PDFs are uploaded and parsed • Gemini extracts structured insights from the syllabus text • results are cached so the app stays fast • the UI stays intentionally simple Demo Watch the demo video! https://youtu.be/8zCWNUJher8
SlugSyllabus (folder-only demo)
A pure-demo web app that stores uploaded syllabus PDFs in a folder and keeps metadata in a single JSON file (index.json).
Insights are generated on-demand via prompt keys (LLM stubbed) and optionally cached as text files in cache/.
Prereqs
- Python 3.10+
from project root
rm -rf .venv
create fresh venv with a modern Python
python3.11 -m venv .venv source .venv/bin/activate
upgrade tooling
python -m pip install --upgrade pip setuptools wheel
install deps explicitly (no guessing)
python -m pip install
fastapi
"uvicorn[standard]"
jinja2
python-multipart
pypdf
markdown
google-generativeai
sanity checks (ALL must succeed)
python -c "import fastapi; print('fastapi ok')" python -c "import uvicorn; print('uvicorn ok')" python -c "import google.generativeai as genai; print('gemini ok')"
set your API key
export GEMINI_API_KEY="YOUR_KEY_HERE"
RUN THE APP (IMPORTANT)
python -m uvicorn app.main:app --reload Open:
How it works
- PDFs are stored in
uploads/ - Metadata lives in
index.json(auto-created) - Insights tabs call
/insight/{slug}/{prompt_key}which:- checks
cache/{slug}__{prompt_key}.txt - if missing, calls the LLM stub and writes the cache file
- checks
Where to plug in a real LLM
Edit app/llm.py:
- Replace
run_llm(prompt_key, syllabus_text)with your provider call. - For a demo, you can skip PDF->text and just send a short extracted snippet.
Suggested demo script
- Upload 2 PDFs
- Open a syllabus detail page
- Click TLDR / WORKLOAD / GRADING / PREREQS tabs
- Refresh the page and click again to show caching is instant
Gemini setup
Set your key:
export GEMINI_API_KEY="YOUR_KEY"
Install deps:
pip install -r requirements.txt
Analysis
View
Metric
- 3
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- CSSIn code
- FastAPIIn code
- HTMLIn code
- PythonIn code
- Google GeminiClaimed
4 of 5 appear in the indexed code. 1 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
32 KB
Source files
8
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
nikhilJain17/SlugSyllabus
25 files · 465 KB · @ 19aa964
Structure
Interface
6 files · 24%Screens, components and styles rendered to the user.
Application logic
1 file · 4%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- Python65%
- HTML25%
- Markdown5%
- CSS4%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
requirements.txt
pypi · 7- fastapi
- google-generativeai
- jinja2
- markdown
- pypdf
- python-multipart
- uvicorn[standard]
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.