An independent, browser-based timed aptitude-practice application built around original CCAT-style questions.
Not affiliated with, endorsed by, or sponsored by Criteria Corp. CCAT is a trademark of its respective owner. This project does not contain or solicit copied proprietary test questions. Question contributions must be original.
- Practice under realistic time pressure.
- Keep the practice engine separate from question-bank data.
- Support multiple complete practice tests from one JSON bank.
- Track correctness, unanswered questions, category performance, and timing.
- Support original visual-spatial practice through constrained repository-owned SVG assets.
- Keep the implementation understandable, accessible, testable, and dependency-light.
Because the app loads JavaScript modules and its question bank with fetch, serve the repository through a local HTTP server rather than opening index.html directly as a file:// URL.
From the repository root, run:
npx serve .If npx asks permission to install serve, accept the prompt. Open the local URL printed by serve (commonly http://localhost:3000).
Why not recommend python -m http.server? Python's MIME-type detection can inherit Windows registry mappings. On systems where .js is registered as text/plain, Chrome rejects ES modules with a strict MIME-type error. npx serve . avoids that environment-specific failure and is therefore the documented development path.
The maintained application entry point is index.html. Browser code lives under src/, the maintained question bank is data/questions.json, and repository-owned visual question assets live under assets/spatial/.
The root-level ccat-practice.html and questions.json are retained as legacy prototype artifacts for project history. They are not the maintained application entry point or question bank and should not be used as the basis for new development. They may be removed in a future intentional cleanup after project history is preserved elsewhere.
Practice sets live in data/questions.json. The schema is data-driven: a bank contains named tests, and each test contains metadata plus questions. The UI discovers available tests rather than hard-coding a particular number of tests.
Questions include an ID, category, difficulty, prompt, answer choices, correct answer, and explanation. Questions may also reference a constrained repository-owned SVG figure for visual-spatial practice. Explanations and correctness are not shown in the practice UI until a test is submitted or time expires.
The data contract is documented in docs/question-bank-schema.md.
All included questions and visual assets are original practice material. Do not submit questions or figures copied, memorized/reconstructed, or transcribed from an actual CCAT administration or proprietary preparation product.
The project deliberately uses Node's built-in test runner and currently has no runtime or development package dependencies.
With Node.js 20 or later:
npm test
npm run validate:banknpm test exercises deterministic validation, scoring, diagnostic timing, time-formatting behavior, and spatial-figure schema constraints. npm run validate:bank loads the real question bank and rejects structural problems such as duplicate IDs, invalid answer indexes, missing explanations, unsupported schema versions, or invalid figure references.
Structural validation does not prove that a question's keyed answer is intellectually correct. Question content should receive an independent second-pass solution review before release. Spatial questions should additionally be checked to ensure that exactly one candidate satisfies the requested transformation.
Project engineering expectations are documented in docs/software-engineering-standards.md. See CONTRIBUTING.md before proposing changes or question banks.
AI-assisted contributions are welcome. The standard is the resulting software and content: it should be understandable, reviewable, tested where practical, and safe to maintain regardless of which tools helped produce it.
A new valid practice set should normally be a data-and-assets-only change. The browser application discovers available tests from the bank automatically.
Software source is released under the MIT License. Original question-bank content and original visual assets in this repository are provided for use with the project under the same license unless otherwise noted.