Subjects
Topics
Pick a subject above to see its topics.
Quizzes
Pick a topic above to see its quizzes.
Questions
Pick a quiz on the Quizzes tab, then come back here.
Bulk import
Pick where this batch of questions goes, then upload a JSON file containing just the questions themselves — no subject/topic/quiz wrapper to hand-write. Pick an existing subject or topic from the dropdown to add into it, or choose "+ Add a new…" to create one. The quiz title always just adds into an existing quiz of that exact name, or creates a new one — the questions always get added underneath.
Expected JSON shape — just the questions array
[
{
"type": "mcq",
"question_text": "Which is the largest planet in the Solar System?",
"options": ["Earth", "Jupiter", "Saturn", "Neptune"],
"correct_option": 1,
"detailed_solution": "Jupiter is the largest planet by both mass and volume.",
"difficulty": "easy"
},
{
"type": "statement",
"question_text": "Statement 1: ... \nStatement 2: ...\nWhich is/are correct?",
"options": ["Only 1", "Only 2", "Both", "Neither"],
"correct_option": 2,
"detailed_solution": "Both statements are correct because…",
"difficulty": "medium"
},
{
"type": "table",
"question_text": "Who scored the highest total?",
"table_data": {
"headers": ["Student", "Maths", "Science"],
"rows": [["A", "72", "65"], ["B", "60", "78"]]
},
"options": ["Student A", "Student B", "Student C", "Student D"],
"correct_option": 1,
"detailed_solution": "B's total is 138, the highest here.",
"difficulty": "medium"
}
]
These fields exist in your database and are enforced exactly as your schema defines them:
typemust bemcq,statement, ortable(defaults tomcqif left out).optionsmust be an array of exactly 4 strings, every time, for all 3 types.correct_optionmust be an integer 0–3 — the index intooptions.detailed_solutionis required — your DB doesn't allow a question without one.difficultymust beeasy,medium, orhard(defaults tomedium).table_datais required whentypeis"table", and ignored otherwise — it's{ "headers": [...], "rows": [[...], ...] }, not an array of strings likeoptions.
The subject/topic/quiz name and description come from the form above, not the file — the file is only ever this one flat list of questions.