Redesign: bonus + dagelijkse uitdaging voor Geobas 5–8 (vervangt #31 + #63) #80

Closed
opened 2026-04-15 11:17:51 +02:00 by Ghost · 1 comment
Ghost commented 2026-04-15 11:17:51 +02:00 (Migrated from codeberg.org)

Context

Met de komst van Geobas 7 & 8 (v2.0) bevat de app nu vijf primitieven: punten (steden), polygonen (provincies, landen, gewesten, gebergten, eilanden), en lijnen (rivieren/kanalen). De huidige bonus (set 99) en dagelijkse uitdaging (set 98) trekken alleen uit `ALL_CITIES` — ze negeren wateren, landen, provincies en de hele Geobas 7/8-inhoud. Dat maakt ze irrelevant voor oudere kinderen.

Deze issue vervangt en bundelt:

  • #31 — wateren in daily/bonus integreren
  • #63 — bonus/daily differentiëren per groep (5/6/7/8)

…en breidt de scope uit naar álle primitieven die nu in de app bestaan.

Uitgangspunten

  1. Snappy: een daily moet in 2–3 minuten door te spelen zijn. Een bonus mag iets langer, maar niet zo traag dat een kind afhaakt.
  2. Gegrond in wat het kind kent: trek uit sets die bij de geselecteerde groep horen.
  3. Geen "welk type is dit?"-verwarring: als stad en land in één sessie zitten, moeten afleiders per vraag hetzelfde type hebben (distractor-filter per type).
  4. Visueel consistent: elk item rendert via de bestaande primitief (punt/polygoon/lijn) — geen nieuwe UI-componenten.

Open ontwerpvragen (op te lossen vóór implementatie)

Q1 — Per-groep of universeel?

Nu zijn daily/bonus universeel. Drie opties:

  • A. Eén universele daily + bonus die uit álle groepen trekt (huidige gedrag, maar nu met alle types)
  • B. Vier aparte daily's en vier aparte bonussen (per groep), elk alleen zichtbaar in zijn eigen groep
  • C. Eén daily + bonus die z'n pool aanpast op basis van de gekozen groep (seed-logica blijft datum-deterministisch, alleen de pool filtert)

Q2 — Mixed types of mono-type?

  • A. Elke sessie één willekeurig type (vandaag steden, morgen rivieren, overmorgen landen). Strakker, simpeler, maar minder verrassing.
  • B. Sessie mengt types; distractor-filter per vraag zorgt dat je geen "Alpen vs. München" krijgt. Speelser, meer variatie, wel cognitief zwaarder.
  • C. Hybride: daily = mono-type (voorspelbaar dagelijks ritueel), bonus = mixed (speelse verrassing).

Q3 — Fases in bonus/daily?

Geobas 7/8-sets gebruiken sequentiële fases (eerst alle landen, dan de hoofdsteden). Daily moet snappy zijn — fases voelen zwaar. Drie opties:

  • A. Geen fases in daily/bonus — vragen komen in willekeurige volgorde uit de pool
  • B. Bonus wel fases (grote sessie, ritme helpt), daily niet (kort, willekeurig)
  • C. Beide zonder fases, maar binnen één vraag garandeert de distractor-filter homogeniteit

Q4 — Pool-samenstelling per groep

  • Groep 5: sets 54/55/56/57 → cities + provinces + waters. Pool = ~125 items
  • Groep 6: sets 61–67 → alleen cities (geen nieuwe primitieven in groep 6). Pool = ~140 items
  • Groep 7: sets 71–79 → countries + cities + regions + mountains + waters. Pool = ~300+ items
  • Groep 8: sets 81–89 → wereldlanden + steden + gebergten + wateren. Pool = ~400+ items

Vraag: vlakke pool of gewogen? (Bv. 60% steden / 20% landen / 20% overig voor groep 7, zodat steden niet verdwijnen in de ruis.)

Q5 — Daily-seed bij mixed types

De huidige `dailyCities()` hashes de datum tot een seed en trekt N items uit een vaste array. Bij mixed types moet het deterministisch blijven (iedereen krijgt dezelfde daily op dezelfde dag), en bij per-groep ook deterministisch per groep. Voorstel: `seed = hash(date + group)`, pool = alle items in die groep.

Technische raakpunten (informatief — echte scope volgt na Q1–Q5)

  • `dailyCities()` en `buildBonusPool()` uitbreiden om `ALL_COUNTRIES`, `ALL_PROVINCES`, `ALL_WATERS`, `ALL_REGIONS`, `ALL_MOUNTAINS` te includeren
  • `nearbyDistractors()` moet per vraag filteren op item-type (niet alleen op afstand)
  • `renderQuestion()` schakelt al tussen primitieven via `polygonTypes`-register — geen rendering-changes nodig
  • Als per-groep: groep-selectie uit `sessionStorage.selectedGroup` bepaalt de pool
  • Emoji-grid van daily moet werken voor alle types (alleen de icon kan verschillen: 🏙️ 🗺️ 🌊 ⛰️)

Acceptatie (wordt aangescherpt na Q1–Q5)

  • Daily bevat items van álle primitieven die in de gekozen groep voorkomen
  • Bonus idem
  • Afleiders zijn altijd hetzelfde type als de vraag
  • Huidige set 98/99 gedrag kan teruggehaald worden via een fallback (of wordt expliciet vervangen)
  • Daily-seed is deterministisch (per datum, evt. per datum+groep)
  • Geen regressie op bestaande sets 5.x en 6.x

Niet in scope

  • Multiplayer of leaderboards
  • Custom pools ("alleen rivieren", "alleen landen") — kan later, niet nu
  • Nieuwe animaties of visuele specials
## Context Met de komst van Geobas 7 & 8 (v2.0) bevat de app nu vijf primitieven: punten (steden), polygonen (provincies, landen, gewesten, gebergten, eilanden), en lijnen (rivieren/kanalen). De huidige bonus (set 99) en dagelijkse uitdaging (set 98) trekken alleen uit \`ALL_CITIES\` — ze negeren wateren, landen, provincies en de hele Geobas 7/8-inhoud. Dat maakt ze irrelevant voor oudere kinderen. Deze issue vervangt en bundelt: - **#31** — wateren in daily/bonus integreren - **#63** — bonus/daily differentiëren per groep (5/6/7/8) …en breidt de scope uit naar álle primitieven die nu in de app bestaan. ## Uitgangspunten 1. **Snappy**: een daily moet in 2–3 minuten door te spelen zijn. Een bonus mag iets langer, maar niet zo traag dat een kind afhaakt. 2. **Gegrond in wat het kind kent**: trek uit sets die bij de geselecteerde groep horen. 3. **Geen \"welk type is dit?\"-verwarring**: als stad en land in één sessie zitten, moeten afleiders per vraag hetzelfde type hebben (distractor-filter per type). 4. **Visueel consistent**: elk item rendert via de bestaande primitief (punt/polygoon/lijn) — geen nieuwe UI-componenten. ## Open ontwerpvragen (op te lossen vóór implementatie) ### Q1 — Per-groep of universeel? Nu zijn daily/bonus universeel. Drie opties: - **A.** Eén universele daily + bonus die uit álle groepen trekt (huidige gedrag, maar nu met alle types) - **B.** Vier aparte daily's en vier aparte bonussen (per groep), elk alleen zichtbaar in zijn eigen groep - **C.** Eén daily + bonus die z'n pool aanpast op basis van de gekozen groep (seed-logica blijft datum-deterministisch, alleen de pool filtert) ### Q2 — Mixed types of mono-type? - **A.** Elke sessie één willekeurig type (vandaag steden, morgen rivieren, overmorgen landen). Strakker, simpeler, maar minder verrassing. - **B.** Sessie mengt types; distractor-filter per vraag zorgt dat je geen \"Alpen vs. München\" krijgt. Speelser, meer variatie, wel cognitief zwaarder. - **C.** Hybride: daily = mono-type (voorspelbaar dagelijks ritueel), bonus = mixed (speelse verrassing). ### Q3 — Fases in bonus/daily? Geobas 7/8-sets gebruiken sequentiële fases (eerst alle landen, dan de hoofdsteden). Daily moet snappy zijn — fases voelen zwaar. Drie opties: - **A.** Geen fases in daily/bonus — vragen komen in willekeurige volgorde uit de pool - **B.** Bonus wel fases (grote sessie, ritme helpt), daily niet (kort, willekeurig) - **C.** Beide zonder fases, maar binnen één vraag garandeert de distractor-filter homogeniteit ### Q4 — Pool-samenstelling per groep - Groep 5: sets 54/55/56/57 → cities + provinces + waters. Pool = ~125 items - Groep 6: sets 61–67 → alleen cities (geen nieuwe primitieven in groep 6). Pool = ~140 items - Groep 7: sets 71–79 → countries + cities + regions + mountains + waters. Pool = ~300+ items - Groep 8: sets 81–89 → wereldlanden + steden + gebergten + wateren. Pool = ~400+ items Vraag: vlakke pool of gewogen? (Bv. 60% steden / 20% landen / 20% overig voor groep 7, zodat steden niet verdwijnen in de ruis.) ### Q5 — Daily-seed bij mixed types De huidige \`dailyCities()\` hashes de datum tot een seed en trekt N items uit een vaste array. Bij mixed types moet het deterministisch blijven (iedereen krijgt dezelfde daily op dezelfde dag), en bij per-groep ook deterministisch per groep. Voorstel: \`seed = hash(date + group)\`, pool = alle items in die groep. ## Technische raakpunten (informatief — echte scope volgt na Q1–Q5) - \`dailyCities()\` en \`buildBonusPool()\` uitbreiden om \`ALL_COUNTRIES\`, \`ALL_PROVINCES\`, \`ALL_WATERS\`, \`ALL_REGIONS\`, \`ALL_MOUNTAINS\` te includeren - \`nearbyDistractors()\` moet per vraag filteren op item-type (niet alleen op afstand) - \`renderQuestion()\` schakelt al tussen primitieven via \`polygonTypes\`-register — geen rendering-changes nodig - Als per-groep: groep-selectie uit \`sessionStorage.selectedGroup\` bepaalt de pool - Emoji-grid van daily moet werken voor alle types (alleen de icon kan verschillen: 🏙️ 🗺️ 🌊 ⛰️) ## Acceptatie (wordt aangescherpt na Q1–Q5) - [ ] Daily bevat items van álle primitieven die in de gekozen groep voorkomen - [ ] Bonus idem - [ ] Afleiders zijn altijd hetzelfde type als de vraag - [ ] Huidige set 98/99 gedrag kan teruggehaald worden via een fallback (of wordt expliciet vervangen) - [ ] Daily-seed is deterministisch (per datum, evt. per datum+groep) - [ ] Geen regressie op bestaande sets 5.x en 6.x ## Niet in scope - Multiplayer of leaderboards - Custom pools (\"alleen rivieren\", \"alleen landen\") — kan later, niet nu - Nieuwe animaties of visuele specials
Ghost commented 2026-04-20 22:38:58 +02:00 (Migrated from codeberg.org)

Fixed in v2.18.0 — per-groep mixed-type daily + bonus voor Geobas 5–8, met distractor-filter per _itemType en map-framing fix voor wereldwijde vragen.

Fixed in v2.18.0 — per-groep mixed-type daily + bonus voor Geobas 5–8, met distractor-filter per _itemType en map-framing fix voor wereldwijde vragen.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jelmer/topoquiz#80
No description provided.