Inspiration

Students are overwhelmed by unstructured course materials—syllabi, lecture slides, assignment briefs, and exam schedules scattered across PDFs, Word docs, and emails. Manually extracting deadlines and planning study sessions is tedious and error-prone. We wanted to build a tool that does the heavy lifting: read your handouts, understand what matters, and build a dynamic study plan that adapts to your life.

What it does

Terminus is a local, AI-powered study planner for students.

Upload any course document (PDF, DOCX, TXT, MD).

The app extracts key information: assignment deadlines, exam dates, reading lists, and project milestones.

It generates a structured to-do list with priorities and estimated effort.

A smart scheduler allocates study blocks to your available time slots, respecting your daily capacity and preferred study style.

The plan auto-adjusts when you mark tasks as done or when schedules change—rescheduling remaining tasks to keep you on track.

You can export your entire plan as an .ics calendar file and import it into Google Calendar or Apple Calendar.

All data stays local—no cloud uploads, no privacy concerns.

How we built it

Frontend: Streamlit for a rapid, interactive UI.

AI Integration: Agnes AI (OpenAI-compatible) for natural-language understanding of course content; we used Pydantic to enforce structured output schemas.

Fallback Parser: Regex-based extraction works even without an AI key, so the app never breaks.

Scheduling Engine: A greedy algorithm in Python that prioritizes by deadline and importance, breaking large tasks into manageable 1–3 hour study chunks.

Storage: SQLite for lightweight, local task/event persistence.

Calendar Export: Built with the ics Python library to generate standard .ics files.

Challenges we ran into

Parsing PDFs correctly – Some PDFs are scanned images; we document the need for OCR but didn't have time to integrate Tesseract fully.

Handling ambiguous deadlines – AI can misinterpret "due Friday" if the context is vague; we built in a confidence score and let users edit extracted items.

Balancing the scheduler – Greedy scheduling is fast, but it's not globally optimal. We spent time tuning the heuristics (effort estimation, break logic) to produce realistic, not overstuffed, study plans.

Streamlit state management – Keeping the calendar and task list in sync across user interactions required careful use of st.session_state.

Accomplishments that we're proud of

AI + fallback hybrid – The app works fully offline with regex parsing, making it usable for everyone.

Dynamic rescheduling – When you check off a task, the entire plan reshuffles seamlessly—no manual rearranging.

Clean, intuitive UI – Students can start using it without reading a manual.

Full local storage – No sign-up, no data leaving your machine—true privacy.

Working prototype in a short time – From idea to a functional, testable tool.

What we learned

Structured output from LLMs is a game-changer—Pydantic models paired with function calling make integration robust.

Scheduling is harder than it looks – even a greedy algorithm needs careful tuning; user preferences (e.g., "morning person" or "night owl") can dramatically affect plan quality.

Document parsing is messy – every file format has quirks; we learned to handle multiple types gracefully.

Streamlit is powerful for rapid prototyping – but managing state across complex interactions requires discipline.

What's next for Terminus

OCR integration – Automatically detect scanned PDFs and run Tesseract to extract text.

Support for more AI providers – Add OpenAI, Anthropic, and local models (Ollama) for flexibility.

Advanced scheduling – Implement a constraint-satisfaction or genetic-algorithm-based optimizer for truly optimal plans.

Multi-course / semester management – Let students manage an entire term's workload, not just one class.

Mobile-friendly PWA – Wrap the app as a Progressive Web App for on-the-go access.

Collaborative features – Allow study groups to share and combine schedules.

Docker deployment – Provide a one-click run environment to eliminate setup friction.

Built With

  • compatibility
  • ics
  • openai
  • pydantic
  • pypdf2
  • python-docx
  • streamlit
Share this project:

Updates