Ship a new mock exam.
Drop a JSON or CSV file. Validated in your browser, published to the live database instantly — plus a Git-backup download.
1 · Drop your file
Drag & drop JSON / CSV here
or click to browse · validated locally · download sample JSON · download CSV template
CSV format guide
- Header row (exact, UTF-8):
id,question,optionA,optionB,optionC,optionD,correctIndex,rationale,topic,difficulty,marks— legacy aliasoption1,option2,option3,option4is also accepted on upload. - One row per question (max 500 rows + header). Keep the header as row 1; data starts row 2.
- Quoting: wrap any field containing a comma, quote, or line-break in
"double quotes"; escape a literal quote as"". - correctIndex is 0-based:
0=A,1=B,2=C,3=D. - marks is an integer
1–100; difficulty iseasy|medium|hard; question and rationale need ≥ 10 chars; all 4 options must be distinct.
2 · Validation
No file loaded yet. Same rules as tools/validate-questions.mjs.
3 · Publish
- Publish writes the
examsrow + allquestionsrows (upsert onexam_id,slug) — students see it instantly, no deploy. - Download the Git-backup JSON and commit it as
Exam Portal/questions/<exam-id>.v<YYYY-MM-DD>.jsonso Git stays the restorable source. - Validate any Git file any time:
node "Exam Portal/tools/validate-questions.mjs" "Exam Portal/questions/<file>.json".
Live preview
First 3 questions will render here.
Normalized JSON
// awaiting file…