Inspiration During the shift to online education, we realized standard quiz tools (like Google Forms or Kahoot) only grade the result, not the process. Teachers couldn't see if a student was hesitating, switching tabs to Google answers, or blindly guessing. We wanted to build a tool that gives educators "X-ray vision" into student behavior during assessments, combining AI quiz generation with enterprise-grade proctoring to protect academic integrity.

What it does Pace is an AI-powered EdTech platform with two distinct sides:

For Lecturers: Upload a PDF lecture, and our Groq AI (Llama 3.1) instantly generates a difficulty-graded quiz. Once students join via a secret code, lecturers get a live analytics dashboard featuring a color-coded heatmap that tracks time spent per question, answer changes, and hesitation. For Students: They enter a fullscreen, lockdown environment. If they switch tabs, lose internet, or try to copy/paste an answer, the event is logged instantly. The "Wow Factor": We calculate a weighted Integrity Risk Score (0-100%) for every student, turning raw proctoring data into a single, actionable metric so educators know exactly who to review. How we built it We built Pace as a full-stack serverless application.

Frontend & Backend: Next.js 16 (App Router) deployed on Vercel. React 19 with Tailwind CSS v4 (custom OKLCH color system). Database: AWS DynamoDB using the AWS SDK v3. We designed four NoSQL tables (Users, Lecturers, Quizzes, QuizSessions). We utilized PutCommand for quiz creation, UpdateCommand for live proctoring streams, and ScanCommand with FilterExpression for the live heatmap polling. AI: Groq API (llama-3.1-8b-instant) for both PDF-to-Quiz generation and the "AI Professor's Report" which summarizes class performance. Auth & Email: JWT (httpOnly cookies), Bcryptjs for hashing, and Nodemailer for Gmail verification and password resets. Challenges we ran into Building a real-time proctoring engine in the browser is tricky. We initially had React state bugs where event listeners (for tab-switching and copy/pasting) were "thrashing"—rebinding on every render, causing missed cheating events. We solved this by moving state into useRef so listeners bind only once.

Another major challenge was preventing race conditions when students double-clicked "Join Quiz." We solved this using DynamoDB ConditionExpression: "attribute_not_exists(sessionId)" to guarantee idempotency. Finally, we had to heavily secure the API to prevent answer-key leaks, ensuring correctAnswer is stripped from the JSON payload before it ever reaches the student's browser.

Accomplishments that we're proud of We are incredibly proud of the Integrity Risk Score. Instead of just dumping raw logs on a teacher, we built a weighted algorithm (flags × 15 + fastCorrect × 10 + changes × 5, max 100) that instantly highlights who to review.

We are also proud of the UX polish. The landing page features four auto-playing DOM animations that demonstrate the entire product flow without requiring judges to sign up. The dark mode utilizes a seamless OKLCH color system, and the live heatmap updates flawlessly every 5 seconds.

What we learned We learned that NoSQL database design requires completely different thinking than SQL. You can't do "joins," so you have to denormalize data intelligently (e.g., storing quizTitle directly in the QuizSessions table to avoid double-reads on the student dashboard).

We also learned how to force LLMs to output strictly valid JSON using response_format: { type: "json_object" }, which made parsing AI-generated quizzes 100% reliable. Finally, we learned the intricacies of browser APIs—document.hidden catches new tabs, but window.blur is required to catch students opening desktop apps like Discord.

What's next for PACE For this hackathon, we used ScanCommand which is fine for a single classroom, but to truly scale to the "Million-Scale" track, we plan to implement Global Secondary Indexes (GSIs) on quizId and lecturerEmail to guarantee single-digit millisecond queries. We also want to replace our 5-second polling with AWS AppSync (WebSockets) for true real-time sync, and expand the AI to generate code-evaluation questions for computer science classes.

Built With

  • dynamodb
  • groq
  • next.js
  • severless
  • tailwindcss
Share this project:

Updates