TutorLoom
The learning platform for companies, colleges and training institutes. Free and open source, with an Enterprise edition.
Øv til radioamatørlisensen med forklaringer etter hvert svar og henvisninger til læreboka.
Translation pending
EducationGitHub @868-noOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
Øvingsquiz for radioamatørlisensen (kilde og redaksjonell pipeline)
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗A Norwegian (bokmål) learning and quiz site for the amateur radio licence exam.
Visitors pick chapters, answer one question at a time and get immediate feedback:
whether they were right, the correct answer, an explanation, why their choice was
wrong, and where to read more in the textbook (chapter, section, printed page).
A practice exam (100 questions, 75 right to pass, feedback at the end) mirrors the
licence exam. Questions answered wrong can be practised again, the chapter list shows how many
questions you have answered right, a new round takes questions you have not yet answered right
first, each question has its own link
(#q-0045, or #q-0045-2 for variant 2 of a calculation question with variants), and after the first visit the site works offline and can be installed
on a phone's home screen.
The repository also contains the offline editorial pipeline that turns the private textbook digitization exports into reviewed, original, publishable questions.
Status: live at https://quiz.868.no/ with 401 approved questions for chapters 1–13, 15 and 16. Chapter 14, the exam syllabus itself, is left out on purpose (
"quiz": falsein the chapter registry). Chapters 7–16 have chapter and section references but no page numbers yet. Study page references have not yet been checked against the printed book; corrections are welcome as GitHub issues.
Every question on the site was written and approved by AI models ("Claude + ChatGPT",
"machine_verified": true in the approval). We want a person to check each one. You can
help with this without the private textbook import or the rest of the pipeline. All you
need is Python ≥ 3.10, Git, a GitHub account and, ideally, the textbook.
# Fork https://github.com/868-no/quiz on GitHub, then:
git clone https://github.com/<you>/quiz.git && cd quiz
git switch -c verify-chapter-3
export RADIOQUIZ_REVIEWER="Fornavn Etternavn" # your name, as it will appear in the repository
# Questions that no person has verified yet (here: chapter 3)
python3 -m tools status -v | grep "AI-approved" | grep " ch3 "
# Read a question: text, answer options, explanations, calculation and figure parameters
python3 -m tools review show q-0045 --no-source
Each question can also be seen exactly as learners see it, at https://quiz.868.no/#q-0045.
Answer it to see the explanation and the figure.
When every item below holds, record your verification:
python3 -m tools review human-verify q-0045 --note "Regnet ut selv; sidetallet stemmer."
# asks you to confirm each item (or pass --checklist all once you have checked them all)
This adds human_verified (your name, the time and the checklist) to the question's
approval. It is only metadata: the content and the site stay as they are. Commit the
changed content/questions/*.json files and open a pull request.
If something is wrong, don't verify the question. Open an issue that says what is wrong and what the right answer or reference is. Each question links to a pre-filled issue after you answer it. A corrected question gets a new revision and a new approval, so it must be verified again.
Requirements: Python ≥ 3.10 (standard library only). Node.js ≥ 18 is optional and only needed for the JavaScript tests.
# 1. Import the digitization exports (private; nothing leaves private/)
python3 -m tools import --source "/path/to/Veien til internasjonal radioamatørlisens/output"
# 2. Run the automated checks on all questions
python3 -m tools verify
# 3. Look at everything, including unapproved drafts, in a PRIVATE preview
python3 -m tools preview
python3 -m tools serve --preview # http://127.0.0.1:8000/
# 4. Review and approve (see docs/editorial-workflow.md)
python3 -m tools review show q-0001
python3 -m tools review approve q-0001 --reviewer "Navn" --ack ocr,figures --checklist all
# 5. Build the public site from approved content only (full checks against the
# private import), and serve it locally
python3 -m tools publish
python3 -m tools serve # serves dist/
# 6. Deploy: push; GitHub Actions builds the site from approved content and
# publishes it to https://quiz.868.no/
git add content && git commit -m "Approve …" && git push
# Tests
./run-tests.sh
python3 -m tools --help lists every command; python3 -m tools status -v gives an overview.
PRIVATE (git-ignored, never deployed) PUBLIC
digitization exports ──import──▶ private/imported/<import_id>/
│ source chunks, pages, OCR flags, markers
▼
content/ (original, version-controlled)
questions/q-NNNN.json draft → verify → needs_review → human approve
glossary/terms.json approved terms only are published
chapters/chapters.json stable section ids; headings shown only once verified
visuals/templates.json parameter schemas of original visual templates
│ python3 -m tools publish (fail closed)
▼
dist/ index.html, styles.css, sw.js, js/, fonts/, data/bank.json
(built and deployed by GitHub Actions on push)
| Stage | Command | What it does |
|---|---|---|
| Import | import --source DIR | Validates the actual export schema, snapshots it under private/imported/<id>/, diffs against the previous import and flags questions citing changed chunks. |
| A. Generate | new --chunk UID / generate --chunk UID | Manual draft skeleton mapped to source chunks, or LLM candidates (provider off by default; local first; remote only with explicit opt-in). |
| B. Verify | verify | Deterministic checks: schema, Norwegian, 4 options/1 key, units and notation, independent recomputation of calculations, figure/answer consistency, answer leakage, source/page validity, OCR hazards, near-verbatim copying, duplicates. |
| C. Review | review show/approve/human-verify/reject/request-changes/edit/retire/resolve-flag, glossary approve, visuals approve, chapters verify-section | Local CLI with audit trail. Approval needs a named reviewer, a checklist, and explicit acknowledgement of OCR/page/figure hazards. |
| D. Publish | publish, release-check | Builds dist/ from approved revisions only; refuses (writes nothing) on any problem; scans the build for private material. Run locally as the full check; GitHub Actions runs it again (without the private import) to build the deployed site. |
web/js/render/).localStorage). After the first visit the site also works
offline (service worker, web/sw.js).More: docs/architecture.md.
The repository itself is public, so everything committed can be read by anyone.
| Path | On the site? | Committed (public repo)? | Contents |
|---|---|---|---|
private/ | never | no (.gitignore) | imported exports and figure crops, LLM prompts/outputs, check reports, audit log, preview build |
dist/ | yes – this is the deployed site | no (.gitignore; built and deployed by .github/workflows/pages.yml) | only index.html, styles.css, sw.js, manifest.webmanifest, js/, fonts/, brand/ (icons), data/bank.json, CNAME, .nojekyll |
web/ | yes (copied into dist/) | yes | site source code |
content/ | only the allowlisted projection in data/bank.json | yes | original questions (incl. review history), glossary, chapter registry, template schemas |
tools/, tests/, config/, docs/ | no | yes | pipeline, tests, configuration, documentation |
content/ contains chunk identifiers and review history but no textbook text. The
public bank never contains chunk ids, source mappings, provenance, review data,
learning objectives or unapproved items; release-check enforces this.
chapters verify-section) so references can
name the section; until then references show chapter and printed page only.Errors can be reported as GitHub issues; each question shows its id after answering, with a link to a pre-filled issue that includes a link to the question.