IdrettensGPT

Brief til nettleser-Claude

Dette er oppskriften en Claude i nettleseren skal jobbe etter når den ser på en øvelsesside og skal lage en animasjon til øvelsesbanken. Den beskriver formatet, målene, figurene, bevegelsesspråket og malen vi har godkjent.

Du trenger ikke lime inn hele teksten. Stå på øvelsessida, åpne Claude, og skriv: «Les adressen under, følg den, og lag en øvelse av sida jeg står på» – med adressen til denne siden. Da leser den oppskriften selv. Legg til dine egne rammer: alder, antall spillere, areal, utstyr, øktlengde, og om keeper skal være med.

Svaret limes inn i byggeren. Treffer det ikke formatet helt, oversetter byggeren det og skriver hva den endret.

# Brief til nettleser-Claude Alt under streken er oppskriften nettleser-Claude skal jobbe etter. Den er også publisert som side, bygd av denne fila: `brief.html` ved siden av `ny.html`. **Slik brukes den.** Stå på øvelsessida, åpne Claude i Chrome, og skriv: > Les `<adressen til brief.html>`, følg den, og lag en øvelse av sida jeg står på. Da leser den oppskriften selv, og du slipper å lime inn to sider tekst hver gang. Alternativet er å lime inn alt under streken – det virker like godt. Kopier adressen fra knappen på `brief.html`. Legg til dine egne rammer hver gang: alder, antall spillere, areal, utstyr du har, øktlengde, og om keeper skal være med. Du får tilbake to blokker: feltene til skjemaet, og bevegelsesdataene. Begge limes inn i `ny.html`. Treffer JSON-en ikke formatet helt, oversetter byggeren den og skriver hva den endret – men det er en sikkerhetsnett, ikke planen. --- **Om du har en eldre beskrivelse av dette formatet lenger opp i samtalen: forkast den.** Bare det som står under gjelder. Formatet er flatt, det finnes ingen `anim{}`, og bevegelser har `t` og `d` – ikke `t0` og `t1`. Du ser på en fotballøvelse. Lag **vår egen variant** av den, som data til en animasjonsmotor. Ikke en gjengivelse. **Opphavsrett, ikke til forhandling.** Ikke kopier tekst, bilder eller videoklipp fra sida. Kilden er inspirasjon og fagsjekk. Organiseringen, ordene og bevegelsene skal være våre egne. Skriv ingenting du ikke selv har formulert. **Gjør dette først:** les organisering og læringsmomenter, og **studer banediagrammet før du skriver noe**. Diagrammet avgjør tre ting teksten sjelden sier: hvilken vei målene står, hvor spillerne kommer inn fra, og **hvordan ballen settes i spill**. Det siste er det viktigste og lettest å gjette feil på: blir ballen levert *til* én spiller, eller slått ut i rommet slik at begge må løpe etter den? Det avgjør om øvelsen er angriper mot forsvarer, eller et kappløp der rollene bestemmes underveis. Er du i tvil, si det i stedet for å velge. Beskriv det for meg i én setning, slik at det er etterprøvbart — «to mål på kortsidene, to køer midt på langsida», for eksempel. Ligger det video der, se bevegelsesmønsteret. Gi meg så en kort, ærlig vurdering — hva fungerer for aldersgruppen, hva gjør det ikke, og hva du ville endret. To til fire setninger. Ikke smiger. **Så leverer du to blokker.** ## Blokk 1: feltene ``` Tittel: kort, med tankestrek der det passer Id: små bokstaver, tall og bindestrek, for eksempel 3v2-overtall Undertittel: 6–9 år · Avslutning · 4 spillere · 12 min Alder: 6–9 år Tema: ett stikkord, for eksempel Skåre mål Sekunder: som regel 18 Organisering: to til fire setninger. Hvordan det settes opp, og hva som skjer når ballen går ut Læringsmomenter: tre linjer, én setning hver, i imperativ til spilleren Variasjoner: tre linjer Keeper: kan velges? på som standard? ``` Skriv æ, ø og å som vanlige bokstaver. **Aldri** `å` eller `&aring;` — det ødelegger fila. ## Blokk 2: bevegelsesdata som JSON Ren JSON, ingen kommentarer, ingen `const`. Bare disse nøklene: ```json { "world": { "minX": -3, "maxX": 24, "minY": -2, "maxY": 23 }, "square": { "x0": 2, "y0": 0, "x1": 18, "y1": 18 }, "laneX": [], "goals": [{ "x": 10, "y": 0, "width": 3 }], "gates": [], "actors": [ { "id": "A1", "role": "attack", "start": [8, 18], "label": "1" }, { "id": "F", "role": "defend", "start": [10, 6], "label": "F" }, { "id": "K", "role": "keeper", "start": [10, 1.2], "label": "K", "only": "keeper" }, { "id": "Q1", "role": "attack", "start": [9, 21], "dim": true } ], "balls": [{ "id": "BALL", "start": [21.7, 11.1] }], "segments": [ { "a": "A1", "t": 1.8, "to": [9, 15], "k": "run", "trail": 1 }, { "a": "A1", "t": "+0", "to": [9, 10], "k": "dribble", "ball": "BALL", "trail": 1 }, { "a": "BALL", "t": "+0.2", "to": [10, 0.3], "k": "shot", "trail": 1, "goal": 1 } ], "resets": [{ "t": 7.4, "d": 1.2 }], "captions": [{ "t": 2.9, "d": 1.7, "text": "Gå bredt – skap plass" }], "legend": [["run", "Løp uten ball"], ["dribble", "Føring med ball"]] } ``` ### Banen Meter. `x` går på tvers, `y` **oppover** — `y = 0` er ved målet, høyere `y` er lenger fra. Legg noen meter luft i `world` rundt `square`, ellers klippes spillere som løper ut. `square` er sonen, med kjegle i hvert hjørne. `laneX` er stiplede korridorer inne i sonen. `gates` er porter: `{ "x0": 2, "x1": 4, "y": 16 }`. `goals` er mål med nett, og de kan stå i alle fire retninger. Nettet skal alltid peke **ut** av banen: ```json { "x": 10, "y": 0, "width": 3 } nede { "x": 10, "y": 24, "width": 3, "dir": "opp" } oppe { "x": 5, "y": 10, "width": 5, "aks": "y", "dir": "venstre" } til venstre { "x": 27, "y": 10, "width": 5, "aks": "y", "dir": "hoyre" } til høyre ``` Står målene på kortsidene, blir sonen liggende — og det passer lerretet bedre enn en stående sone. Til løyper og poster finnes tre byggeklosser til: ```json "cones": [[6, 10], [7, 10], [8, 10], [21, 10]], "lines": [{ "a": [6, 2.4], "b": [6, 12.6], "color": "#FFFFFF", "width": 0.13, "alpha": 0.5 }], "boxes": [{ "x": 3.4, "y": 3.4, "w": 1.4, "h": 1.05 }] ``` `cones` er frie kjegler, til slalåm og vendepunkt. `lines` er en strek under alt annet — en hvit banestrek gir løypa struktur, akkurat som på en ekte bane. `boxes` er en åpen beholder på bakken. ### Figurene `role` styrer bare fargen. `attack` og `defend` når øvelsen har faste roller, `lag1` og `lag2` når begge spillerne er både angriper og forsvarer — samme to farger, men et navn som stemmer. `server` er treneren, `keeper` er keeper. Merk figurene `A` og `B` i en symmetrisk øvelse, ikke `A` og `F`. `label` er tegnet inni sirkelen. `dim: true` er køen som venter og ikke beveger seg. `only: "keeper"` betyr at figuren bare finnes i keeper-varianten. ### Bevegelsene — dette er det viktigste Bare `a` og `to` er påkrevd. **Ikke skriv `f`.** Startpunktet arves fra der figuren står, og skriver du det selv blir det bare en feilkilde. - `t` er sekunder, eller `"+0.3"` som betyr 0,3 s etter forrige bevegelse for samme figur — eller etter linjen over hvis figuren ikke har flyttet seg før. Bruk relativ tid der du kan; da kan én bevegelse flyttes uten å regne om alt - `d` kan utelates. Da regnes den av avstand og type: `run` 4,5 m/s, `jog` 2,6, `dribble` 3,0, `pass` 9,0, `shot` 14,0. Skriv den bare når tempoet er et poeng, for eksempel en bevisst treg vending - `k` er `run`, `jog`, `dribble`, `pass` eller `shot` - `ball": "BALL"` fester ballen til føreren gjennom bevegelsen. Bruk det på alle føringer. Pasninger og skudd skrives som egne ballsegmenter - `via": [x, y]` bøyer banen — til overlapp, buede løp og skudd rundt en forsvarer - `lift`: 0–1 på et ballsegment gjør ballen større midt i banen. Sett ovenfra leses høyde som størrelse. Bruk det på vipp, lobb og innlegg - `ballOffset` overstyrer de 0,6 m ballen ligger foran føreren. I en tett slalåm med én meter mellom kjeglene må den ned til 0,3, ellers svinger ballen en meter utenfor spilleren - `trail: 1` tegner pila. `win: 1` gjør den grønn, for det som skjer etter gjenvinning. `rot: 1` er rotasjon eller bytte. `goal: 1` eller `gate: 1` på det avsluttende segmentet gir en ring som blinker ### Regler som må holde - Animasjonen er rundt 18 sekunder og viser to eller tre repetisjoner, gjerne med en variasjon mot slutten — for eksempel at forsvareren vinner ballen - Legg en `reset` mellom repetisjonene og **en til slutt**, ellers hopper det når animasjonen looper. En reset glir alle tilbake til startpunktene - `duration` må dekke siste bevegelse og siste reset - `captions` skal ikke overlappe i tid. Tre til fem stykker, korte, i imperativ - `legend` skal bare inneholde typer som faktisk brukes - alle `a` i segmentene må finnes i `actors` eller `balls` ### Feil som går igjen Dette er dialekten som pleier å komme i stedet for vår. Venstre kolonne er feil, høyre er vår: | I stedet for | Skriv | | --- | --- | | `{ "anim": { ... } }` | alt på toppnivå, ingen innpakning | | `"t0": 1.7, "t1": 3.6` | `"t": 1.7, "d": 1.9` – starttid og varighet | | `"from": [3, 4]` | ingenting. `f` arves fra der figuren står | | `"kind": "pass"` | `"k": "pass"` | | `{ "b": "b1", ... }` | `{ "a": "b1", ... }` – baller og spillere er samme språk | | `{ "b": "b1", "carry": "A1" }` | `"ball": "b1"` på A1s eget segment | | `"team": "attack"` | `"role": "attack"` | | `"team": "coach"` | `"role": "server"` | | `"zones": [{ "type": "rect", ... }]` | `square`, `lines` eller `boxes` | | `"goals": [{ "w": 3, "depth": 1.2, "dir": "left" }]` | `{ "width": 3, "aks": "y", "dir": "venstre" }` | | `"flashes": [...]` | `"goal": 1` på det avsluttende segmentet | | `"ease"`, `"trailFade"` | ingenting. Motoren mykner og toner ut selv | | `"onlyKeeper": true` | `"only": "keeper"` | | tegnforklaring med farger | `["dribble", "Føring med ball"]` – type, ikke farge | | egen `"color"` på en figur | `role` velger fargen. Paletten ligger i motoren | Retningene er norske: `venstre`, `hoyre`, `opp`. Nedover er standard og skrives ikke. Står målet til side, må `aks: "y"` med, ellers legges det ned på banen. ### Ikke gjør dette - ikke skriv `f` i segmentene - ikke skriv escape-koder i noen tekst - ikke pakk noe i `anim: { ... }` — alt ligger på toppnivå - ikke bruk `const CONFIG =` eller kommentarer i JSON-en - ikke kopier formuleringer fra kilden --- # Malen: slik er «2 mot 1 – mot ett mål» bygd Dette er den øvelsen oppsettet, animasjonen og ordlyden er godkjent på. Tallene under er målt fra fila, ikke skjønn. Treffer du dem, ligner resultatet. ## Ramme `world` er 27 × 25 m rundt en sone på 16 × 18 m. Altså fem meter luft på hver side, fem over og to under målet — spillere som løper ut blir ikke klippet. Målet er 3 m bredt, midt på kortsiden. ## Figurer To angripere, én forsvarer, én server utenfor sonen, keeper som kan velges — og **tre blasse figurer i kø** (`dim: true`) utenfor sonen. Køen er et lite grep som gjør stor forskjell: den viser at dette er en organisert øvelse med flere som venter, ikke fire spillere alene på en bane. ## Dramaturgi: 18 sekunder, tre repetisjoner som blir kortere | | Tid | Hva som skjer | | --- | --- | --- | | Oppstilling | 0 – 1,8 s | ingen beveger seg. Sone, kjegler, mål og spillere toner inn | | Repetisjon 1 | 1,8 – 7,0 s | server setter i gang, fører, pasning til medspiller, avslutning. Full lengde, viser grunnideen | | Reset | 7,4 s (1,2 s) | alle glir tilbake | | Repetisjon 2 | 8,8 – 12,7 s | kortere. Ballføreren går selv og skyter — samme idé, annen løsning | | Reset | 13,0 s (0,4 s) | kort, tempoet øker | | Repetisjon 3 | 13,4 – 16,2 s | kortest. **Forsvareren vinner ballen og kontrer** – variasjonen | | Reset | 16,4 s (1,2 s) | tilbake til start før animasjonen looper | Poenget: hver repetisjon er kortere enn den forrige, og den siste er en variasjon der det går motsatt vei. Det gjør at atten sekunder føles som en økt, ikke en løkke. **Legg alltid en reset helt til slutt.** **Relativ tid kjeder fra samme figur.** Skriver du `"t": "+0.3"` på et ballsegment rett etter en spillers løp, kjeder det fra **ballens** forrige bevegelse hvis ballen har hatt en — ikke fra linja over. I en sekvens der spiller og ball veksler, som å hente en ball og prøve igjen, blir rekkefølgen stokket. Bruk absolutte tider der. **Atten sekunder holder bare når hver repetisjon har én eier av ballen.** Skal en repetisjon vise et eierskifte — at den som taper kappløpet jager, vinner ballen og går motsatt vei — trenger den seks til åtte sekunder alene. Da settes varigheten etter innholdet, ikke etter malen. «1 mot 1 – begge veier» er 27 sekunder av nettopp den grunnen. Det er innholdet som bestemmer, ikke tallet. **Vis eierskiftet, ikke bare utfallet.** At én vinner ballen og skårer, og så den andre i neste repetisjon, er to separate historier. Det som viser hva øvelsen handler om, er at duellen snur *midt i* en repetisjon. ## Tempo | Bevegelse | Varighet | | --- | --- | | pasning | 0,6 – 0,8 s | | føring, ett trekk | 0,9 – 1,8 s | | skudd | 0,5 – 0,6 s | | forsvarer som rykker | 1,3 – 1,4 s | | innhentingsløp | 1,1 – 1,6 s | | takling som vinner ballen | 0,35 – 0,5 s | | keeperens steg | 0,4 – 0,5 s | Ballen har `pass` inn og `shot` ut som egne segmenter. Alt annet er `dribble` med `ball` på førerens segment. ## Tekstene Fem stykker, 19 til 37 tegn. Varighet 1,3 til 1,9 sekunder. Aldri overlappende, og med luft imellom — de skal leses, ikke skummes. ``` 2,9 s Gå bredt – skap plass til ballføreren 4,6 s Presses du? Spill diagonalt 7,5 s Nye inn med én gang 9,9 s Har du plass? Ta med ballen og skyt 14,9 s Vinner du ballen – kontre motsatt vei ``` Legg merke til formen: **to av fem er spørsmål**, og de kommer i det øyeblikket spilleren faktisk må velge. Resten er imperativ, rettet til spilleren, aldri til treneren. Ingen fagord. Én tekst per repetisjon, pluss en om organiseringen. ## Læringsmomentene Tre stykker, seks til ti ord, og de dekker tre roller — én hver: ``` Ta med ballen fremover og avslutt når du ser målet. (ballføreren) Uten ball: gå bredt og fremover så ballføreren får plass. (medspilleren) Vinner du ballen: kontre motsatt vei. (forsvareren) ``` Variasjonene handler om hva **treneren** kan skru på — igangsetting, kraft og vinkel, egne mål å kontre mot. Tre stykker, én setning hver. Undertittelen er `alder · tema`, eventuelt med antall og minutter.