Turn a messy syllabus into a reviewed, conflict-aware calendar.
CourseFlow is a student planning application created for Beginner's Paradise — FirstCommit 2026. Students paste syllabus text or upload a text-based PDF; CourseFlow extracts dated assignments and exams, lets the student verify every item, detects workload collisions, suggests preparation start dates, and exports approved deadlines as a standard .ics calendar.
Current milestone: text/PDF extraction, human review, conflict detection, and calendar export.
- Application: https://courseflow-seven.vercel.app/
- API health: https://courseflow-api.vercel.app/api/health
- Source: https://github.com/Mani91050/courseflow
The frontend and FastAPI backend are deployed as separate Vercel projects. Production CORS is restricted to the deployed CourseFlow frontend.
Important course dates are often buried inside long syllabi. Manually copying them is slow and error-prone, and ordinary calendars do not warn students when several deadlines collide.
Students managing several courses, especially students who receive deadlines in PDF syllabi and want a reliable calendar without silently trusting automated extraction.
IMPORT → REVIEW → RESOLVE → EXPORT
- Paste syllabus text or upload a PDF.
- Review the extracted title, date, effort estimate, and source text.
- Approve, edit, or reject each deadline.
- Resolve same-day and seven-day workload warnings.
- Export approved events to an
.icscalendar.
- Text and text-based PDF input
- Multiple common date formats
- Assignment, exam, project, and presentation classification
- Source text and confidence shown for review
- Editable dates, titles, and effort estimates
- Approve/reject controls
- Same-day conflict detection
- Heavy seven-day workload detection
- Suggested preparation start dates
- Configurable academic year and semester boundaries
- Warnings for deadlines outside the selected semester
.icscalendar export- Responsive interface
- Backend unit tests
React + TypeScript UI
|
| multipart form / JSON
v
FastAPI backend
├── PyMuPDF text extraction
├── deterministic date parser
├── conflict rules
└── ICS generator
|
v
Reviewed calendar download
CourseFlow deliberately keeps a human review step between extraction and export. Automation proposes; the student verifies.
courseflow/
├── backend/
│ ├── main.py
│ ├── requirements.txt
│ └── tests/
├── frontend/
│ ├── src/
│ ├── package.json
│ └── vite.config.ts
├── samples/
│ └── sample-syllabus.txt
├── LICENSE
└── README.md
cd courseflow
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r backend/requirements.txt
uvicorn backend.main:app --reload --port 8000Health check: http://localhost:8000/api/health
In another terminal:
cd courseflow/frontend
npm install
npm run devOpen http://localhost:5173.
From the project root with the Python environment active:
pytest backend/tests -qCopy frontend/.env.example to frontend/.env and set:
VITE_API_URL=https://your-backend.example.comDo not add a trailing slash.
CourseFlow includes a transparent nine-fixture date-extraction benchmark covering supported date formats, missing years, duplicates, irrelevant text, relative dates, and historical context.
Current measured result:
- 12/12 expected dates found
- 0 expected dates missed
- 1 documented historical-date false positive
- 92.3% date precision
- 100% date recall on this small fixture set
See docs/accuracy-report.md for scope, per-fixture results, limitations, and reproduction commands. This is a small hackathon benchmark, not a claim of universal syllabus accuracy.
CourseFlow can be deployed as two Vercel projects from this repository.
- Project root: repository root
- Framework preset: Other
- Serverless entry point:
api/index.py - Configuration:
vercel.json - Environment variable after the frontend is deployed:
ALLOWED_ORIGINS=https://your-courseflow-frontend.vercel.app- Project root:
frontend - Framework preset: Vite
- Build command:
npm run build - Output directory:
dist - Environment variable:
VITE_API_URL=https://your-courseflow-api.vercel.appAfter deployment, verify /api/health, text parsing, PDF parsing, conflict recalculation, and ICS download in an incognito browser.
- The MVP accepts text-based PDFs; scanned-image OCR is not included yet.
- Date extraction is deterministic and supports common formats, not every possible phrase.
- Missing years use the selected academic year and must be reviewed.
- Semester boundaries flag suspicious dates but do not automatically reject them.
- Effort estimates are initial defaults that the student should edit.
- CourseFlow does not write directly to a user's private calendar; it exports a portable
.icsfile. - Data is processed for the current request and is not persisted by the backend.
The backend processes uploaded syllabus content in memory. The current version does not create user accounts or save syllabus files to a database.
- React
- TypeScript
- Vite
- FastAPI
- Python
- Pydantic
- PyMuPDF
- python-dateutil
- Pytest
- Lucide icons
- PyMuPDF for PDF text extraction
- python-dateutil for date parsing
- Lucide for interface icons
- Google Fonts (
DM Sans,Manrope) for typography
AI assistance was used for requirements analysis, brainstorming, code scaffolding, debugging suggestions, test planning, and documentation review. The participant is responsible for reviewing, running, understanding, modifying, and presenting the submitted project. Development decisions, testing results, external-resource disclosures, and final claims must be verified by the participant.
Significant AI chat history can be provided to organizers if requested.
This project is being built during FirstCommit. The repository should contain multiple meaningful commits that accurately show progress. Do not upload the entire project as one final commit.
MIT — see LICENSE.