Skip to content

msg-systems/camunda-exam-prep

Repository files navigation

Camunda 8 Exam Prep

CI License: MIT Questions

Free, open-source, static study tool for the Camunda 8 Certified Developer (C8-CP-DV) exam. Drill against a realistic pool of scenario-style questions with per-option scoring, full review walkthrough, and a mock-exam mode that mirrors the real blueprint (60 questions / 75 minutes / 65 % to pass).

Not affiliated with or endorsed by Camunda Services GmbH. All questions are original, written for personal study, and reference public Camunda 8 documentation. "Camunda" is a trademark of its respective owner. See LICENSE.


Highlights

  • Curated, scenario-style question pool — every question is hand-authored against the Camunda 8.8 blueprint and run through automated content lints (no author tells, no internal references in option text, no markdown leaks) before it ships.
  • Per-option scoring (1–10) with verdict + explanation rendered under every option on reveal.
  • Deterministic option shuffle — no "answer A is always correct" cheat; same question gets the same shuffle across re-imports so progress is stable.
  • Mock exam mode — 60 weighted questions, 75-minute timer, navigator, flag-for-review, confirmation modal before submit, full post-exam walkthrough with wrong-only filter.
  • Practice mode — topic-by-topic, instant feedback, doc links per question.
  • Review mode — re-study only the questions you got wrong or bookmarked.
  • Dashboard — coverage per topic, recent attempts, scores.
  • localStorage persistence — no backend, no telemetry.

Stack

React 18 · TypeScript · Vite · Tailwind · Zustand · Vitest. Static SPA, deployable to any static host (GitHub Pages, Netlify, S3, plain nginx).


Quick start

Requirements: Node.js 18+ and npm (bundled with Node). That's it — no Java, no Docker, no Camunda runtime, no database. Works identically on macOS, Linux, and Windows.

npm install        # installs dependencies (first time only)
npm run dev        # http://localhost:5173
npm test                  # Vitest schema tests
npm run build             # production bundle into dist/
npm run preview           # serve the production bundle
npm run lint              # tsc --noEmit
npm run questions:build   # rebuild src/data/questions/pool.json from pipeline/authored/<topic>/*.json

dist/ uses relative paths (base: './') so it can be hosted anywhere, including subpaths.


Sharing with a teammate

The repo is fully self-contained. To get someone else up and running:

  1. Share the source — either git clone the repo, or zip it up (exclude node_modules/, dist/, .git/ to keep it small — a fresh checkout is ~5 MB).
    # macOS / Linux
    zip -r camunda-exam-prep.zip . -x 'node_modules/*' 'dist/*' '.git/*' '.vite/*' 'coverage/*'
  2. They unzip and run:
    cd camunda-exam-prep
    npm install
    npm run dev
  3. Open http://localhost:5173 — done. Each developer has their own localStorage progress; nothing is shared.

All paths in the codebase (including the question pipeline) use Node's path.join + import.meta.url, so there are no OS-specific assumptions.


Project layout

src/
  App.tsx              HashRouter, routes
  main.tsx             Entry point
  components/          QuestionCard, ResultsScreen, Timer, TopicSelector, ProgressDashboard
  modes/               PracticeMode, ExamMode, ReviewMode
  store/               Zustand stores (progress + active exam session)
  hooks/               useLocalStorage, useTimer
  data/
    topics.ts          Blueprint topic catalog + weights
    questions/
      pool.json        ← generated by the pipeline (full question pool shipped to users)
    index.ts           Aggregator + weighted exam builder
  types/               Shared TypeScript types

pipeline/
  build-pool.mjs       Node ESM builder: pipeline/authored/<topic>/*.json → src/data/questions/pool.json
  blueprint.json       Per-topic target counts
  authored/<topic>/    Hand-authored question JSONs grouped by blueprint topic
  lib/content-lints.mjs Content lint rules (no meta-vocab, no markdown leaks, etc.)

tests/                 Vitest schema + lint tests

How the question pool is built

The pool is hand-authored JSON under pipeline/authored/, one folder per blueprint topic. pipeline/build-pool.mjs reads every *.json file, runs content lints, deterministically shuffles options per question, and writes the result to src/data/questions/pool.json.

Build

npm run questions:build

The builder prints a per-topic distribution table and rejects any question that fails a content lint. The build fails the run if a topic is below its blueprint target.

Adding a question

  1. Pick the topic folder under pipeline/authored/ (e.g. configuring-processes/).
  2. Create q-<short-slug>.json matching the schema below.
  3. Run npm run questions:build and fix any lint findings.
  4. Run npm test.

Question schema

Each entry in pool.json matches the Question type in src/types/index.ts:

{
  "id": "cp-input-mapping",
  "topic": "configuring-processes",
  "subtopic": "I/O mappings",
  "difficulty": "easy",
  "style": "scenario",
  "camundaVersion": "8.8",
  "scenario": "...",
  "question": "...",
  "options": [
    { "id": "a", "text": "..." },
    { "id": "b", "text": "..." },
    { "id": "c", "text": "..." },
    { "id": "d", "text": "..." }
  ],
  "correctOptionId": "a",
  "optionExplanations": {
    "a": { "text": "Correct. ..." },
    "b": { "text": "Incorrect. ..." },
    "c": { "text": "Incorrect. ..." },
    "d": { "text": "Incorrect. ..." }
  },
  "explanation": "Aggregated explanation block.",
  "docs": [{ "title": "...", "url": "https://docs.camunda.io/..." }]
}

Topic ids and exam weights live in src/data/topics.ts and match the official blueprint (Modeling 15 %, Configuring Processes 22 %, Decisions & DMN 11 %, Forms 5 %, Connectors 6 %, Extensions & Integrations 25 %, Managing Development 15 %, Dev Environment 1 %).


Tests

npm test runs the schema validator:

  • All question ids are unique.
  • Every question has exactly 4 options with ids a/b/c/d.
  • correctOptionId resolves to one of the options.
  • Every doc URL is well-formed.
  • Topic weights sum to 100.

Deploying

Anywhere that can serve static files:

npm run build
# upload dist/ to your host

GitHub Pages: dist/ works as-is because of base: './' and the HashRouter. Just push dist/ to a gh-pages branch or use an action.


Making this a git repo (today)

The project ships with a sensible .gitignore (node_modules, dist, .DS_Store, *.log, .vite, coverage). To initialise:

cd ~/camunda-exam-prep
git init
git config user.name  "Your Name"        # one-time, or use --global
git config user.email "you@example.com"  # required — commit fails (exit 128) without it
git add .
git commit -m "Initial commit: Camunda 8 exam prep"

Optional — push to GitHub:

# create an empty repo on github.com first, then:
git branch -M main
git remote add origin git@github.com:<you>/camunda-exam-prep.git
git push -u origin main

Deploying to GitHub Pages

This repo includes .github/workflows/deploy.yml. After your first push to main:

  1. On GitHub: Settings → Pages → Build and deployment → Source: GitHub Actions.
  2. Push to main (or run the workflow manually) — the action runs tests, builds, and publishes dist/ to Pages.
  3. Your site goes live at https://<you>.github.io/<repo>/.

The Vite config uses base: './' and the app uses HashRouter, so it works on any subpath without further config.

A second workflow (.github/workflows/ci.yml) runs lint + tests + build on every PR.

Things to consider before pushing publicly

  • src/data/questions/pool.json is committed so the app works without running the pipeline. Re-run npm run questions:build after editing any file under pipeline/authored/.
  • No secrets, no telemetry, no analytics — safe to make public as-is.
  • See CONTRIBUTING.md for the contribution flow.

License & disclaimer

MIT-licensed — see LICENSE. Questions are original; documentation links point to public Camunda 8 docs.

This project is an independent, community-built study tool. It is not affiliated with, endorsed by, or sponsored by Camunda Services GmbH. "Camunda" and related marks are trademarks of their respective owners. Use at your own risk for exam preparation.

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors