A browser-based quiz app that loads ClassMarker-exported CSV question banks and runs interactive practice sessions.
# Python 3
python3 -m http.server 8080
# Node.js (npx)
npx serve .
# Then open:
# http://localhost:8080When served over HTTP, the app automatically detects and loads the first CSV it finds in the same directory, tried in order:
PSM_I.csvPSPO_I.csvquestions.csv
Open index.html directly with File > Open or by double-clicking. Auto-load won't work (browser security blocks local file reads), but the Load CSV button at the top right lets you upload any ClassMarker export manually.
Exported from ClassMarker. The file may contain up to three sections, each starting with a header row whose first column is "Question Type: <type>":
| Section header | Question type |
|---|---|
Question Type: multipleresponse |
Select-all-that-apply (checkboxes) |
Question Type: multiplechoice |
Single correct answer (radio) |
Question Type: truefalse |
TRUE / FALSE |
Sections are separated by blank rows. A single export file can contain all three types.
multipleresponse
Question Type, Parent Category, Category, Random Answers, Grade Style,
Correct Feedback, Incorrect Feedback, Points, Question, Correct,
Answer A … Answer J
Correct = comma-separated letters, e.g. A,C
multiplechoice
Question Type, Parent Category, Category, Random Answers,
Correct Feedback, Incorrect Feedback, Points, Question, Correct,
Answer A … Answer J
Correct = single letter, e.g. A
truefalse
Question Type, Parent Category, Category,
Correct Feedback, Incorrect Feedback, Points, Question, Correct,
Answer A (TRUE), Answer B (FALSE)
- Auto-load on startup when served over HTTP
- CSV upload button to load any ClassMarker export
- Shuffle questions — randomize order each session
- Shuffle answers — randomize answer option display order (respects the per-question "Random Answers" flag)
- Category filter — select specific subcategories to drill
- Type filter — restrict to one or more question types
- Inline feedback — correct/incorrect explanation after each answer, with missed answers highlighted
- Skip button — skip a question (counts as wrong for retry purposes)
- Results screen — percentage score, pass/fail badge (80% threshold shown as a guide), per-category breakdown
- Retry Wrong — replay only questions answered incorrectly
| Type | Count |
|---|---|
multiplechoice |
107 |
multipleresponse |
40 |
truefalse |
10 |
| Total | 157 |
- Framework and Direct Recall
- Role Misapplication
- Event Misuse
- Increment Integrity
- Transparency Failure
- Efficiency vs Empiricism Trap
- Over-control Trap
- False Equivalence Trap
- Boundary Violation Detection
- Each question is worth 1 point
- For
multipleresponse, the entire question is all-or-nothing: all correct choices must be selected and no incorrect choices selected to earn the point Grade Style: Offon multipleresponse questions confirms partial credit is not awarded
- Empty answer cells (no text) are treated as non-existent options — the answer list stops at the last non-empty cell.
Correctcolumn letters always correspond to the original A–J labeling in the CSV, not the displayed order when answers are shuffled.- Blank rows between sections are used as section separators and are skipped.
- The 80% pass threshold shown in the results screen is approximate — the official PSM I threshold is 85%.
- Some
multipleresponsequestions use "Select all that apply" phrasing and have 3 correct answers (e.g.A,B,CorA,B,D). - Several questions have feedback text containing special characters (
â,Õ,Õ) — these are Windows-1252 encoding artifacts from ClassMarker exports. The app renders them as-is. - One truefalse section has incorrect feedback that reads as if it belongs to a different question (rows 171–172 feedback text appears swapped in the source CSV). This is a ClassMarker export artifact, not an app bug.
- Questions without a
Correctvalue or with no answer options are silently skipped during parsing.