Inspiration

AI chatbots make it easy for students to get answers, and just as easy to skip the thinking. We wanted to flip that around: a maths tutor that rewards students for asking good questions, not for getting answers. We borrowed the stat-and-rank systems from RPGs like Persona, so curiosity and reasoning are what level you up.

What it does

REPLY Track is a study platform for students and teachers.

  • Students chat with an AI maths tutor that guides them with hints before giving full solutions. A second model scores every message, and good questions earn XP across six stats: Algebra, Calculus, Geometry, Discrete, Probability & Stats, and Linear Algebra. The stats are drawn as a hexagon that grows over time, and each stat climbs its own ladder from Novice to Master.
  • Each session ends with a quiz written from the conversation. Pass it and you earn bonus XP. Fail it and you lose half the XP you earned that session, so you can't farm points without learning.
  • Teachers see every student's hexagon next to AI-written feedback that's updated after each session.

How we built it

  • Next.js 16 (App Router), React 19 and TypeScript, styled with Google's Material Design 3 web components
  • Supabase for auth, teacher and student roles, and Row Level Security
  • OpenAI: a tutor model streams its replies, and a cheaper scorer model uses Structured Outputs to rate each message by topic, depth and quality
  • react-markdown + KaTeX to render the tutor's maths

The XP for a message is

$$\text{XP} = 10 \times d \times q$$

where $d \in {0.6, 1.0, 1.3, 1.6}$ is the question's depth (from recall up to conceptual) and $q \in {0, 0.25, 0.6, 1}$ is its quality. The XP is split across the stats the question touches. The overall rank is $\left\lfloor \frac{1}{6}\sum_{i=1}^{6} r_i \right\rfloor$. Each hexagon axis grows with rank rather than raw XP, so the shape fills out evenly even though later ranks cost more.

Challenges we faced

  • Scoring fairly. We needed the rubric to give wrong answers nothing while short but correct ones still earned something, and tightening one rule kept breaking the other. Giving the scorer the last six messages helped it judge a bare answer like "54" in context.
  • Stopping XP farming. We added a daily cap of 50 XP per stat, gave repeated questions zero XP, and added the quiz penalty.
  • Speed. Replies stream in as they're written, with the first words arriving in about a second. Scoring runs after the reply, so the XP shows up shortly afterwards.

What we learned

  • Test prompts against the real model. Our worst bugs only showed up in real replies, because a mock only returns the formats you thought of.
  • Game design is mostly balancing numbers. Small changes to multipliers and caps completely changed how rewarding the app felt.
  • How to build a full-stack app around roles and Row Level Security, so students and teachers only see what they should.

Built With

  • material3
  • nextjs
  • react
  • supabase
Share this project:

Updates

Submission history