UniqScan is a Google Classroom–style MERN platform with Python microservices that analyzes student submissions for similarity and AI-generated content, returning scores and rich HTML reports.
JavaScript
0
18 commits
updated Sep 3, 2025
An AI-enhanced classroom platform that ensures academic honesty by identifying plagiarism and AI-generated content.
UniqScan is an academic integrity platform that combines a Google Classroom–style MERN web app with Python microservices to analyze student submissions for similarity and AI-generated content. Instructors create classes and assignments; students submit files. The backend serves uploads and orchestrates analysis by calling a Similarity service that extracts text from PDFs, Office docs, and images (via Tesseract and PyMuPDF), compares it against a corpus to compute similarity, and then queries an AI detector to estimate AI-generated probability. Results are fused into an overall plagiarism score and returned with a rich HTML report that the UI renders alongside grades.
classroom/ — MERN app
backend/ — Node/Express API, file uploads, ML integrationfrontend/ — React UIML/ — Python services consumed by the backend
AI_content/ — AI detector service (E5 LoRA)Similarity/ — Similarity/OCR/plagiarism serviceml_nlp-ocr/ — Standalone document watcher and OCR-to-Markdown pipelineai_text_detector/ — Sample detectors and clients (HF model, Gradio, RapidAPI)Matcher_algo/ — Matching and plagiarism CLI utilitiesmodels/ — Local cache for the HF detector modelSee per-directory READMEs for details.
Classroom & users
Assignments
Grading & reporting
ML pipeline
/uploads for ML services/classify returns AI probability for textOperations & DX
.env files; timeouts and service URLs configurableFrontend
Backend
ML Services (Python)
Storage and infra
classroom/backend/public/uploads.React Frontend (student submit) ──> Node/Express Backend (stores file under /uploads)
│
├─ calls ML API /grade/analyze with file_url
│
▼
Flask Similarity Service (download + extract text + compare corpus)
│
├─ calls AI Detector /classify for AI %
│
└─ returns scores + HTML report
Backend persists results and serves report → Frontend displays scores and report
Note: Place images in the repository root assets/ folder as 1.png, 2.png, ....













Backend (classroom/backend/.env)
MONGO_DB_URL — Mongo connection stringCLIENT_URL — allowed CORS origin (e.g., http://localhost:3000)SECRET_ACCESS_TOKEN, ACCESS_TOKEN_EXPIRE, SECRET_REFRESH_TOKEN, REFRESH_TOKEN_EXPIRE — JWT configML_API_BASE_URL — Similarity API base URL (e.g., http://localhost:5000)ML_API_TIMEOUT — request timeout ms (default 300000)BACKEND_URL — optional explicit public URL for file linksFrontend (classroom/frontend/.env)
REACT_APP_BASE_URL — Backend base URL (e.g., http://localhost:4000)AI Content service (classroom/ML/AI_content)
HF_TOKEN if needed to pull the modelSimilarity service (classroom/ML/Similarity)
AI_SCORE_API_URL — e.g., http://localhost:5001 (the AI service base; /classify is appended)Recommended order in separate terminals:
cd classroom/ML/AI_content
pip install flask torch transformers huggingface_hub requests
python e5-small-lora.py
cd classroom/ML/Similarity
pip install flask requests nltk pytesseract pillow pymupdf opencv-python numpy python-docx python-pptx
$env:AI_SCORE_API_URL = "http://localhost:5001"
python app.py
cd classroom/backend
npm install
cp .env.example .env # if you keep a template; otherwise create manually
npm run dev
cd classroom/frontend
npm install
cp .env.example .env
npm start
cd ml_nlp-ocr
pip install pytesseract pillow pymupdf watchdog opencv-python numpy tqdm python-docx python-pptx docling
python app.py
ai_text_detector/ — reference scripts for AI detection via local HF model, Gradio Space, RapidAPI.ml_nlp-ocr/ — robust document watcher with OCR and Markdown outputs.Matcher_algo/ — general-purpose n-gram matcher and a folder plagiarism CLI that emits HTML/TXT reports.classroom/backend/src/routers expose users, classrooms, posts, and homework. Grading is orchestrated server-side via gradingService.js.classroom/backend/ML_API_DOCUMENTATION.md for request/response contract used by the backend.classroom/ML/AI_content/e5-small-lora.py exposes POST /classify { text } -> { ai_score } and GET /health.classroom/ML/Similarity/app.py exposes POST /grade/analyze and auxiliary endpoints.CLIENT_URL matches the React origin and that CORS is enabled in app.js.ML_API_BASE_URL in backend and AI_SCORE_API_URL in Similarity./uploads. Confirm getFileUrl builds a reachable URL and BACKEND_URL is set if deployed.classroom/ML/Similarity/extracted_text/ as you analyze more files./uploads/... so the Python service can fetch them by URL. Don’t disable this in production without providing an alternative access method.UniqScan is a Google Classroom–style MERN platform with Python microservices that analyzes student submissions for similarity and AI-generated content, returning scores and rich HTML reports.
JavaScript
0
18 commits
updated Sep 3, 2025
An AI-enhanced classroom platform that ensures academic honesty by identifying plagiarism and AI-generated content.
UniqScan is an academic integrity platform that combines a Google Classroom–style MERN web app with Python microservices to analyze student submissions for similarity and AI-generated content. Instructors create classes and assignments; students submit files. The backend serves uploads and orchestrates analysis by calling a Similarity service that extracts text from PDFs, Office docs, and images (via Tesseract and PyMuPDF), compares it against a corpus to compute similarity, and then queries an AI detector to estimate AI-generated probability. Results are fused into an overall plagiarism score and returned with a rich HTML report that the UI renders alongside grades.
classroom/ — MERN app
backend/ — Node/Express API, file uploads, ML integrationfrontend/ — React UIML/ — Python services consumed by the backend
AI_content/ — AI detector service (E5 LoRA)Similarity/ — Similarity/OCR/plagiarism serviceml_nlp-ocr/ — Standalone document watcher and OCR-to-Markdown pipelineai_text_detector/ — Sample detectors and clients (HF model, Gradio, RapidAPI)Matcher_algo/ — Matching and plagiarism CLI utilitiesmodels/ — Local cache for the HF detector modelSee per-directory READMEs for details.
Classroom & users
Assignments
Grading & reporting
ML pipeline
/uploads for ML services/classify returns AI probability for textOperations & DX
.env files; timeouts and service URLs configurableFrontend
Backend
ML Services (Python)
Storage and infra
classroom/backend/public/uploads.React Frontend (student submit) ──> Node/Express Backend (stores file under /uploads)
│
├─ calls ML API /grade/analyze with file_url
│
▼
Flask Similarity Service (download + extract text + compare corpus)
│
├─ calls AI Detector /classify for AI %
│
└─ returns scores + HTML report
Backend persists results and serves report → Frontend displays scores and report
Note: Place images in the repository root assets/ folder as 1.png, 2.png, ....













Backend (classroom/backend/.env)
MONGO_DB_URL — Mongo connection stringCLIENT_URL — allowed CORS origin (e.g., http://localhost:3000)SECRET_ACCESS_TOKEN, ACCESS_TOKEN_EXPIRE, SECRET_REFRESH_TOKEN, REFRESH_TOKEN_EXPIRE — JWT configML_API_BASE_URL — Similarity API base URL (e.g., http://localhost:5000)ML_API_TIMEOUT — request timeout ms (default 300000)BACKEND_URL — optional explicit public URL for file linksFrontend (classroom/frontend/.env)
REACT_APP_BASE_URL — Backend base URL (e.g., http://localhost:4000)AI Content service (classroom/ML/AI_content)
HF_TOKEN if needed to pull the modelSimilarity service (classroom/ML/Similarity)
AI_SCORE_API_URL — e.g., http://localhost:5001 (the AI service base; /classify is appended)Recommended order in separate terminals:
cd classroom/ML/AI_content
pip install flask torch transformers huggingface_hub requests
python e5-small-lora.py
cd classroom/ML/Similarity
pip install flask requests nltk pytesseract pillow pymupdf opencv-python numpy python-docx python-pptx
$env:AI_SCORE_API_URL = "http://localhost:5001"
python app.py
cd classroom/backend
npm install
cp .env.example .env # if you keep a template; otherwise create manually
npm run dev
cd classroom/frontend
npm install
cp .env.example .env
npm start
cd ml_nlp-ocr
pip install pytesseract pillow pymupdf watchdog opencv-python numpy tqdm python-docx python-pptx docling
python app.py
ai_text_detector/ — reference scripts for AI detection via local HF model, Gradio Space, RapidAPI.ml_nlp-ocr/ — robust document watcher with OCR and Markdown outputs.Matcher_algo/ — general-purpose n-gram matcher and a folder plagiarism CLI that emits HTML/TXT reports.classroom/backend/src/routers expose users, classrooms, posts, and homework. Grading is orchestrated server-side via gradingService.js.classroom/backend/ML_API_DOCUMENTATION.md for request/response contract used by the backend.classroom/ML/AI_content/e5-small-lora.py exposes POST /classify { text } -> { ai_score } and GET /health.classroom/ML/Similarity/app.py exposes POST /grade/analyze and auxiliary endpoints.CLIENT_URL matches the React origin and that CORS is enabled in app.js.ML_API_BASE_URL in backend and AI_SCORE_API_URL in Similarity./uploads. Confirm getFileUrl builds a reachable URL and BACKEND_URL is set if deployed.classroom/ML/Similarity/extracted_text/ as you analyze more files./uploads/... so the Python service can fetch them by URL. Don’t disable this in production without providing an alternative access method.