- name
- web
- description
- Build and verify interactive HTML experiences in Web Studio's live, sandboxed preview.
# Web Studio
`index.html` is the entry point. Local JS, CSS, images and ES modules work through the shared viewer;
use relative URLs. No bundler is required. Prefer local assets for a reliable first open.
Field's starter uses WebGL2 with a Canvas 2D fallback. Its geometry, palette and controls are all
editable. Keep GPU resources and geometry buffers reusable; coalesce continuous updates in rAF.
Pause animation when hidden and respect reduced motion. Controls must still work when paused.
A new visual direction can replace the starter entirely when that serves the user's request.
## Verify the experience
Keep `proof.json` aligned with the current page. Each action names a CSS `selector`, followed by
`click: true`, `fill` or `select`; assertions use exact `text` or
`attribute: {"name":"aria-pressed","value":"true"}`. Include a state change and its meaningful result.
```sh
node "$WEB_SKILLS/web/scripts/screenshot.mjs" "$HARNESS_WORKSPACE/index.html"
node "$WEB_SKILLS/web/scripts/perf.mjs" "$HARNESS_WORKSPACE/index.html"
```
The proof runs the real sandboxed HTTP viewer, checks the actions and browser errors, saves
`.harness/last.png` and a dependency-hashed `browser-proof.json`, and refreshes the verdict.
Inspect the image and test a narrow viewport as well as desktop.
The performance probe drives those controls while measuring rAF delays and long tasks, rather than
measuring an idle page. Target ≥55 fps and <2% slow frames. Record the hardware/renderer and dataset;
a software WebGL renderer is not a measurement of the user's GPU. `PLAYWRIGHT_CHANNEL=chrome` can
measure installed Chrome. Do not label an unmeasured or failing page “60 fps.”
Helpers need Playwright plus Chromium, installed in the shared isolated-web-viewer package or addressed by
`PLAYWRIGHT_MODULE` (absolute path to `playwright/index.mjs`). Missing tooling is a failed proof,
not permission to report success. The preview itself needs only Node 20+.
Auf GitHub ansehen