{"id":48047922,"url":"https://github.com/enyineer/isaqb-exam","last_synced_at":"2026-04-04T14:19:13.788Z","repository":{"id":343797009,"uuid":"1179179508","full_name":"enyineer/isaqb-exam","owner":"enyineer","description":"Free iSAQB CPSA-F mock exam with timed tests, instant scoring, keyboard navigation, and a community leaderboard.","archived":false,"fork":false,"pushed_at":"2026-03-21T10:33:12.000Z","size":1162,"stargazers_count":2,"open_issues_count":1,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-22T01:59:43.905Z","etag":null,"topics":["certification","cpsa-f","education","exam-preparation","isaqb","isaqb-f","mock-exam","practice-test","quiz","react","software-architecture","tailwindcss","typescript","vite"],"latest_commit_sha":null,"homepage":"https://enyineer.github.io/isaqb-exam/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/enyineer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-11T19:12:00.000Z","updated_at":"2026-03-21T10:33:14.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/enyineer/isaqb-exam","commit_stats":null,"previous_names":["enyineer/isaqb-exam"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/enyineer/isaqb-exam","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enyineer%2Fisaqb-exam","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enyineer%2Fisaqb-exam/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enyineer%2Fisaqb-exam/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enyineer%2Fisaqb-exam/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/enyineer","download_url":"https://codeload.github.com/enyineer/isaqb-exam/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enyineer%2Fisaqb-exam/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31402291,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["certification","cpsa-f","education","exam-preparation","isaqb","isaqb-f","mock-exam","practice-test","quiz","react","software-architecture","tailwindcss","typescript","vite"],"created_at":"2026-04-04T14:19:13.248Z","updated_at":"2026-04-04T14:19:13.769Z","avatar_url":"https://github.com/enyineer.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# iSAQB CPSA-F Mock Exam\n\nA web-based practice exam for the **iSAQB Certified Professional for Software Architecture — Foundation Level (CPSA-F)**.\n\nQuestions are sourced from the [official iSAQB examination question catalog](https://github.com/isaqb-org/foundation-exam-questions).\n\n## Take the exam\n\nYou can take the exam [here](https://enyineer.github.io/isaqb-exam/). Please report any issues in this repositories issue tracker.\n\n## Features\n\n- 🎯 Pick \u0026 category question types with iSAQB scoring rules\n- 🔀 Shuffled answer order per attempt to prevent pattern memorization\n- ⏱️ Active time tracking (pauses when browser is closed)\n- 💾 Auto-saves progress to localStorage — refresh without losing state\n- 🚩 Flag questions for review — confirmation prompt before finishing with flagged questions\n- 📝 Per-question notes for your lecturer — persisted and shown in results + print\n- 🖨️ Print/export results for your lecturer (including notes)\n- 🔵 Skipped vs wrong answer distinction in results (no penalty for skipped)\n- 🏆 Leaderboard — submit scores via OAuth, verified server-side by a Cloudflare Worker\n- 🛡️ Admin panel — manage leaderboard entries, block users, and add/remove administrators\n- 🎓 Exam sessions — lecturers create timed sessions, share via link/QR, view submissions and per-question statistics\n- 🌍 German \u0026 English\n- 🎨 Multiple color themes + dark mode\n- ⌨️ Full keyboard navigation\n- 🔗 Hash-based routing — works on GitHub Pages without server config\n\n## Architecture\n\n- [Leaderboard Architecture](leaderboard-architecture.md) — sequence diagrams, data model, authentication, and Worker secrets\n- [Admin Interface](admin-interface.md) — access control, features, API endpoints, and setup\n- [Session Management](session-management.md) — timed exam sessions, participant flow, statistics, and deployment\n\n## Tech Stack\n\nReact 19 · Vite · Tailwind CSS v4 · Bun · TypeScript · Wouter\n\n## Getting Started\n\n```bash\nbun install\nbun run dev\n```\n\nThis starts the frontend only. Questions and leaderboard data are served from the production Worker.\n\n### Full-Stack Local Development\n\nTo run both the frontend and the Cloudflare Worker locally:\n\n1. **Install dependencies** for both frontend and worker:\n   ```bash\n   bun install\n   cd worker \u0026\u0026 bun install\n   ```\n\n2. **Configure worker secrets** — copy the template and fill in your credentials:\n   ```bash\n   cp worker/.dev.vars.example worker/.dev.vars\n   ```\n   Edit `worker/.dev.vars` with your GitHub PAT, OAuth app credentials, JWT secret, and initial admin user IDs.\n\n   \u003e **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.\n\n3. **Set up OAuth apps for local testing** — register these in your GitHub/Google OAuth apps:\n   - **Authorized JavaScript origins:** `http://localhost:8787`\n   - **Authorized redirect URIs:**\n     - `http://localhost:8787/auth/github/callback`\n     - `http://localhost:8787/auth/google/callback`\n\n4. **Start both servers:**\n   ```bash\n   bun run dev:all\n   ```\n   - Frontend: `http://localhost:5173/isaqb-exam/`\n   - Worker: `http://localhost:8787`\n\n   The worker runs with local KV storage — no data is written to production.\n\n### Available Scripts\n\n| Script | Description |\n|--------|-------------|\n| `bun run dev` | Start frontend only |\n| `bun run dev:worker` | Start worker only (local KV) |\n| `bun run dev:all` | Start both frontend + worker |\n| `bun run build` | Production build |\n| `bun test` | Run tests |\n\n## Testing\n\n```bash\nbun test\n```\n\n## Disclaimer\n\nThis tool and its author are not affiliated with [iSAQB e.V.](https://www.isaqb.org/)\nNo guarantee is provided for the correctness of the questions or the test itself.\n\n## License\n\n[MIT](LICENSE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenyineer%2Fisaqb-exam","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fenyineer%2Fisaqb-exam","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenyineer%2Fisaqb-exam/lists"}