# I’m Your Host — question library

## Import from the host screen

Use **Question library → Bring the questions** to upload Excel (.xlsx/.xls), CSV, or TSV, select a worksheet, preview the rows, and import without restarting. For Google Sheets, download as Excel or CSV first. The app provides a CSV template and a direct question form. **Your imported questions** is a private library collection. Imports stay in the private room save and are not bundled into releases.

A batch contains 1–100 questions (2 MB file limit). Required headers: `prompt`, `answer`. Optional: `category`, `type`, `difficulty`, `format`, `options` separated by `|`, `responseMode`, `source`. Category accepts a focused category name or ID 0–29. Types: answer, blank, multiple, truefalse. Difficulty: low, medium, hard, extreme. Response mode: written or buzzer. Invalid or duplicate rows reject the complete batch so you can correct the file and retry.

Arrange up to 100 questions in a lineup. During Quickfire, play them individually or open the first 30 as a round sheet. Each sheet answer is worth one point; optionally add a one-point connection question. Collect, grade, and publish in **Answer desk**. Player powers and lyric bonuses are retired; historical bonus source records remain in the data archive.


The live bank contains **16,726 main questions**: 810 newly authored questions, 15,916 Community Archive questions, and 0 host-imported questions. There are 43 separate bonus questions and 6 traditional lyric prompts. Bonus records are held out from the main pool.

The default **Host’s Selection** replaces the former 594-question starter bank. The 30 focused topics contain 27 questions each, with at least one open-answer clue at every difficulty. The board draws from these focused topics. The optional archive adds 13 broad topics and works offline.

## Difficulty and formats

The four authored levels are **Medium**, **Medium-hard**, **Hard**, and **Extremely hard** (10, 20, 30, and 40 points). Internal IDs remain `low`, `medium`, `hard`, and `extreme`. Difficulty is an editorial estimate; it has not been calibrated through player success rates. The archive has no source difficulty ratings: it remains **Unrated**, at 20 points, and is never relabeled Hard.

Written and buzzer play can be mixed. Open answers, blanks, multiple choice, and true/false are joined by identity clues, connections, odd-one-out, ordering, matching, year, exact-number, list, anagram, text rebus, two-part, and before-and-after questions. Multi-part questions include answer parts and accepted aliases where available; the host remains the final judge. Number questions require the stated exact answer unless the host applies a different scoring rule. No licensed music clips or third-party picture rounds are bundled.

## Actual topic counts

| Topic | Pack | Main | Board-compatible | Separate bonus |
|---|---|---:|---:|---:|
| Big Cats | Host’s Selection | 27 | 20 | 1 |
| The Moon | Host’s Selection | 27 | 24 | 1 |
| World Kitchens | Host’s Selection | 27 | 24 | 1 |
| Middle-earth | Host’s Selection | 27 | 24 | 1 |
| Retro TV | Host’s Selection | 27 | 24 | 1 |
| 90s & 00s TV | Host’s Selection | 27 | 24 | 1 |
| New-School TV | Host’s Selection | 27 | 24 | 1 |
| Classic Rock | Host’s Selection | 27 | 23 | 1 |
| Pop Icons | Host’s Selection | 27 | 23 | 1 |
| Movies: 1990s & Up | Host’s Selection | 27 | 23 | 1 |
| Disney Days | Host’s Selection | 27 | 24 | 1 |
| Toy Chest | Host’s Selection | 27 | 24 | 1 |
| Tabletop Toys | Host’s Selection | 27 | 24 | 1 |
| Ancient Worlds | Host’s Selection | 27 | 24 | 1 |
| American History | Host’s Selection | 27 | 24 | 1 |
| World History | Host’s Selection | 27 | 24 | 1 |
| Royal History | Host’s Selection | 27 | 24 | 1 |
| Famous Firsts | Host’s Selection | 27 | 24 | 1 |
| Around the World | Host’s Selection | 27 | 24 | 1 |
| Food for Thought | Host’s Selection | 27 | 24 | 1 |
| Dog People | Host’s Selection | 27 | 24 | 1 |
| Zoo Animals | Host’s Selection | 27 | 24 | 1 |
| Everyday Science | Host’s Selection | 27 | 22 | 1 |
| Tennis, Golf & Hoops | Host’s Selection | 27 | 24 | 1 |
| Fantasy Books | Host’s Selection | 27 | 24 | 1 |
| Superheroes | Host’s Selection | 27 | 24 | 1 |
| Toy Box | Host’s Selection | 27 | 24 | 1 |
| Toy Nostalgia | Host’s Selection | 27 | 24 | 1 |
| Headlines: 2020–2023 | Host’s Selection | 27 | 24 | 1 |
| Music Mix | Host’s Selection | 27 | 23 | 1 |
| Animals & Natural History | Community Archive | 509 | 0 | 1 |
| History Archive | Community Archive | 684 | 0 | 1 |
| World Geography | Community Archive | 430 | 0 | 1 |
| World Culture & Language | Community Archive | 2,184 | 0 | 1 |
| Books & Authors | Community Archive | 566 | 0 | 1 |
| Arts & Humanities | Community Archive | 439 | 0 | 1 |
| Film Archive | Community Archive | 2,184 | 0 | 1 |
| Music Archive | Community Archive | 1,886 | 0 | 1 |
| Television Archive | Community Archive | 2,946 | 0 | 1 |
| Science & Technology | Community Archive | 1,002 | 0 | 1 |
| Food, Crafts & Hobbies | Community Archive | 473 | 0 | 1 |
| People & Biography | Community Archive | 1,044 | 0 | 1 |
| General Knowledge Archive | Community Archive | 1,569 | 0 | 1 |

**Scope:** There are thousands of questions in several broad archive topics, not thousands in each of the 30 focused topics. The focused sets are deliberately finite; no count is inflated by generating permutations of the same fact. Archive counts are unique normalized prompts, not a claim that every underlying fact is unique.

## Provenance and quality

450 additional researched questions carry page-level source links and source-check evidence in the three data/expansion-research-*-sources.md ledgers. Their factual answers were checked against those sources; difficulty remains an editorial estimate.

Newly authored records carry bibliographic `sourceReference` notes. Where an individual page was checked, `source` points to it. A broader `referenceUrl` is a reading resource, not a claim that the page verifies every fact in the category. Original works, official credits, named rulebooks and dated event records are the references for cultural questions. These records received an editorial pass, not an independent comprehensive fact-check. Recent-event questions identify their historical dates and do not claim to describe today’s officeholders or rankings.

The optional archive was imported from [OpenTriviaQA by uberspot and contributors](https://github.com/uberspot/OpenTriviaQA), pinned to commit `dcc1cdf36c2985ed5c849d1f2265c5041ffcdfb9`. Its authors distribute the dataset under [Creative Commons Attribution-ShareAlike 4.0](https://creativecommons.org/licenses/by-sa/4.0/). The adapted JSON snapshot and its text adaptations are distributed under that same license. A complete copy of the license is in `data/licenses/OpenTriviaQA-CC-BY-SA-4.0.md`. Every imported record links to its source file and line at the pinned commit.

The importer examined 35,996 records and accepted 15,929. It removes malformed choices, incomplete questions, identified missing-context prompts, selected unsuitable/subjective wording, quoted-lyric requests, detected time-relative claims, answer-in-prompt cases and normalized duplicate prompts. These automated filters do not establish factual truth. Archive wording and answers may contain errors or dated assumptions; hosts should preview material before a competitive event.

The archive import does not copy third-party audio, photographs or logos. The dataset author’s license assertion is preserved; individual upstream factual accuracy and every original contribution’s rights have not been independently audited.

## Add your own questions

1. Copy `data/custom-pack.example.json` to a new file and edit its question objects. Use a focused category ID (`0`–`29`, in table order above), a difficulty ID, and a question type.
2. Run `node scripts/import-custom-pack.mjs /absolute/path/to/your-pack.json`.
3. Restart the host app. Imported records appear in Host’s Selection and are marked `host-authored` in their metadata.

The importer validates required fields, four unique multiple-choice options, exact-answer inclusion, blank markers, true/false answers, supported formats, safe source-link schemes and duplicate prompts. It appends to `data/custom-questions.json` without replacing existing questions. A rejected import leaves that file unchanged. Back up this editable JSON when distributing your local setup. To remove a custom question, delete its object from that file and restart. Keep sources and any applicable license with your pack.

Supported optional fields: `acceptedAnswers`, `answerParts`, `allowAnyOrder`, `responseMode` (`written` or `buzzer`), `format`, `visualText` (plain text only), `numericAnswer`, `numericTolerance`, `explanation`, `asOf`, `sourceReference`, and an HTTP/HTTPS `source` URL. Unknown fields are discarded; point values are derived from difficulty. Ordering uses ordered answer parts; list questions can use `allowAnyOrder: true`.

## Rebuild the bundled archive

```sh
git clone https://github.com/uberspot/OpenTriviaQA.git /tmp/host-opentriviaqa
git -C /tmp/host-opentriviaqa checkout dcc1cdf36c2985ed5c849d1f2265c5041ffcdfb9
node scripts/import-community-bank.mjs /tmp/host-opentriviaqa
node scripts/update-question-library.mjs
node --test tests/question-bank.test.mjs
```

The old `data/*-rounds.txt` files remain as historical source material and are not loaded during gameplay. Live authored content is in `data/curated-rounds.tsv`, `data/variety-rounds.mjs`, `data/curated-bonuses.tsv`, and `data/expansion-research-*.json`. Gameplay does not call external question APIs.
