Inspiration

Placement season is chaotic. Students juggle job portals, spreadsheets, resumes, deadlines, DSA practice, and interview preparation across disconnected tools. Most job trackers only store information; the student still has to decide what to do next.

We built Campus Career Copilot to change that. Instead of a passive application tracker, it acts as an active career copilot: it analyzes a resume, ranks relevant opportunities, plans preparation around real deadlines, adapts DSA practice to individual weaknesses, and exposes every capability through the Model Context Protocol.

What it does

Campus Career Copilot supports a complete placement workflow:

  1. Resume intelligence — Students upload a PDF or TXT resume. The platform extracts skills against a 50+ technology taxonomy and produces a scorecard with matched skills, priority gaps, and an overall readiness grade.

  2. Internship discovery — A multi-factor ranking engine evaluates listings using skill match, role fit, work-mode preference, and deadline urgency. Students see transparent sub-scores instead of opaque recommendations.

  3. Application pipeline — A drag-and-drop Kanban board tracks roles across Bookmarked, Applied, Screening, Interview, Offer, and Rejected stages.

  4. Adaptive preparation — The platform generates daily study plans and uses a five-box Leitner spaced-repetition system with exponential moving averages to prioritize weak DSA topics.

  5. Agentic assistant — The chat assistant streams responses and autonomously invokes eight domain tools: resume analysis, internship search, tracker management, study planning, DSA selection, DSA evaluation, and progress summaries.

  6. MCP server — /api/mcp implements the Model Context Protocol over Streamable HTTP using specification 2025-11-25. It is authenticated with Bearer tokens and exposes the same eight tools to IDEs, agents, and developer workflows.

How we built it

We built the platform with Next.js 16, React 19, TypeScript, Tailwind CSS v4, Prisma v7, and PostgreSQL on Neon. Authentication uses NextAuth.js with Google OAuth.

The AI layer uses Groq’s OpenAI-compatible API with openai/gpt-oss-120b. Every chat message enters an agent loop: the model interprets intent, selects a tool, executes it server-side, receives structured output, and synthesizes a response. Tool results are streamed to the frontend through Server-Sent Events and rendered as interactive cards.

The MCP server uses @modelcontextprotocol/sdk and implements Streamable HTTP at /api/mcp. It negotiates protocol version 2025-11-25, rejects unauthenticated requests with 401, lists all eight tools, and executes tool calls securely.

We used Zustand and React Query for client state, @dnd-kit for the Kanban board, Recharts for insights, pdf-parse for resume extraction, and Capacitor for the Android wrapper. The codebase includes 302 unit tests and 17 integration tests covering matching, planning, spaced repetition, authentication, tool isolation, and the full demo path.

Challenges we ran into

  • LLM tool-call schema mismatches: Open-weight models sometimes sent explicit null values for optional parameters, causing strict Zod validation failures. We added nullable-and-optional transforms and safe defaults across all tools.
  • Chat replay errors: Replaying historical messages containing raw tool calls caused dangling tool IDs. We redesigned session loading to replay only user and assistant turns while isolating live tool executions.
  • Skill taxonomy normalization: Resume text such as “ReactJS” or “Node.JS” had to map reliably to canonical taxonomy IDs. We built fuzzy matching and normalization into the extraction pipeline.
  • Rate limits: Groq’s free tier can hit token-per-minute limits during multi-step agent loops. We implemented exponential backoff using Retry-After headers and added rubric-based keyword grading as a fallback.
  • MCP transport complexity: Implementing Streamable HTTP correctly required careful handling of protocol negotiation, headers, authentication, and session lifecycle.

Accomplishments that we're proud of

  • Built a working MCP server that passes smoke tests for protocol negotiation, authentication, tool listing, and tool execution.
  • Combined deterministic algorithms—Jaccard similarity, Leitner spaced repetition, EMA mastery tracking, and weighted ranking—with generative AI.
  • Created eight shared domain tools used by both the chat assistant and MCP server.
  • Achieved 302 passing unit tests and 17 integration tests.
  • Shipped a polished, responsive web experience and an Android APK wrapper.

What we learned

We learned that reliable agents need strong boundaries. The LLM should route intent and synthesize language, while validated domain services own the business logic. We also learned that MCP is powerful because it turns a web product into a reusable set of agent-ready capabilities. Finally, adaptive spaced repetition made DSA preparation more personalized than a static study schedule.

What's next for Campus Career Copilot

  • Native VS Code and Cursor extensions connected to /api/mcp.
  • Voice-driven mock technical and HR interviews.
  • A browser extension to import roles from LinkedIn, Greenhouse, and Lever.
  • Real-time peer coding and mock-interview rooms.
  • Deeper college placement-cell integrations and recruiter-side workflows.

Built With

  • ai-agents
  • alexa+
  • capacitor
  • dnd-kit
  • googleoauth
  • groq
  • mcp
  • neon
  • next.js
  • nextauth.js
  • node.js
  • pdf-parse
  • postgresql
  • prisma
  • react
  • react-query
  • recharts
  • streamablehttp
  • tailwindcss
  • typescript
  • vercel
  • vitest
  • zustand
Share this project:

Updates

Submission history