Skip to content
All projects

2026

S-Grade

Smart Exam Grader

Camera-based bubble-sheet (OMR) grader with grade management and learning-outcome analytics — a self-hosted ZipGrade alternative powered by in-browser computer vision.

Timeline
Feb 2026 - May 2026
Categories
Web Development · Computer Vision · Full Stack Development · Laravel · SaaS
Stack
Laravel · Filament · Livewire · OpenCV.js · TypeScript · Octane/RoadRunner · Pest · Tailwind

Usage

2,262 visitors in the last 30 days

2,353 visitors since August 2026

From Umami analytics

S-Grade — Smart Exam Grader

S-Grade — Smart Exam Grader

A grading platform that lets teachers scan paper multiple-choice answer sheets with a phone camera and get instant, accurate results — plus full grade management and automatic Course Learning Outcome (CLO) analytics.

Challenge

Hand-grading bubble-sheet exams is slow and error-prone, and existing tools like ZipGrade are English-first, cloud-dependent, and weak on Arabic and on outcome reporting that colleges actually need.

Solution

  • In-browser computer vision: bubble detection runs entirely client-side with OpenCV.js, so exam images never leave the device and there are no cloud OCR costs.
  • Smart capture: automatic sheet-boundary detection, multi-fill detection, and support for HEIC photos and PDF scans.
  • Full assessment suite: multiple answer-key forms (A/B/C/D), rubric-based assignment grading, re-grading, and automatic CLO attainment tracking.
  • Built for institutions: multi-tenant organizations, collaborator roles, Excel import/export, and Arabic/English bilingual UI.

Technical Implementation

Laravel 12 with a Filament 5 admin panel, a Livewire + Alpine + TypeScript front end, and OpenCV.js for the OMR pipeline. Heavy work (scanning, grade exports) is offloaded to queues and served through Laravel Octane on RoadRunner for high concurrency. The codebase carries ~608 commits and ~35 automated Pest tests running on a GitHub Actions CI matrix (PHP 8.4/8.5).

Screenshots (6)

Next project

Warsha

esc
↑↓ navigate ↵ select