Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AI IQ 🧠

En lille web-app der tester din viden om kunstig intelligens — med gamification, humor og masser af øjenguf. Bygget på http-nu (en Nushell-scriptbar HTTP-server) som backend.

AI IQ startskærm AI IQ quiz med aktiv streak og combo-glød

Features

  • Udskiftelige spørgsmålssæt i YAML — 12 AI-spørgsmål følger med, og egne sæt vælges pr. link med ?set=<id> (se Spørgsmålssæt)
  • Jokes i både de forkerte svar og feedback-linjerne
  • Gamification: tids-bonus, combo-multiplikator, streaks og sjove rang-titler (fra 🦜 Stokastisk Papegøje til 🤖 AGI-Overherre)
  • Øjenguf: kortet pumper ved rigtige svar, ryster ved forkerte, og danser med en eskalerende glød på streaks
  • Stress-timer: en nedtællingslinje der slår som et hjerte og accelererer mod nul (grøn → rød)
  • Lyd (Web Audio, ingen lydfiler): glad blip ved rigtigt svar, womp ved forkert, tikkende ur under panik, "nah-nah-naaaaah" trombone ved timeout, og en triumf-fanfare ved perfekt score
  • Personligt kursus: efter quizzen samles et lille kursusmateriale af præcis de emner du svarede forkert på
  • Før/efter: tag et nyt forsøg efter kurset og se sort på hvidt hvilke svage emner du har rettet
  • Login + leaderboard: opret en bruger, og dine bedste scores ryger på en vedvarende topliste
  • Live admin-dashboard: følg folk spille i realtid via server-sent events
  • Tastatur-styring (1-4 / A-D) og prefers-reduced-motion-support

Personligt kursus

Personligt AI-kursus samlet ud fra forkerte svar

Hvert spørgsmål bærer et lille topic + learn-felt (en kort, korrekt mini-lektion). Frontend'en husker præcis hvilke spørgsmål deltageren svarede forkert på (eller løb tør for tid på) og samler bagefter et personligt kursusmateriale af netop de emner — med spørgsmålet, det rigtige svar og forklaringen. Får man alt rigtigt, er der intet at repetere.

Efter kurset kan deltageren tage et nyt forsøg, og resultatskærmen viser så en før/efter-sammenligning mod det første forsøg (baseline): score- og rigtige-udvikling, plus hvilke af de svage emner der nu er rettet (✓) eller stadig driller (⚠). Forbedringen gemmes også server-side, så admin kan se den samlede effekt (se Live admin-dashboard).

Før/efter-sammenligning efter et nyt forsøg

Login & leaderboard

AI IQ login-skærm Resultatskærm med leaderboard

Et bevidst simpelt login: vælg brugernavn + kode, så huskes du via en session-cookie. Data persisteres server-side i http-nu's indbyggede cross.stream-store (--store) — ingen ekstern database. Koder gemmes som SHA-256-hash, og leaderboardet viser den bedste score pr. bruger.

API-endpoints (alle JSON):

Metode Sti Funktion
GET /api/questions Spørgsmål + rang-titler (?set=<id> vælger sæt)
GET /api/sets Tilgængelige spørgsmålssæt
POST /api/sets Upload et nyt sæt som YAML (kræver login)
POST /api/register Opret bruger (sætter session-cookie)
POST /api/login Log ind
POST /api/logout Log ud
GET /api/me Hvem er logget ind
POST /api/score Indsend score (kræver login)
GET /api/leaderboard Top 15, bedste score pr. bruger
POST /api/event Live-event fra en spiller (fire-and-forget)
GET /api/admin/stream SSE-stream af alle events (kun admin)
GET /api/admin/misses Svageste emner, aggregeret (kun admin)
GET /api/admin/improvement Effekt af kurset: forbedring over forsøg (kun admin)
GET /admin Live-dashboardet (kun admin)

Live admin-dashboard

Live admin-dashboard med aktive spillere og live-feed

Som admin kan du følge folk spille i realtid/admin: aktive spillere med live score/streak/progress, og et rullende live-feed. Det er drevet af http-nu's cross.stream + server-sent events (.cat --follow → to sse) — ingen polling, ingen WebSocket.

Dashboardet samler også svageste emner — en rangliste over hvad folk oftest svarer forkert på (gemt i et misses-topic ved hver finish), så du kan se hvor undervisningen skal sætte ind:

Admin-dashboard med svageste emner

Og fordi hvert score-forsøg gemmes med et attempt-nummer, kan dashboardet vise effekten af kurset — den gennemsnitlige forbedring fra deltagernes første til seneste forsøg, så du har sort på hvidt på om undervisningen rykker:

Effekt af kurset: gennemsnitlig forbedring over forsøg

De to historiske paneler (svageste emner + effekt) har et tidsfilterSeneste time / I dag / 7 dage / Alt — så du kan måle ét bestemt kursus-hold. Filteret sendes som ?range= til endpointsne, der filtrerer på at-tidsstemplet server-side.

Tidsfilter på admin-statistikkerne

Adgang styres ved at whiteliste et brugernavn via miljøvariablen AIIQ_ADMINS (komma-separeret; default er admin). Log ind som den bruger, og /admin + streamen åbner sig — alle andre får 403.

Kør den

Kræver http-nu (brew install cablehead/tap/http-nu).

# AIIQ_ADMINS vælger hvilke(t) brugernavn(e) der kan se admin-dashboardet
AIIQ_ADMINS=ditbrugernavn http-nu :3001 --store ./store --dev -w app.nu

Åbn så http://localhost:3001 i en browser.

  • --store ./store aktiverer cross.stream-storen (brugere, sessioner, scores og events gemmes her)
  • --dev dropper Secure-flaget på cookies, så login virker over http://localhost
  • -w aktiverer hot-reload, så ændringer i app.nu slår igennem automatisk
  • AIIQ_ADMINS — komma-separeret liste af admin-brugernavne (default admin)
  • AIIQ_SET — id på default-spørgsmålssættet (default ai-basics)

Spørgsmålssæt (YAML)

Spørgsmål, svar og de uddybende mini-lektioner bor i udskiftelige YAML-filer i sets/. Hver fil er ét sæt; filnavnet uden .yaml er sættets id:

title: 'Mit kursus'
ui:                       # valgfrit: tilpas quizzens tekster til emnet
  title: 'Mit Kursus-IQ 🎓'    # forside-overskrift + browser-titel
  tagline: 'Underteksten på forsiden'
  courseTitle: '📚 Dit personlige kursus'
  footer: 'Den lille linje i bunden af forsiden'
questions:
  - q: 'Selve spørgsmålet?'
    options: ['Rigtigt svar', 'Forkert', 'Også forkert', 'Joke-svar']
    answer: 0            # index på det rigtige svar (frontend'en blander selv)
    right: 'Feedback ved rigtigt svar'
    wrong: 'Feedback ved forkert svar'
    topic: 'Kort emne-navn'   # bruges i kurset og admin-statistikken
    learn: 'Mini-lektionen der vises i det personlige kursus efter forkerte svar'

Valgfrit kan et sæt have sin egen ranks:-liste; ellers bruges standard-rang-titlerne. Alle sæt indlæses (og JSON-serialiseres) én gang ved opstart — med -w genindlæses de automatisk, når en YAML-fil ændres.

Vælg sæt med ?set=<id> på quizzens URL, fx http://localhost:3001/?set=prompt-teknik — det er hele delingen: ét link pr. kursushold/sæt. Uden parameter bruges AIIQ_SET (default ai-basics). sets/prompt-teknik.yaml er et lille kommenteret demo-sæt, der kan bruges som skabelon.

Byg dit eget sæt i browseren

/create.html kan alle med et login lave et nyt sæt uden at røre serveren: siden har en copy-paste-klar prompt (med hele YAML-formatet og et eksempel indbygget), man giver sin egen AI sammen med et emne — og en formular, hvor den AI-skabte YAML pastes ind. Serveren validerer sættet (struktur, felter, answer-indeks m.m.) med konkrete fejlbeskeder pr. spørgsmål, gemmer det i sets/ og svarer med et delbart link som /?set=90er-hits. Nye sæt virker med det samme — også uden -w.

Struktur

  • app.nu — http-nu-handler. Bruger router-modulet til at dispatche endpoints og serverer alt andet statisk fra public/. Data lever i cross.stream-topics (users, sessions, scores, events, misses).
  • sets/*.yaml — udskiftelige spørgsmålssæt (spørgsmål + svar + mini-lektioner).
  • public/index.html — selve quiz-appen (self-contained HTML/CSS/JS, ingen build-step).
  • public/admin.html — live admin-dashboardet (lytter på SSE-streamen).

Licens

MIT © Lennart Kiil

About

Gamificeret AI-videns-quiz bygget på http-nu (Nushell) — med humor, øjenguf og Web Audio

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages