Inspiration

Every UMD student juggles multiple platforms daily: Canvas for assignments, Testudo for registration, Piazza for class discussions, uAchieve for degree audits, each with its own login, UI, and quirks. We wanted a single AI platform that connects to all of them, understands your academic life holistically, and can even work autonomously on your behalf. Instead of checking five tabs every morning, just ask your customized Terp Twin.

What it does

TerpTwin is an AI agent platform that connects to UMD's academic systems and acts as a personalized student assistant. You can ask it natural language questions like "What's due this week across all my classes?" or "What readings do I have for GVPT200?" and it pulls real data from Canvas, Testudo, Piazza, and uAchieve, not hallucinated answers. It can run a full degree audit, browse your course syllabi and modules to find information buried outside of assignments, and even run on automated schedules (e.g., "check for open seats in CMSC351 every morning and email me if one opens up"). Each student gets their own agents that remember context and produce reports over time.

How we built it

  • Frontend: Next.js with React and Tailwind CSS
  • Backend: FastAPI with APScheduler for trigger scheduling, and a custom tool-calling agent loop
  • LLM: Featherless.ai hosting open-source models (Hermes-3-Llama-3.1-70B) via an OpenAI-compatible API
  • Authentication: Playwright browser automation to handle UMD's CAS SSO + Duo MFA
  • Sub-agent architecture: For complex questions, the main agent spawns focused sub-agents that scrape multiple Canvas pages concurrently (syllabus, modules, files, pages) and use a separate LLM call to synthesize answers
  • Database: PostgreSQL deployed on Supabase
  • Deployment: Railway (backend) + Vercel (frontend)

Challenges we ran into

UMD's authentication was by far the hardest part. CAS SSO redirects through multiple domains, and Duo MFA requires intercepting API responses from duosecurity.com to detect push approval; there's no simple callback URL. We had to run Playwright in a subprocess to avoid asyncio conflicts with uvicorn on Windows, mask browser automation signals that Duo detects, and handle OIDC exit flows manually when the JS redirect didn't fire in headless mode. The uAchieve degree audit was another challenge; it's a multi-step form workflow with server-side computation that takes 30-60 seconds, requiring us to poll for results.

Accomplishments that we're proud of

  • Fully automated CAS + Duo MFA authentication that works across four different UMD platforms with a single set of credentials
  • The sub-agent architecture that lets our AI deeply explore Canvas course content in one tool call, scraping the syllabus, modules, pages, and files concurrently, then synthesizing an answer
  • A working degree audit tool that drives the entire uAchieve workflow through browser automation and returns parsed results
  • Automated triggers with natural language scheduling that produce persistent reports the student can chat about later
  • Building the entire platform in a hackathon timeframe with a team of three

What we learned

  • Browser automation against enterprise SSO is tricky. There are APIs, redirect chains, CSRF tokens, MFA interception, and cookie scoping across domains that have to be handled precisely
  • Open-source LLMs need very explicit system prompts to behave as tool-calling agents; they'll narrate, ask permission, and stop mid-task unless you curate the system prompts appropriately
  • Designing for real university platforms means dealing with inconsistent data: some professors put everything in Canvas assignments, others hide it in the syllabus or modules, and some use Piazza exclusively. The agent has to be smart enough to look everywhere, and the student must be given the ability to customize context
  • Encrypting credentials at rest and handling session expiry gracefully is essential when storing user authentication data

What's next for TerpTwin

  • Gradescope integration for pulling assignment scores and submission feedback
  • Smarter trigger conditions "only notify me if my grade in CMSC351 drops below a B"
  • Multi-student collaboration shared agents for study groups that aggregate information across members' courses
  • Mobile notifications via push instead of just email
  • Course planning assistant that combines degree audit data with Schedule of Classes to recommend which courses to take next semester
  • RAG over course files indexing uploaded PDFs, lecture slides, and syllabi so the agent can answer questions about course content directly without re-scraping

Built With

Share this project:

Updates