Step-by-step AI tutoring, visual progress tracking, and a parent/teacher dashboard for Grade 6 math, built along all three official Vietnamese textbook series.
Talking to Grade 6 students, parents, and teachers surfaced the same three obstacles — ToanHocHay was built to address each one directly.
Students get stuck on a specific problem type with no one to re-explain at the right moment — so an AI tutor gives level-based hints inline, during the exercise.
Parents and teachers asked for a way to see strengths and weaknesses clearly — so a dashboard tracks progress by chapter, weak topics, and results over time.
Boredom leads to disengagement — so the platform gamifies practice with streaks, an activity heatmap, and tab-switch alerts during timed tests.
Eleven core flows, each with a real screenshot from the running app.
Register → confirm email → sign in with a short-lived JWT access token and a rotating refresh token with reuse detection, plus forgot/reset password. Repeated failed logins trigger a temporary account lockout.
Guests can browse the catalog and the list of free exercises without an account. Once enrolled, content is gated by three tiers — Free / Standard / Premium — enforced on the API, not just hidden in the UI.
A course is a chapter → topic → lesson tree, built from several content-block types. Students filter by difficulty and see how much of the program — 9 chapters, 61 lessons in this example — they've completed.
Pick an exercise, and every answer autosaves as the student navigates the question grid — so they can leave and resume later. Practice mode runs untimed; tests run a clock, and tab-switching is logged to deter cheating.
A Gemini-powered tutor nudges the student toward the concept — comparing digits place by place here — without revealing the answer outright. Hints are quota-limited per package, and a background queue produces a full mistake analysis after submission.
One place to see the current study streak, weekly study time, average score, and progress broken down chapter by chapter — plus a shortcut back into recently studied lessons and a nudge toward Premium features.
Parents connect to a child via a link code, switch between multiple linked children, and see weekly study minutes, average score, and per-chapter progress — with rule-based notifications for tab-switching, low scores, or inactivity.
Checkout reuses the pending order and counts down to the QR's server-side expiry. An idempotent SePay webhook confirms payment, a background sweep manages renewal/expiry, and refunds go through a semi-automated flow.
An in-app bell plus email covers tab-switch warnings during a test and multi-day inactivity reminders. Students and parents can opt out of each notification type individually.
Courses move through a Draft → submit for review → publish workflow. Curriculum, question banks, and exercises can be bulk-imported from CSV/XLSX, with a "validate only" pass before anything actually gets written.
System administration covers users, roles, and an audit log. The finance area adds package/pricing management and revenue analytics — gross vs. net revenue, paying customers, ARPU, and a time-series chart — built with Chart.js.
Three components running independently over HTTP, containerized and shipped to Azure on every push to main.
ASP.NET Core 9 REST API — EF Core 8 + PostgreSQL, JWT auth, Serilog, rate limiting, a uniform response envelope, and hosted background services for payments, email, and AI feedback.
Python 3.12 + Flask, reachable only from the API via a shared internal key. Wraps Google Gemini for hints, feedback, and chatbot replies, with key rotation on quota limits.
Server-rendered ASP.NET Core MVC 9 with Razor Views, cookie auth, an auto-refreshing Bearer token handler, Tailwind CSS, and Chart.js for the finance area.
An EXE (Entrepreneurship Experience) course project — FPT University, built by a team of 6. My role: team lead — backend API, frontend integration, and DevOps (defense-in-depth API hardening, the SePay payment/webhook flow, and the Docker/CI pipeline to Azure).