Quiz
SkillDev toolsDeliver interactive practice quizzes from study material.
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; ahel provides instructions and does not run this skill.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
Then ask your AI: use the Quiz skill
What this skill tells your AI
The instructions your AI receives, as published by serenakeyitan/open-exam-skills in skills/quiz/SKILL.md and read by ahel’s review.
Convert AI-generated JSON quiz into NotebookLM-style interactive quiz interface. Multiple choice questions with immediate feedback, hints, completion statistics, and review mode.
What This Skill Does
Input: JSON file with quiz questions (generated by AI) Output: NotebookLM-style interactive HTML
This is a pure frontend converter - AI (Claude/Gemini) generates the quiz as JSON, this skill renders it with NotebookLM's exact UI/UX.
Output Contract
- Produces a single HTML quiz with scoring, feedback, and review mode.
- Output file is browser-ready and does not require additional assets.
Workflow
1. User: "Claude, generate a 15-question quiz about biology"
2. Claude: Generates JSON with questions, options, correct answers, explanations
3. Save JSON to file (e.g., biology_quiz.json)
4. Run from `skills/quiz`: `python main.py -i biology_quiz.json -o biology_quiz.html`
5. Open HTML → NotebookLM-style quiz interface
JSON Input Format
Option A: Simple Array
[
{
"question": "What is the powerhouse of the cell?",
"options": [
"Nucleus",
"Mitochondria",
"Ribosome",
"Golgi apparatus"
],
"correctIndex": 1,
"hint": "It's responsible for energy production",
"correctExplanation": "Mitochondria are the powerhouses of the cell, generating ATP through cellular respiration.",
"wrongExplanation": "The answer is mitochondria - they produce energy in the form of ATP."
}
]
Option B: With Title
{
"title": "Biology Quiz",
"questions": [
{
"question": "What is photosynthesis?",
"options": [
"Breaking down glucose",
"Converting light to chemical energy",
"Cell division",
"Protein synthesis"
],
"correctIndex": 1,
"hint": "It involves sunlight and chlorophyll",
"correctExplanation": "Photosynthesis converts light energy into chemical energy stored in glucose.",
"wrongExplanation": "Photosynthesis is the process plants use to convert sunlight into energy."
}
]
}
Usage
cd skills/quiz
python main.py --input quiz.json --output quiz.html
Parameters:
--input,-i: Input JSON file (required)--output,-o: Output HTML file (default: quiz.html)
Math (KaTeX)
Use LaTeX delimiters in questions, options, hints, or explanations to render formulas:
$\frac{a}{b}$ inline, or $$\int_0^1 x^2\,dx$$ block
Notes:
- Inline math uses
$...$and block math uses$$...$$. - Escape literal dollar signs as
\$to avoid math parsing. - When local KaTeX assets are available, a
fonts/folder is created next to the HTML for offline rendering.
NotebookLM-Style Features
Visual Design
- Purple gradient background (same as NotebookLM)
- White quiz container with rounded corners and shadow
- Progress bar with gradient fill
- Color-coded feedback:
- Green for correct answers (#22c55e)
- Red for wrong answers (#ef4444)
- Purple for selected options (#667eea)
Quiz Flow
1. Taking the Quiz
| Action | Behavior |
|---|---|
| Click option (A/B/C/D) | Select answer and show immediate feedback |
| Click "Hint" button | Toggle hint visibility |
| Click "Previous" | Go to previous question |
| Click "Next" | Go to next question (only after answering) |
| Click "Finish Quiz" | Show completion statistics |
2. Answer Feedback
- Correct Answer: Green checkmark (✓), "That's right!" message, explanation
- Wrong Answer: Red cross (✗), "Not quite" message, explanation + correct answer shown in green
3. Completion Screen
Shows comprehensive statistics:
- Score: 4/15 (correct/total)
- Accuracy: 27% (correct/answered)
- Right: Number of correct answers
- Wrong: Number of incorrect answers
- Skipped: Number of unanswered questions
4. Review Mode
- Click "Review Quiz" to navigate through all answers
- See which answers were correct/wrong
- "Finish Review" button on last question returns to completion screen
5. Retake
- Click "Retake Quiz" to start fresh
- All answers cleared
- Returns to first question
UI Elements
- Header: Quiz title + "Based on 1 source"
- Progress bar: Visual progress indicator
- Progress text: "5 / 15" format
- Option labels: A, B, C, D in circular badges
- Hint panel: Yellow background with lightbulb icon
- Navigation: Previous/Next buttons with disabled states
- Completion: 🎉 emoji, stats grid, action buttons
Features Comparison
| Feature | This Skill | NotebookLM |
|---|---|---|
| Multiple choice (A/B/C/D) | ✅ | ✅ |
| Immediate feedback | ✅ | ✅ |
| Hints | ✅ | ✅ |
| Progress tracking | ✅ | ✅ |
| Completion statistics | ✅ | ✅ |
| Review mode | ✅ | ✅ |
| Retake quiz | ✅ | ✅ |
| Purple gradient | ✅ | ✅ |
| Vertical layout | ✅ | ✅ |
Technical Details
- No LLM/AI: Pure JSON → HTML conversion
- No API Keys: No external calls
- Standalone HTML: All CSS/JS embedded
- Offline: Works without internet
- State Management: JavaScript for tracking answers and progress
- Responsive: Adapts to different screen sizes
Dependencies
pip install -r requirements.txt
Only requires: loguru (logging)
Integration with AI
Asking Claude
"Generate a 20-question quiz about [topic] in JSON format.
Use this structure:
[
{
"question": "...",
"options": ["A", "B", "C", "D"],
"correctIndex": 1,
"hint": "optional hint",
"correctExplanation": "why this is right",
"wrongExplanation": "what to know if wrong"
}
]
"
Asking Gemini
Same prompt works across any AI model that can generate structured JSON.
JSON Field Reference
Required Fields
question(string): The question textoptions(array): Array of 4 answer choicescorrectIndex(number): Index of correct answer (0-3)
Optional Fields
hint(string): Hint text to help with the questioncorrectExplanation(string): Explanation shown when user answers correctlywrongExplanation(string): Explanation shown when user answers incorrectlyexplanation(string): Fallback explanation if correctExplanation/wrongExplanation not provided
Example Workflow
- Generate quiz with Claude:
User: "Create a 15-question quiz about quantum physics"
Claude: Generates JSON and saves to quantum_quiz.json
- Convert to interactive HTML:
cd skills/quiz
python main.py -i quantum_quiz.json -o quantum_quiz.html
- Take the quiz:
- Open
quantum_quiz.htmlin browser - Answer questions with immediate feedback
- Use hints when needed
- View completion statistics
- Review answers
- Retake if desired
Tips
- Question quality: Each question should test one concept
- Options: Make distractors plausible but clearly wrong
- Explanations: Provide clear, educational feedback
- Hints: Give helpful clues without revealing the answer
- Quiz length: 10-20 questions is optimal for engagement
- Difficulty: Mix easy, medium, and hard questions
Customization
Want to change the colors? Edit main.py line 55:
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
Want different option letters? Edit line 491:
const letter = String.fromCharCode(65 + index); // A, B, C, D
Signals
- GitHub stars
- 139
- Forks
- 22
- Last commit
- Feb 2026
ahel review
K1binfo
installs-packagesK6low
bundled executables the agent is told to runK1binfo
installs-packages (in scripts/install.sh)
Automated review, not a security audit. Ruleset v1+k2.
Advanced
- Item type
- skill
- Key
quiz- Source
- github.com/serenakeyitan/open-exam-skills
github.com/serenakeyitan/open-exam-skills
Related picks
Skill · thedaviddias
The pick for JavaScriptmodern-javascript-patterns
Skill · wshobson
The pick for JavaScriptpython-performance-optimization
Skill · wshobson
The pick for Pythonpython-pro
Skill · jeffallan
The pick for Pythonlatex-posters
Skill · k-dense-ai
The pick for LaTeXlatex-conference-template-organizer
Skill · galaxy-dawn
The pick for LaTeX