A Pearson VUE–style exam simulator for Azure certifications — timed, scored, and fully reviewable
Azure Exams Simulator is a single-page application that recreates the real Microsoft certification testing experience: a countdown timer, a question navigator with flagging, strict item scoring, and a full performance dashboard with per-question explanations.
It ships with a complete AI-900 bank (over 100 verified questions) and a complete AZ-900 bank (485 questions), and its plugin architecture means any Azure certification — DP-900, SC-900, AZ-104 — can be added with one bank file and one registry entry. No engine changes required.
- ⏱️ Real Exam Timer — HH:MM:SS countdown with amber/red warnings, pause mode, and auto-submit on expiry
- 🧩 Three Question Types — Single choice, multiple choice (exact-count validation), and Yes/No statement matrices
- 🗺️ Question Navigator — Jump anywhere; color-coded answered/unanswered states with flag-for-review markers
- 📋 Pre-Submit Review — Full overview of unanswered and flagged questions before final submission
- 🎯 Authentic Scoring — All-or-nothing item scoring scaled to 1000, passing at 700, just like the real exam
- 📊 Performance Dashboard — Pass/fail ring, time taken, and a per-skill-domain breakdown
- 📖 Full Answer Review — Every question with your answer vs. the correct one, plus a written explanation
- 🔀 Random Draws — Each attempt pulls a fresh random set from the bank, so retakes never repeat
- 🧱 Multi-Certification Architecture — Exam picker driven by a registry; preview mode for growing banks
| Metric | Value |
|---|---|
| 🎓 Certifications | 2 (AI-900 full · AZ-900 full) |
| ❓ Questions in Banks | 596 (AI-900: 111 · AZ-900: 485) |
| 🧩 Question Types | 3 |
| 📚 Skill Domains | AI-900: 5 · AZ-900: 3 |
| ⏱️ AI-900 Exam | 60 questions / 80 min |
| ⏱️ AZ-900 Exam | 40–50 questions / 45 min |
| 🏆 Passing Score | 700 / 1000 |
| Exam | Questions | Status | Skill Domains |
|---|---|---|---|
| AI-900 — Azure AI Fundamentals | 111 | ✅ Full | 5 |
| AZ-900 — Azure Fundamentals | 485 | ✅ Full | 3 |
The AZ-900 bank spans all three official skill domains. Distribution reflects the source material and can be sampled per-domain by the engine to build balanced mock exams.
| Domain | Questions | Share | Official exam weighting |
|---|---|---|---|
| Cloud Concepts | 56 | 11.5% | 25–30% |
| Azure Architecture & Services | 283 | 58.4% | 35–40% |
| Management & Governance | 146 | 30.1% | 30–35% |
The imported AZ-900 bank skews toward Architecture & Services. Availability-zone / region / core-component questions legitimately fall under that domain per the AZ-900 skills outline, so this reflects the source rather than a mislabel. Per-question explanations for AZ-900 are being populated progressively.
Strict one-way dependency flow — UI never touches question banks directly:
components (screens, widgets)
│
▼
hooks (useExamSession, useCountdown)
│
▼
logic (grading, shuffle, time) data (examRepository)
│
▼
config (examRegistry)
│
▼
banks (ai900.js, az900.js)
Swapping the in-memory banks for an API or database later means changing one file: src/data/examRepository.js.
- React 18 — UI with hooks-based state management
- Vite 5 — Dev server and production builds
- Tailwind CSS 3 — Utility-first styling
- lucide-react — Icon library
- GitHub Actions — CI workflow for automatic GitHub Pages deployment
AzureExams_simulator/
├── .github/workflows/ # Auto-deploy to GitHub Pages
├── src/
│ ├── config/ # Exam registry — add new certifications here
│ ├── data/
│ │ ├── banks/ # Question banks (ai900.js, az900.js, ...)
│ │ └── examRepository.js
│ ├── logic/ # Pure functions: grading, shuffle, time
│ ├── hooks/ # useExamSession, useCountdown
│ └── components/
│ ├── screens/ # Select · Welcome · Exam · Overview · Results
│ ├── exam/ # TopBar, NavGrid, question renderers
│ ├── review/ # Post-exam answer review
│ └── common/ # ScoreRing, ConfirmModal, ...
└── index.html
git clone https://github.com/9llmy/AzureExams_simulator.git
cd AzureExams_simulator
npm install
npm run dev # → http://localhost:5173Production build: npm run build (output in dist/).
-
Create
src/data/banks/dp900.jsexporting a question array. Three question shapes are supported:// single → radio buttons; one correct answer { id: 1, domain: "Cloud Concepts", type: "single", q: "...", options: ["Yes", "No"], correct: [0], explanation: "..." } // multi → checkboxes; must pick exactly `pick` answers { id: 2, domain: "Azure Architecture and Services", type: "multi", pick: 2, q: "...", options: ["A", "B", "C", "D"], correct: [0, 1], explanation: "..." } // matrix → grouped Yes/No statements (0 = Yes, 1 = No) { id: 3, domain: "Management and Governance", type: "matrix", statements: ["Statement 1", "Statement 2"], matrixAnswers: [0, 1], explanation: "..." }
-
Register it with one entry in
src/config/examRegistry.js.
The exam picker, timer, grading, and dashboard adapt automatically. Banks smaller than the target question count run in preview mode.
This project is licensed under the MIT License — see the LICENSE file for details.
Made with ☁️ by Suliman Saleh (9llmy)