{"id":51013991,"url":"https://github.com/code-dot-org/ai-literacy-oceans","last_synced_at":"2026-06-21T07:31:51.969Z","repository":{"id":362151816,"uuid":"1257615983","full_name":"code-dot-org/ai-literacy-oceans","owner":"code-dot-org","description":null,"archived":false,"fork":false,"pushed_at":"2026-06-02T23:14:02.000Z","size":107,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-02T23:15:46.146Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/code-dot-org.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-02T21:08:13.000Z","updated_at":"2026-06-02T23:14:06.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/code-dot-org/ai-literacy-oceans","commit_stats":null,"previous_names":["code-dot-org/ai-literacy-oceans"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/code-dot-org/ai-literacy-oceans","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code-dot-org%2Fai-literacy-oceans","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code-dot-org%2Fai-literacy-oceans/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code-dot-org%2Fai-literacy-oceans/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code-dot-org%2Fai-literacy-oceans/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/code-dot-org","download_url":"https://codeload.github.com/code-dot-org/ai-literacy-oceans/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code-dot-org%2Fai-literacy-oceans/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34601661,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-21T02:00:05.568Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-21T07:31:50.199Z","updated_at":"2026-06-21T07:31:51.952Z","avatar_url":"https://github.com/code-dot-org.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ai-literacy-oceans\n\nA self-contained, embeddable web app that sequences the five interactive modes of the [AI for Oceans](https://studio.code.org/s/oceans) lab for the EU AI Literacy Framework.\n\n## Embedding\n\n```html\n\u003c!-- padding-top = 9/16 canvas + 52px progress bar --\u003e\n\u003cdiv style=\"position:relative; width:100%; padding-top:calc(56.25% + 32px);\"\u003e\n  \u003ciframe\n    src=\"https://code-dot-org.github.io/ai-literacy-oceans/\"\n    style=\"position:absolute; top:0; left:0; width:100%; height:100%; border:none;\"\n    title=\"AI for Oceans\"\u003e\n  \u003c/iframe\u003e\n\u003c/div\u003e\n```\n\nThe canvas is always 16:9. The progress bar sits above it — the iframe is taller than 16:9 by the bar's height (~32px).\nThe iframe container should be at least **1024px wide** so the 16:9 canvas reaches 576px height,\nwhich is OceansLab's designed canvas height. Below 1024px the word-selection scene clips.\n\n### Contract\n\n- **Self-contained**: no `postMessage`, no URL parameters, no completion signal. The host page owns all surrounding UI.\n- **Locale auto-detection**: `navigator.language` is mapped to the nearest of the 24 official EU languages; English is the fallback. No in-app picker.\n- **No network calls for translations**: EU strings are baked into the bundle.\n- **TTS is best-effort**: only `en` and `it` have voice data; other EU locales fall back to browser voices or stay silent.\n\n## Sequence\n\nThe app runs five lab modes in curriculum order, advancing on the lab's Continue callback:\n\n```\nfishvtrash → creaturesvtrashdemo → creaturesvtrash → short → long → play-again\n```\n\nAfter the final mode a \"Play Again\" button restarts from `fishvtrash`.\n\n## Development\n\n```bash\n# Install (requires read:packages token for @code-dot-org scope)\nnpm ci\n\n# Dev server\nnpm run dev\n\n# Build\nnpm run build\n\n# Preview the subpath build\nnpm run preview\n```\n\n### GitHub Packages auth\n\nThe `@code-dot-org/oceans-lab` package lives on GitHub Packages under the `code-dot-org` org. In CI the deploy workflow uses `GITHUB_TOKEN` (automatic, no secret needed). Locally you need a token with `read:packages`:\n\n```bash\necho \"//npm.pkg.github.com/:_authToken=YOUR_TOKEN\" \u003e\u003e ~/.npmrc\n```\n\n## Testing\n\n```bash\n# Run e2e tests locally (starts dev server automatically)\nnpm run test:ui\n\n# CI mode (used in the deploy workflow)\nnpm run test:ui:ci\n```\n\n## Translations\n\nEU locale strings live in `i18n/\u003clocale\u003e.json`. They were generated from the `@code-dot-org/oceans-lab` English catalog (`@code-dot-org/oceans-lab/i18n`) and committed once. To regenerate after an English catalog update:\n\n1. `npm show @code-dot-org/oceans-lab` — check the version.\n2. Import the catalog: `import catalog from '@code-dot-org/oceans-lab/i18n'`.\n3. Regenerate each locale JSON preserving `{var}` placeholders and ICU plural syntax.\n4. Commit under `i18n/\u003clocale\u003e.json`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcode-dot-org%2Fai-literacy-oceans","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcode-dot-org%2Fai-literacy-oceans","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcode-dot-org%2Fai-literacy-oceans/lists"}