https://github.com/enyineer/isaqb-exam
Free iSAQB CPSA-F mock exam with timed tests, instant scoring, keyboard navigation, and a community leaderboard.
https://github.com/enyineer/isaqb-exam
certification cpsa-f education exam-preparation isaqb isaqb-f mock-exam practice-test quiz react software-architecture tailwindcss typescript vite
Last synced: about 2 months ago
JSON representation
Free iSAQB CPSA-F mock exam with timed tests, instant scoring, keyboard navigation, and a community leaderboard.
- Host: GitHub
- URL: https://github.com/enyineer/isaqb-exam
- Owner: enyineer
- License: mit
- Created: 2026-03-11T19:12:00.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2026-03-21T10:33:12.000Z (2 months ago)
- Last Synced: 2026-03-22T01:59:43.905Z (2 months ago)
- Topics: certification, cpsa-f, education, exam-preparation, isaqb, isaqb-f, mock-exam, practice-test, quiz, react, software-architecture, tailwindcss, typescript, vite
- Language: TypeScript
- Homepage: https://enyineer.github.io/isaqb-exam/
- Size: 1.11 MB
- Stars: 2
- Watchers: 0
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# iSAQB CPSA-F Mock Exam
A web-based practice exam for the **iSAQB Certified Professional for Software Architecture โ Foundation Level (CPSA-F)**.
Questions are sourced from the [official iSAQB examination question catalog](https://github.com/isaqb-org/foundation-exam-questions).
## Take the exam
You can take the exam [here](https://enyineer.github.io/isaqb-exam/). Please report any issues in this repositories issue tracker.
## Features
- ๐ฏ Pick & category question types with iSAQB scoring rules
- ๐ Shuffled answer order per attempt to prevent pattern memorization
- โฑ๏ธ Active time tracking (pauses when browser is closed)
- ๐พ Auto-saves progress to localStorage โ refresh without losing state
- ๐ฉ Flag questions for review โ confirmation prompt before finishing with flagged questions
- ๐ Per-question notes for your lecturer โ persisted and shown in results + print
- ๐จ๏ธ Print/export results for your lecturer (including notes)
- ๐ต Skipped vs wrong answer distinction in results (no penalty for skipped)
- ๐ Leaderboard โ submit scores via OAuth, verified server-side by a Cloudflare Worker
- ๐ก๏ธ Admin panel โ manage leaderboard entries, block users, and add/remove administrators
- ๐ Exam sessions โ lecturers create timed sessions, share via link/QR, view submissions and per-question statistics
- ๐ German & English
- ๐จ Multiple color themes + dark mode
- โจ๏ธ Full keyboard navigation
- ๐ Hash-based routing โ works on GitHub Pages without server config
## Architecture
- [Leaderboard Architecture](leaderboard-architecture.md) โ sequence diagrams, data model, authentication, and Worker secrets
- [Admin Interface](admin-interface.md) โ access control, features, API endpoints, and setup
- [Session Management](session-management.md) โ timed exam sessions, participant flow, statistics, and deployment
## Tech Stack
React 19 ยท Vite ยท Tailwind CSS v4 ยท Bun ยท TypeScript ยท Wouter
## Getting Started
```bash
bun install
bun run dev
```
This starts the frontend only. Questions and leaderboard data are served from the production Worker.
### Full-Stack Local Development
To run both the frontend and the Cloudflare Worker locally:
1. **Install dependencies** for both frontend and worker:
```bash
bun install
cd worker && bun install
```
2. **Configure worker secrets** โ copy the template and fill in your credentials:
```bash
cp worker/.dev.vars.example worker/.dev.vars
```
Edit `worker/.dev.vars` with your GitHub PAT, OAuth app credentials, JWT secret, and initial admin user IDs.
> **Admin access:** Set `ADMIN_USER_IDS` to a comma-separated list of user IDs (e.g. `google:123,github:456`) to grant initial admin privileges. See [admin-interface.md](admin-interface.md) for details.
3. **Set up OAuth apps for local testing** โ register these in your GitHub/Google OAuth apps:
- **Authorized JavaScript origins:** `http://localhost:8787`
- **Authorized redirect URIs:**
- `http://localhost:8787/auth/github/callback`
- `http://localhost:8787/auth/google/callback`
4. **Start both servers:**
```bash
bun run dev:all
```
- Frontend: `http://localhost:5173/isaqb-exam/`
- Worker: `http://localhost:8787`
The worker runs with local KV storage โ no data is written to production.
### Available Scripts
| Script | Description |
|--------|-------------|
| `bun run dev` | Start frontend only |
| `bun run dev:worker` | Start worker only (local KV) |
| `bun run dev:all` | Start both frontend + worker |
| `bun run build` | Production build |
| `bun test` | Run tests |
## Testing
```bash
bun test
```
## Disclaimer
This tool and its author are not affiliated with [iSAQB e.V.](https://www.isaqb.org/)
No guarantee is provided for the correctness of the questions or the test itself.
## License
[MIT](LICENSE.md)