TestMe: A Complete Online Exam Management Platform for Schools
A full-stack, institution-grade solution transforming how educational institutions create, conduct, and evaluate student assessments.
In an era where most schools still rely on paper-based exams or generic quiz tools that don't understand academic workflows, TestMe brings a purpose-built solution — from question bank creation to instant auto-graded results delivered directly to students on their mobile phones.
VM Core designed and developed TestMe as a dual-interface platform: a powerful web-based admin panel for teachers and administrators, and a RESTful mobile API for students to take exams from their smartphones — in real time, with integrity controls and live progress-saving built in.
The Market Opportunity
Education is undergoing a digital shift — but school-level assessment infrastructure hasn't kept up. Most schools face one or more of these pain points:
- Paper-based exams are inefficient: printing, distribution, collection, manual correction, data entry — all creating a huge administrative burden.
- Generic quiz tools fall short: platforms like Google Forms lack structured question types (case studies, match-the-following, fill-in-the-blank), academic session management, class/division segmentation, and robust result analytics.
- No mobile-first student experience: students increasingly use smartphones, but most exam platforms are desktop-only or have poor mobile UX.
- Manual grading delays results: teachers spend hours correcting papers; students wait days for feedback that should arrive in seconds.
The gap: the market has enterprise-grade tools priced for universities, and generic quiz apps built for casual use. School-level institutions — with their unique structures of academic sessions, classes, divisions, subjects, and chapters — are underserved.
The Challenge
Building TestMe required solving a layered set of problems simultaneously:
For Administrators: How do we give teachers and admins the ability to build rich, reusable question banks without being software engineers? The system needed to support diverse question types without a confusing interface. Role-based access was critical — super admins needed full oversight, sub-admins needed ownership of their own content, and view-only roles needed read access without edit permissions.
For Students: How do we make exam-taking feel safe, fair, and seamless on a mobile device? Students exit apps accidentally. Network drops mid-exam. Time limits expire. Each scenario needed a defined, student-friendly resolution — not a dead end.
For the Institution: How do we manage academic years without data bleeding across sessions? The system needed to support year-over-year data isolation while allowing teachers to reuse question banks from previous academic sessions — a critical time-saving feature.
For Integrity: How do we prevent students from gaming the system — exiting and re-entering exams, submitting multiple times, or bypassing time limits? Every edge case needed a controlled, admin-mediated resolution path.
Our Strategic Approach
Discovery & Architecture Planning
We started by mapping the full academic workflow: academic sessions → classes → divisions → subjects → chapters → questions → exams → student attempts → results. Every entity had dependencies, and those dependencies had to be respected in the data model.
Three foundational decisions shaped the architecture:
- Questions Are Global; Exams Are Session-Scoped. Questions belong to the question bank indefinitely. Exams belong to an academic session. This lets teachers build a question pool over years and reuse questions across sessions — without duplicating data. The exam import feature lets admins clone a past exam into the current session with one click, re-linking (not duplicating) questions.
- The Mobile App Is a First-Class Citizen. The student-facing API was designed from day one — not bolted on later. Laravel Sanctum handles token-based authentication for the student guard. Every API response follows a standardized
ApiResponseDTO for consistent, predictable payloads that the mobile team can rely on. - Role-Based Access Is Structural, Not Cosmetic. Three roles —
super_admin,admin(sub-admin), andview_only— are enforced at the query level, not just in the UI. A sub-admin cannot see, edit, or delete content they didn't create. A view-only admin can see everything but modify nothing. These rules are enforced across every controller and API endpoint.
Platform Architecture
TestMe is built on Laravel 11 with Inertia.js + Vue.js for the admin panel — delivering a modern single-page application experience without a separate frontend deployment. The student-facing REST API is consumed by a cross-platform Flutter mobile app.
- Backend: Laravel 11 with Eloquent ORM, Laravel Sanctum (API auth), queued notifications, and soft-deletes for data integrity.
- Frontend (Admin): Inertia.js + Vue.js renders dynamic admin pages as seamless SPA transitions — no page reloads, no flickering.
- Database: MySQL with 45+ migration files covering the full academic lifecycle.
- Mobile API: RESTful JSON API under
/api/student/*with Sanctum token authentication.
Key Feature Areas
1. Multi-Type Question Bank
The question bank is the engine of TestMe. It supports 9 distinct question types, each with its own data structure and auto-grading logic:
| Question Type | Description |
|---|---|
| MCQ | Standard multiple-choice with one correct option |
| True / False | Binary choice, auto-graded |
| Fill in the Blank | Text input matched against stored correct answer |
| Match the Following | Column-row matrix matching with metadata-driven structure |
| Match the Phrase | Keyword-based phrase matching |
| Case Study | Parent question with multiple MCQ sub-questions |
| Arrange in Order | Options reordered to match the correct sequence |
| Correct the Underlined Word | Identify and replace a highlighted incorrect word |
| Find the Odd One Out | MCQ variant where the "correct" answer is the odd item |
2. Exam Builder & Scheduling
- Assign to specific class + division(s)
- Set start/end date-time windows, or mark as Timeless
- Enable Question Limit mode for randomized subset assignment
- Toggle Auto-Publish Results
- Exam import from past academic sessions
3. Exam Integrity Engine
The exam lifecycle on mobile is governed by a carefully designed state machine:
- Accidental exit:
save-progressAPI preserves all answers. Student is flagged as exited. - Re-entry attempt: System blocks re-entry until an approval request is submitted and approved by an admin.
- Time expiry: Attempts are auto-submitted when the timer plus a 60-second grace period runs out.
4. Auto-Grading Engine
Results are returned immediately on submission (before checking publication status), so students see their score the moment they submit. Attempt history is tracked and returned to the mobile app.
Business Impact
Services & Technologies
Industry: EdTech / School Examination Management
Platform: Laravel 12 + Inertia.js + Flutter
Stack: PHP 8.3, Laravel 12, Vue.js, Inertia.js, MySQL, Flutter, Dart, Laravel Sanctum, Vite
Services: System Architecture, API Design, Admin Panel, Mobile API, Auto-Grading Engine
Conclusion
TestMe proves that purpose-built software — deeply aligned with the specific workflows of its domain — outperforms generic tools in every dimension. By modeling the full academic hierarchy, supporting diverse question types with robust auto-grading, and treating mobile integrity as a core feature rather than an afterthought, TestMe delivers a genuinely complete examination management solution.
This isn't a quiz app with extra features. It's a full-stack academic examination platform built to work the way schools actually work.