SyllabusSync is a FastAPI web application that allows users to upload course syllabi (PDF/DOCX), extract structured information using an LLM, and manage uploaded syllabi through a dashboard.
app/
├── routers/
│ ├── routes_user.py # Login, dashboard UI endpoints
│ ├── review.py # Review & Notion sync logic
│ ├── extract.py # Extraction flow
│ └── api.py # JSON API endpoints
├── templates/ # HTML templates
├── crud.py # Database CRUD operations
├── models.py # SQLAlchemy data models
├── db.py # Database connection & DI
└── main.py # Application entry point
| Column Name | Type |
|---|---|
| id | Integer (PK) |
| String | |
| name | String (nullable) |
| Column Name | Type |
|---|---|
| id | Integer (PK) |
| filename | String |
| extracted_json | Text (nullable) |
| created_at | DateTime |
| user_id | Integer (FK → users.id) |
[ User logs in ]
|
v
[ users table ]
- create user if not exists
|
v
[ User uploads syllabus ]
|
v
[ syllabus_uploads table ]
- store filename
- store extracted syllabus JSON
- store timestamp
- link to user_id
|
v
[ Dashboard ]
- read syllabus_uploads for user
|
v
[ User deletes syllabus ]
|
v
[ syllabus_uploads table ]
- delete selected upload
|
v
[ Dashboard refreshes ]
Unzip the submitted file and navigate into the project directory:
unzip syllabus-sync.zip
cd syllabus-syncpython -m venv venv
source venv/bin/activate # macOS/Linux
venv\Scripts\activate # Windowspip install -r requirements.txtCreate a .env file in the project root:
DATABASE_URL=postgresql://user:password@localhost:5432/syllabus_sync
GEMINI_API_KEY=your_gemini_api_keyNote: The Gemini API key is optional if using the developer mode described below.
- Ensure PostgreSQL is running and accessible via
DATABASE_URL - The application uses SQLAlchemy ORM models to create and persist data
Start the FastAPI server from the project root:
uvicorn app.main:app --reloadThen open your browser at:
http://localhost:8000/
- Open the landing page
- Click Extract Now (guest flow) or log in with an email address (no authentication yet, used only to support database persistence)
- Upload a syllabus (PDF or DOCX)
- Review the extracted syllabus data
- View uploaded syllabi on the dashboard
- Delete uploads
To support grading and testing without external API keys, the application includes a developer review endpoint that bypasses Gemini and uses mock data.
GET /dev/review
- Start the server
- Navigate to:
http://localhost:8000/dev/review
- The review page will load using mock syllabus data
- All UI functionality can be tested without Gemini configuration
This allows full evaluation of the application flow without requiring an LLM API key. Code reference is in main.py.