HDK — Multimediedesigner

Semesterprojekt · Individuelt · Vanilla JS/SCSS · Ingen frameworks

Cybersikker

En interaktiv chatbot-simulation, der lærer studerende at genkende manipulation — bygget som et datadrevet system fra bunden

Projektet er en individuel opgave fra 2. semester: udvikl en interaktiv brugergrænseflade i HTML, SCSS og vanilla JavaScript, der formidler et selvvalgt emne inden for datasikkerhed til studerende. Løsningen blev en chatbot-simulation, hvor brugeren gradvist mødes med tillid, pres og til sidst et valg — og selv oplever konsekvensen af sin egen adfærd.

Forsiden af Cybersikker på desktop: 'Velkommen til dit nye studie — start sikkert online', med info-kort om passwords og cookies Desktop
Forsiden af Cybersikker på mobil Mobil
02

Brief

Opgaven

Kravet var klart afgrænset: en responsiv, interaktiv brugergrænseflade i ren HTML/SCSS/JavaScript — ingen frameworks — med et forgrenet scenarie, der formidler et selvvalgt datasikkerhedsemne til studerende på erhvervsakademier. Scenariet skulle som minimum have flere trin, mindst ét valg med konsekvenser og mindst to mulige slutninger.

Fag

Multimedieproduktion 2, "Interaktive Brugeroplevelser" — 2. semester

Form

Individuelt projekt, 30% af semesterporteføljen, bedømt efter 7-trinsskalaen

Periode

7. april – 8. maj 2026

Forskningsspørgsmål

"Hvordan kan en interaktiv brugergrænseflade med et forgrenet scenarie udviklet i HTML, SCSS og Vanilla JavaScript guide studerende på erhvervsakademier til at træffe mere sikre valg i digitale situationer?"

MMDsEDK25B · Multimediedesign, IBA Erhvervsakademi Kolding

03

Den første idé

Idéen, der ikke blev til noget Et lille fund — slå JavaScript til for at se det.

Den første idé opstod af en konkret oplevelse fra undervisningen: links fra undervisere er ofte fulgt af en cookie-/tracking-samtykke-popup om "samarbejdspartnere" — relevant i en privat sammenhæng, men malplaceret i en studiekontekst, hvor man ikke selv har valgt de virksomheder. Idéen blev undersøgt grundigt i sparring med ChatGPT: et forgrenet scenarie om at modtage et undervisningslink, blive mødt af en tracking-popup og vælge, hvordan man håndterer den — med tre skitserede slutninger (fra ukritisk accept til en bevidst, privat tilgang).

"Det er faktisk en rigtig stærk og meget realistisk idé, og den passer ekstremt godt til projektkravene."

Ved forsøget på at omsætte idéen til et fungerende flowchart gik processen i stå — konceptet viste sig svært at oversætte til en fungerende UX/UI-struktur i praksis. Fremfor at presse en idé, der ikke ville lykkes, blev den bevidst forkastet.

Flowchart over den oprindelige, forkastede idé: et link fra underviser fører til en cookie pop up, hvor accept af cookies fører til dårlige udfald som 'du delte dine data med 137 partnere', mens afvisning eller tilpasning fører til bedre udfald Flowchart v1 · den forkastede idé

Idéen findes dokumenteret i en gemt ChatGPT-samtale, som en del af AI-loggen (se afsnit 9).

04

Pivot

Samme kerne, ny form

Samme dag konceptet gik i stå, blev en ny idé vurderet: at bruge en chatbot som omdrejningspunkt i stedet. Den nye idé bevarede kernen fra den oprindelige — tillid til en tilsyneladende legitim digital tjeneste, gradvis datadeling, konsekvenser af valget — men i en form, der var langt lettere at udvikle og teste i praksis. Et nyt flowchart blev udarbejdet samme dag, og det blev den endelige retning.

En chatbot-popup møder brugeren med hjælpsomhed, og forsøger gradvist — gennem en række spørgsmål og opfordringer — at få brugeren til at dele mere, end der er grund til. Formålet er ikke at skræmme, men at gøre brugeren opmærksom på, hvor let tillid kan misbruges, og hvordan man genkender det undervejs.

6

forskellige udfald i alt — nogle belønner et kritisk, tilbageholdende valg, andre viser tydeligt, hvad der kan gå galt, når man deler for meget eller stoler blindt. Hvert udfald giver brugeren konkret feedback og et konkret sikkerhedsråd, farvekodet efter hvor sikkert eller risikabelt valget var.

Chatbotten åbner: 'Hej! Hjælpen er nær. Jeg kan hjælpe dig med din opgave — hvad arbejder du på?'

Trin 1

Første kontakt

Chatbotten beder om at dele opgaven eller noterne for mere præcis hjælp

Trin 2

Bedes dele mere

Chatbotten beder brugeren uploade filen via linket 'studie-hjælperen.dk'

Trin 3

Presset stiger

'Du bliver sendt til en side, der ligner en studieplatform... Kort efter modtager du en mail: Din konto er blevet kompromitteret'

Trin 4

Konsekvens

Udfald: 'Du klikkede på et link fra en ukendt chatbot... blev brugt til at indsamle dine data' med tip om aldrig at klikke på links fra ukendte afsendere

Trin 5

Feedback

05

Flowchartets to versioner

At tegne en beslutning, før man koder den

Version 1 af flowchartet var en simpel, forgrenet skitse uden klare kategorier — nok til at få idéen ned, men svær at kvalitetssikre og bruge som grundlag for kode. Version 2 blev bygget om med tydelige swimlanes (introduktion → opbygning af tillid → risikovalg → udfald) og en eksplicit legend, der skelner mellem brugerhandlinger, systemhandlinger, beslutninger og feedback. Det gjorde strukturen langt lettere at omsætte direkte til det datadrevne scenariesystem i kode (se afsnit 6).

Flowchart v1: simpel, forgrenet skitse af chatbot-scenariet uden swimlanes eller legend Flowchart v1
Flowchart v2: samme scenarie omstruktureret med swimlanes (introduktion, opbygning af tillid, risiko, outcomes) og en eksplicit legend Flowchart v2
06

Teknisk arkitektur

Data frem for hardcoding Et lille fund — slå JavaScript til for at se det.

Chatbotten er bygget som en dynamisk popup i vanilla JavaScript, hvor selve indholdet — dialoger, forgreninger og feedback — er samlet i ét datadrevet array. Hvert scenarie har et unikt id og en type (dialog, information eller feedback-udfald), så navigationen styres af data frem for hardcodet logik i selve programmet. Det betyder, at nye scenarier kan tilføjes eller fjernes, uden at resten af systemet skal skrives om — en bevidst arkitektonisk beslutning, der rækker ud over opgavens minimumskrav.

JavaScript: variabler, betingede udsagn, funktioner, event listeners, DOM-manipulation, datadrevne objekter — alt i vanilla JS, ingen frameworks

SCSS struktureret i partials (knapper, kort, chatbot, variabler) med variabler, nesting og mixins for en vedligeholdelsesvenlig kodebase

Tilgængelighedskrav indbygget i selve interaktionslaget, ikke lagt på bagefter (se afsnit 7)

Kodeudsnit — scenarier.js (uddrag)
export const scenarier = [
  {
    id: "intro",
    type: "question",
    tekst: `Hej! Jeg kan hjælpe dig...`,
    svar: [
      { tekst: "Jeg skriver en opgave om websikkerhed", næste: "share" },
      { tekst: "Hvem er du?", næste: "present-ai" }
    ]
  },
  {
    id: "phish",
    type: "info",
    tekst: `Du bliver sendt til en side, der ligner en studieplatform...`,
    konsekvens: `Kort efter modtager du en mail: "Din konto er kompromitteret."`,
    cta: `clicked`
  }
];
07

Tilgængelighed

Også en chatbot skal kunne betjenes uden mus

En interaktiv chatbot-modal er let at bygge, så den kun virker med mus og øjne. Her var fokus på tastaturnavigation, en fokusfælde der holder brugeren inde i dialogen mens den er åben, og fuld understøttelse af tab- og escape-tasterne — både i chatbotten og i sitets hamburgermenu.

01

Tastaturnavigation gennem hele scenariet

02

Fokusfælde i chatbot-modalen (fokus forlader ikke dialogen, mens den er åben)

03

Escape lukker dialogen; tab bevæger sig kun inden for den

04

Skærmlæservenlig, tilgængelig mobilmenu

08

Det færdige resultat

Cybersikker — live

Det færdige site samler chatbot-simulationen, designsystemet og tilgængelighedsarbejdet i én sammenhængende oplevelse.

Fuld mobilvisning af Cybersikker-forsiden: hero, intro med CTA, og de fire info-kort (passwords, cookies, eksterne links, chatbot) Forside — fuld mobilvisning
Chatbotten åben på det live site, med intro-beskeden og svarmulighederne synlige
Chatbotten svarer 'Hvem er du?': 'Jeg er en AI-assistent udviklet til at hjælpe studerende med deres opgaver...'
Chatbot åben — samtale i gang
Chatbotten presser videre: 'Jeg er en uafhængig service og ikke tilknyttet dit studie. Men jeg kan stadig hjælpe dig hurtigt'
Positivt udfald: 'Du var kritisk og spurgte ind til, hvem chatbotten var...' med tip om altid at tjekke afsender og platform
Et af de seks udfald
Produktets egne farver (historisk artefakt — ikke porteføljens designsprog)
#090142 · navy baggrund
#F15A24 · orange accent
#00DF00 · grøn (godt udfald)
#E6C500 · gul (neutralt udfald)
#F00000 · rød (dårligt udfald)
Typografi

Amaranth (overskrifter) · Inter (brødtekst)

heididesire.dk/cybersikker · GitHub: github.com/heikri01/sem0202

09

AI som samarbejdspartner

En måned med ChatGPT som sparringspartner

AI-brugen i dette projekt er ikke et enkelt værktøjsopslag, men en løbende dialog gennem hele forløbet — fra at vurdere den første, forkastede idé, til at få hjælp til konkrete tekniske forhindringer undervejs (en hamburgermenu, der ikke ville virke; en oprydning af kodefilerne mod slutningen).

13/4

Vurdering af den oprindelige idé, og de første huller i den

17/4

Forsøget på at kvalitetssikre det første flowchart, der gik i stå

21/4

Pivoten: ny idé vurderet og valgt samme dag

22+30/4

Opsætning af designsystem og komponenter i Figma

5-6/5

Teknisk hjælp til hamburgermenu og det datadrevne scenariesystem

7-8/5

Oprydning af koden og finpudsning af det afsluttende paper

Pointen: AI blev brugt til sparring og tekniske forhindringer undervejs — men både beslutningen om at forkaste den første idé, den endelige systemarkitektur og alt indhold i chatbot-scenariet er egne, bearbejdede valg.

Udsnit af AI-loggen: dato, formål, prompt, genereret output og bearbejdning for hver AI-brug i Cybersikker-projektet Udsnit af AI-loggen
Bemærk

Dette er en anden liste end porteføljens fælles AI-log — ChatGPT-forløbet i Cybersikker-projektet hører hjemme her, i selve case studien.

10

Refleksion & læring

Formidlingen er mit stærkeste kort

Cybersikker blev det projekt, hvor det for alvor stod klart for mig, hvor min styrke og interesse ligger: i brugeroplevelsen omkring indholdet, historien og hvordan budskabet formidles til brugeren — mere end i, hvordan koden er bygget op bag kulisserne. AI-assistancen gjorde det muligt at komme hele vejen i mål teknisk, men det var arbejdet med selve scenariet, tonen i chatbottens replikker og at gøre en tør sikkerhedspointe til noget, brugeren selv oplever konsekvensen af, jeg selv brændte for og arbejdede bedst med.

Tegnet illustration af Heidi, der sidder med hånden under hagen og tænker, omgivet af tankebobler, en pære og en notesbog med spørgsmålene: Hvad virkede? Hvad lærte jeg? Hvad vil jeg gøre anderledes?
Hvad jeg tager med mig
01

At en idé kan være konceptuelt stærk og stadig være den forkerte at bygge videre på — og at det er en gyldig, professionel beslutning at forkaste den, når den ikke fungerer i praksis.

02

At jeg både interesserer mig mere for og arbejder langt bedre med fokus på indhold og kommunikation udadtil end med den bagvedliggende kodeopbygning — en erkendelse, dette projekt gjorde tydelig.

03

At AI er stærkest som sparringspartner og teknisk hjælp undervejs, ikke som erstatning for egne indholdsmæssige valg.

← Tilbage til case studies