This repository serves as the Open Source Question Bank for the Examify Now ExamOven Online Practice Platform. It decouples content from code, allowing for community-driven updates, transparent sourcing, and easy management of exam papers.
- How It Works
- The Master Index (
config.json) - Question File Format
- Rich Content Guide (Math, Images, SVG)
- Using AI to Generate Questions
- Contribution Guidelines
The repository is organized by Region, Category, and Exam to ensure scalability as the question bank grows.
βββ India/
β βββ government/
β βββ management/ # e.g., CAT
β βββ postgraduate/ # e.g., NIMCET
β βββ undergraduate/ # e.g., JEE Mains
βββ global/
β βββ language/ # e.g., IELTS
β βββ subject/ # e.g., Chemistry 101
βββ usa/
βββ biotechnology/ # e.g., BACE
βββ certification/ # e.g., MTEL
The ExamOven application consumes this repository directly:
- Discovery: On startup, ExamOven fetches the
config.jsonfile from the root of this repository. This file acts as a registry, telling the app which exams are available (e.g., "NIMCET 2023", "JEE Main 2024"). - Loading: When a user selects an exam, ExamOven reads the corresponding Question JSON file (e.g.,
India/postgraduate/NIMCET/nimcet_2023.json) specified in the config. - Rendering: The app parses the JSON and renders questions using a custom Markdown engine that supports LaTeX, syntax highlighting, and even sanitized HTML/SVG.
The config.json file at the root is the entry point. Every exam available in the app must be listed here.
It is an array of objects, where each object represents a single exam paper.
| Field | Type | Required | Description |
|---|---|---|---|
id |
string |
Yes | Unique identifier (e.g., nimcet_2023). Use lowercase snake_case. |
category |
string |
Yes | Top-level grouping (e.g., NIMCET, JEE Main). |
year |
number |
Yes | The year of the exam (e.g., 2023). |
title |
string |
Yes | Display title (e.g., NIMCET 2023). |
path |
string |
Yes | Path to the question file relative to the repo root (e.g., India/postgraduate/NIMCET/nimcet_2023.json). |
description |
string |
No | Brief description of the exam. |
session |
string |
No | E.g., January, April. |
shift |
number |
No | E.g., 1, 2. |
paperType |
string |
No | E.g., Paper 1 (PCM). |
date |
string |
No | ISO Date YYYY-MM-DD. |
{
"id": "jeeMain_2024_jan_s1",
"category": "JEE Main",
"year": 2024,
"title": "JEE Main 2024 (Jan 22, Shift 1)",
"path": "India/undergraduate/JEEMains/2024/jeeMain_2024_jan_s1.json",
"session": "January",
"shift": 1,
"paperType": "Paper 1"
}Each exam file (e.g., India/postgraduate/NIMCET/nimcet_2023.json) contains the actual questions.
The file must be a JSON Array of question objects.
| Field | Type | Required | Description |
|---|---|---|---|
question_number |
number |
Yes | Sequential integer starting from 1. |
question_text |
string |
Yes | The question body. Supports Markdown, LaTeX, & HTML. |
options |
object |
Yes | Key-value pairs (e.g., "a": "Option text"). |
correct_answer |
string |
Yes | The key of the correct option (e.g., "b"). |
subject |
string |
No | E.g., Mathematics. |
topic |
string |
No | E.g., Calculus. |
difficulty |
string |
No | Easy, Medium, or Hard. |
explanation |
string |
No | Detailed solution. Supports rich content. |
- Option Keys: Always use lowercase (
"a","b","c","d"). - Correct Answer: Ensure the
correct_answervalue matches the option key exactly (e.g.,"b"). - Note: The ExamOven app is robust and handles case-insensitive matching, but maintaining strict consistency is recommended for data quality.
{
"question_number": 1,
"subject": "Physics",
"question_text": "What is the escape velocity from Earth? $v_e = \\sqrt{2gR}$",
"options": {
"a": "11.2 km/s",
"b": "9.8 km/s",
"c": "3.0 km/s",
"d": "42.0 km/s"
},
"correct_answer": "a",
"explanation": "Escape velocity is given by $v_e = \\sqrt{2GM/R}$."
}ExamOven's MarkdownRenderer is powerful. You can use the following features in question_text, options, and explanation.
Uses KaTeX.
- Inline:
$ E = mc^2 $ - Block:
$$ \sum_{i=0}^n i^2 $$ β οΈ Escaping: You must escape backslashes in JSON.- Write
\\frac{a}{b}instead of\frac{a}{b}. - Write
\\sqrt{x}instead of\sqrt{x}.
- Write
- Syntax:
 - Relative Paths: You can link to images inside this repo!
- Use:
 - The app automatically resolves this to the raw GitHub URL.
- Use:
- Absolute URLs:
works too.
The renderer supports raw HTML and SVG, sanitized for security. This allows for drawing diagrams directly in the question!
Supported Tags: <table>, <tr>, <td>, <svg>, <path>, <circle>, <rect>, <line>, <text>, etc.
Example (SVG in JSON):
"question_text": "Find the area of the shape below:\n\n<svg width='100' height='100'><circle cx='50' cy='50' r='40' stroke='black' stroke-width='3' fill='red' /></svg>"Use standard Markdown fenced code blocks.
β οΈ Escaping: Escape newlines as\n.
"question_text": "Output?\n\n```python\nprint('Hello')\n```"You can use LLMs (ChatGPT, Gemini, Claude) to generate these JSON files. Use this prompt to ensure high quality:
Prompt: "Generate a JSON array of 5 multiple-choice questions for [Subject/Exam].
Format Rules:
- Output strictly valid JSON.
- Use this structure:
{"question_number": 1, "question_text": "...", "options": {"a": "...", "b": "..."}, "correct_answer": "a", "explanation": "..."}.- LaTeX: Use
$for inline math. ESCAPE ALL BACKSLASHES (e.g.,\\frac,\\alpha).- Newlines: Use
\nfor line breaks.- Option Keys: Use lowercase 'a', 'b', 'c', 'd'.
- Content: Make the questions challenging and include detailed explanations."
We welcome contributions! Whether it's adding a new year's paper or fixing a typo.
- Fork & Branch: Create a branch like
feat/add-jee-2025. - Add Content:
- Organize files using the hierarchical structure:
[Region]/[Category]/[ExamFolder]/. - Example:
India/undergraduate/JEEMains/jee_2025.json. - Place assets in an
assets/subfolder within the exam folder.
- Organize files using the hierarchical structure:
- Update Config: Add your new exam to the relevant JSON file in the
configs/directory. (Note: The rootconfig.jsonacts as a master index pointing to these category-specific configs). - Validate:
- Run the validation script:
npm run validate - Check JSON syntax (use a linter).
- Verify LaTeX rendering (look for unescaped backslashes).
- Run the validation script:
- Pull Request: Submit your PR to the
mainbranch.
- Is the JSON valid?
- Are all LaTeX backslashes double-escaped (
\\)? - Does
correct_answermatch an option key exactly? - Are image paths correct?
- Did you add an entry to
config.json?
This repository is licensed under the ExamOven Non-Commercial Open Source License.
- Non-Commercial Use: Free for personal, educational, and non-commercial purposes.
- Commercial Use: Strictly reserved for ExamOven. Use by other commercial entities is prohibited.
- Contributions: Contributions are welcome! By contributing, you agree to license your work under these same terms.
See the LICENSE file for full details.