Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
7a44821
feat(practice): mock exams + auto-rebuild on cert markdown edits (931…
kengio May 21, 2026
90069be
feat(practice): two-step picker (cert → bank) + Prism syntax highlight
kengio May 21, 2026
2cd4493
feat(practice): modern redesign — Geist typography + per-cert gradien…
kengio May 21, 2026
4d1fb73
feat(practice): keyboard shortcuts working + 1-4 choice labels + skip…
kengio May 21, 2026
2b7df4c
feat(practice): sticky compact header + sticky action bar + n/-> next…
kengio May 21, 2026
fd84fa5
feat(practice): ↑/↓ to cycle between choices before submit
kengio May 21, 2026
4bcc0ea
fix(practice): arrow keys move focus + [hidden] beats button.primary …
kengio May 21, 2026
65dceef
fix(practice): allow Space/Enter to submit when focus is on a choice …
kengio May 21, 2026
eb8ce75
fix(practice): bottom padding tracks actionbar's actual height
kengio May 21, 2026
d1520ad
fix(practice): drop redundant 'Docs' link from page footer (GitHub li…
kengio May 21, 2026
4bfc77d
feat(practice): add © 2026 @kengio attribution linking to GitHub profile
kengio May 21, 2026
9303157
feat(practice): confetti burst on correct answer
kengio May 21, 2026
f46e78e
fix(practice): hide radio's own focus outline (label's :focus-within …
kengio May 21, 2026
7479eba
fix(practice): unify mouse + keyboard selection visuals
kengio May 21, 2026
e4ce192
fix(practice): distinct hover vs selected styles + reset focus on new…
kengio May 21, 2026
cf1d1e6
feat(practice): exam timer + wall clock + slide transition + hover re…
kengio May 21, 2026
cc0ca34
feat(practice): split clock + timer into distinct regions, slow slide…
kengio May 21, 2026
16a61f1
fix(practice): move timer to far-right of actionbar, away from action…
kengio May 21, 2026
bc06d00
fix(practice): move timer into masthead quiz-meta-strip, next to ques…
kengio May 21, 2026
71ac048
fix(practice): timer was being clipped by quiz-meta-strip overflow:hi…
kengio May 21, 2026
3993d5e
feat(practice): move Q#+difficulty above question card + slow slide f…
kengio May 21, 2026
275700c
feat(practice): clickable cert name + larger timer in actionbar
kengio May 21, 2026
af1ae14
fix(practice): pin timer on the same row as Submit/Skip, push to far …
kengio May 21, 2026
5f792ca
feat(practice): wire brand → all-certs picker, cert name → bank picker
kengio May 21, 2026
9c3e67f
feat(practice): blue selected state + settings card redesign
kengio May 21, 2026
41b61bc
feat(practice): A++ UX pass — custom modal, mobile responsive, fix st…
kengio May 21, 2026
3452f75
fix(practice): masthead focus outlines getting clipped at the bottom …
kengio May 21, 2026
17e8064
feat(practice): editorial polish + actionbar swap (Submit/Skip → right)
kengio May 21, 2026
ecc3c63
fix(practice): bump watermark opacity on light theme (was invisible)
kengio May 21, 2026
1a2a08e
feat(practice): centre kbd-hint via 3-col grid + shrink watermark for…
kengio May 21, 2026
1f193b1
feat(practice): session summary + history + weak-area + export + paus…
kengio May 21, 2026
69a39b3
fix(practice): hasActiveSession returns false on summary screen + exp…
kengio May 21, 2026
06f531f
a11y(practice): WCAG AAA contrast pass + rich aria + label semantics
kengio May 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .github/workflows/deploy-practice.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ on:
branches: [main]
paths:
- 'practice/**'
- 'certifications/**/practice-questions/**'
- 'certifications/**/mock-exam/**'
- 'certifications/**/mock-exam-2/**'
- '.github/workflows/deploy-practice.yml'
workflow_dispatch:

Expand All @@ -29,6 +32,15 @@ jobs:
steps:
- uses: actions/checkout@v4

- name: Rebuild question banks from current cert markdown
# Source of truth is certifications/**/{practice-questions,mock-exam,mock-exam-2}/*.md.
# We regenerate practice/data/*.json on every deploy so the live site
# always reflects the latest committed cert content, even if the
# author forgot to re-run build.py locally before pushing.
# build.py uses Python 3 stdlib only — no setup-python step needed
# because ubuntu-latest ships with python3 pre-installed.
run: python3 practice/build.py

- name: Setup Pages
uses: actions/configure-pages@v5

Expand Down
49 changes: 49 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,55 @@ Notable changes to the Databricks Certification Study Guide.

The format is loosely based on [Keep a Changelog](https://keepachangelog.com/). Dates use ISO 8601. Each section is grouped under the date the change shipped, with the Databricks exam-guide version each affected certification tracks.

## [2026.05.21-24] — Mock exams in practice quiz + auto-rebuild on source edits (931 q / 18 banks)

### Added

- **12 mock exam banks** in the practice quiz — each cert now has two full-length, exam-feel mock banks alongside its topic-organised practice bank:

| Cert | Practice | Mock 1 | Mock 2 |
| :--- | :---: | :---: | :---: |
| Data Engineer Associate | 85 | 45 | 45 |
| Data Engineer Professional | 73 | 63 | 60 |
| Data Analyst Associate | 57 | 45 | 45 |
| ML Associate | 46 | 43 | 44 |
| ML Professional | 57 | 45 | 45 |
| GenAI Engineer Associate | 46 | 45 | 42 |
| **Total** | **364** | **286** | **281** |

Grand total: **931 questions across 18 banks**.

- **Grouped bank picker** in the quiz UI: practice and mock banks render under labelled section headings ("Practice questions — drill by topic" and "Mock exams — full-length, exam-feel sets") so the user can choose intent before picking a cert. Two-column grid on screens ≥ 700 px wide.

### Changed — `practice/build.py`

- New `build_mock(cert, exam_n)` function parses `certifications/<cert>/resources/mock-exam{,-2}/questions.md`. Pre-scans the file linearly to map each `## Question N` heading to the most recent `## <Domain> (Questions X-Y)` domain section, then reuses the existing `parse_questions()` and overlays the per-question domain. Output JSON includes `kind: "mock"` and `sourceCert: <cert>` fields for downstream tooling.
- New `--kind {practice,mock,all}` flag (default `all`) lets you build just one kind. `--cert <id>` still filters to a single cert across both kinds.

### Changed — auto-rebuild + auto-deploy from cert markdown edits

`.github/workflows/deploy-practice.yml` now:

- Triggers on push to `main` whenever ANY of these change:
- `practice/**`
- `certifications/**/practice-questions/**`
- `certifications/**/mock-exam/**`
- `certifications/**/mock-exam-2/**`
- the workflow file itself
- Runs `python3 practice/build.py` as a step before uploading the Pages artifact so the live JSON is always fresh from current cert markdown — no need to run `build.py` locally and re-commit before pushing.

The committed `practice/data/*.json` files stay (for local dev convenience and quick PR diff review) but are no longer the source of truth at deploy time. Edit a question, push, the live site reflects it within ~1 min.

### Changed — UI cache versioning

`APP_VERSION` bumped to `"4"`. `<script src="app.js?v=4">` and `<link href="styles.css?v=4">` in `index.html`. JSON fetches pass through `bustedUrl()` to inherit the same version query so browsers don't serve stale banks after a deploy.

### Verification

- `python3 practice/build.py --check` → **18 banks / 931 questions** parsed cleanly
- Practice = 364 q (unchanged from previous PR); Mock = 567 q across 12 new bank files
- 4 mock-exam questions skipped due to multi-line-code-fence choices that the parser doesn't handle (same edge case as the practice banks; documented in `practice/README.md`)

## [2026.05.21-23] — Practice quiz polish: all 6 banks + theme + reset + branding + CI Node 24

### Added — all 6 certifications now have a question bank (364 questions total)
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ tags:
> **These are the exam notes I built while preparing for the Databricks certification series.** Cheat sheets, practice questions, mock exams, and end-to-end worked examples — now open-sourced under MIT so the next person doesn't have to start from scratch. Every certification section maps to the current official Databricks exam guide for that credential. If it helped you, ⭐ the repo and pass it on.

> [!tip]
> **▶ [Try the practice quiz live](https://kengio.github.io/databricks-certification-study-guide/)** — adaptive multiple-choice quiz, **364 questions across all 6 cert tracks**, runs in your browser, progress saved locally. No install, no signup. Light/dark/auto theme + accessible reset.
> **▶ [Try the practice quiz live](https://kengio.github.io/databricks-certification-study-guide/)** — adaptive multiple-choice quiz, **931 questions across 18 banks** (6 practice + 12 mock exams, all 6 cert tracks). Runs in your browser, progress saved locally. No install, no signup. Light/dark/auto theme + accessible reset.

> [!info]
> **Read in another language**: 🇹🇭 [ภาษาไทย](./i18n/th/README.md) (in progress) · For other languages and the translation policy, see [`TRANSLATING.md`](./TRANSLATING.md) and [`i18n/README.md`](./i18n/README.md).
Expand Down Expand Up @@ -411,7 +411,7 @@ This guide ships as a living resource. The roadmap below is what's planned for t
- ✅ **Renewal guide** for candidates whose 2-year validity expires in 2027–2028 — complete (see [`shared/appendix/renewal-guide.md`](./shared/appendix/renewal-guide.md))
- ✅ **Translation scaffolding** — Thai in-tree, other languages via fork model — complete (see [`TRANSLATING.md`](./TRANSLATING.md) + [`i18n/`](./i18n/README.md))
- ✅ **Spaced-repetition deck (Anki)** — markdown-source decks + stdlib-only builder, two starter decks (Delta Lake 27 cards, Unity Catalog 22 cards) — complete (see [`anki/README.md`](./anki/README.md))
- ✅ **Adaptive practice questions** — static-only web quiz with localStorage progress tracking + adaptive selector across **all 6 cert banks (364 questions)**. **Live at [kengio.github.io/databricks-certification-study-guide](https://kengio.github.io/databricks-certification-study-guide/)** — complete (see [`practice/README.md`](./practice/README.md))
- ✅ **Adaptive practice questions** — static-only web quiz with localStorage progress tracking + adaptive selector. **18 banks / 931 questions** (6 practice topic banks + 12 mock exams, all 6 cert tracks). **Live at [kengio.github.io/databricks-certification-study-guide](https://kengio.github.io/databricks-certification-study-guide/)** — complete (see [`practice/README.md`](./practice/README.md))

Legend: ✅ done · 🔄 in progress / next up · ⏳ planned · 🌱 ideas being explored

Expand Down
49 changes: 38 additions & 11 deletions practice/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,33 @@ A browser-based quiz for the practice-question markdown files in this repo. Trac

## Available banks

All six certifications now have a question bank — **364 questions total**.
**18 banks · 931 questions total** — every cert has practice questions plus two full-length mock exams.

| Bank | Source files | Questions |
### Practice questions (6 banks · 364 questions)

Topic-organised question sets sourced from each cert's `practice-questions/` folder. Best for drilling a specific domain.

| Bank | Source | Q |
| :--- | :--- | :---: |
| Data Engineer Associate | `certifications/data-engineer-associate/resources/practice-questions/` | 85 |
| Data Engineer Professional | `certifications/data-engineer-professional/resources/practice-questions/` | 73 |
| Data Analyst Associate | `certifications/data-analyst-associate/resources/practice-questions/` | 57 |
| ML Associate | `certifications/ml-associate/resources/practice-questions/` | 46 |
| ML Professional | `certifications/ml-professional/resources/practice-questions/` | 57 |
| GenAI Engineer Associate | `certifications/genai-engineer-associate/resources/practice-questions/` | 46 |

### Mock exams (12 banks · 567 questions)

Full-length exam-feel sets sourced from each cert's `mock-exam/` and `mock-exam-2/` folders. Each is a single `questions.md` covering every domain. Best for end-to-end timing practice.

| Cert | Mock 1 | Mock 2 |
| :--- | :---: | :---: |
| Data Engineer Associate | 5 markdown files in `certifications/data-engineer-associate/resources/practice-questions/` | 85 |
| Data Engineer Professional | 8 markdown files | 73 |
| Data Analyst Associate | 5 markdown files | 57 |
| ML Associate | 4 markdown files | 46 |
| ML Professional | 4 markdown files | 57 |
| GenAI Engineer Associate | 4 markdown files | 46 |
| Data Engineer Associate | 45 | 45 |
| Data Engineer Professional | 63 | 60 |
| Data Analyst Associate | 45 | 45 |
| ML Associate | 43 | 44 |
| ML Professional | 45 | 45 |
| GenAI Engineer Associate | 45 | 42 |

## How to run

Expand All @@ -57,11 +74,21 @@ python3 -m http.server 8080 --directory practice

### Deploy (for fork maintainers)

The deploy is driven by [`.github/workflows/deploy-practice.yml`](../.github/workflows/deploy-practice.yml). On every push to `main` that touches `practice/**`, the workflow:
The deploy is driven by [`.github/workflows/deploy-practice.yml`](../.github/workflows/deploy-practice.yml). It runs on every push to `main` that touches **any of**:

- `practice/**` (the quiz app itself)
- `certifications/**/practice-questions/**` (source markdown for practice banks)
- `certifications/**/mock-exam/**` or `mock-exam-2/**` (source markdown for mock banks)
- `.github/workflows/deploy-practice.yml`

The workflow:

1. Checks out the repo
2. Uploads `practice/` as a Pages artifact (with `.nojekyll` so HTML/JS pass through unmodified)
3. Deploys via `actions/deploy-pages@v4`
2. **Re-runs `python3 practice/build.py`** so `practice/data/*.json` is rebuilt fresh from current cert markdown — even if the author forgot to regenerate locally
3. Uploads `practice/` as a Pages artifact (with `.nojekyll` so HTML/JS pass through unmodified)
4. Deploys via `actions/deploy-pages@v4`

**This means**: edit a question in `certifications/<cert>/resources/practice-questions/*.md` (or any mock-exam file), commit, push to `main`, and the live site updates within ~1 min. No need to run `build.py` locally before pushing — the committed JSON is just a convenience for local dev / quick PR review, not the source of truth at deploy time.

**First-time setup** (only needed once per fork):

Expand Down
Loading
Loading