{"slug": "show-hn-vanilla-web-skill-to-replace-all-javascript-frameworks", "title": "Show HN: Vanilla-web skill to replace all JavaScript frameworks", "summary": "A developer released a publicly reviewed \"skill\" for coding agents that prescribes building web apps with only HTML, CSS and JavaScript — no framework, no bundler and no server logic. The skill was produced agentically: a coordinating agent ran five parallel research agents, a report writer and five reference writers, with a human reviewing and steering between rounds, and every rule in its references carries the link it was derived from. Verification against the example app with both HTML validators, ESLint, Prettier, tsc, a shell test, and axe plus element tests in Chromium, Firefox and WebKit surfaced defects that were corrected, including lazy-loaded island sheets shifting layout, an inline style breaking a strict CSP, a full list re-render dropping keyboard focus, and a form submitted before upgrade losing its input in 4 of 16 runs.", "body_md": "A styleguide skill for building web apps with HTML, CSS and JavaScript only: no framework, no bundler, no server logic. It targets coding agents, but the conventions are the same ones a human team would adopt.\n\n**This skill was developed agentically.** A coordinating agent ran five\nparallel research agents, a report writer, and five reference writers,\nwith a human reviewing and steering between rounds. The chain of evidence\nis kept: every rule in `references/` carries the link it was derived from.\n\nIt was manually reviewed though. Look here is a speling error as proof.\n\n1. **Research.** Five agents each took one subtopic: semantic HTML and\naccessibility, custom elements, module architecture, lazy loading and\nfetching, and state, events, routing and security. They wrote notes\nwith inline citations and flagged gaps and conflicting sources\ninstead of resolving them silently.\n2. **Synthesis.** One agent merged the notes into a report, keeping only\nsourced claims. The human read a summary and challenged it.\n3. **Decisions.** The human set the premises below. The coordinating\nagent recorded them so later drafting could not re-argue them.\n4. **Style study.** The coordinator read the Agent Skills specification,\nAnthropic's skill-authoring guide and this repository's`prompting` standard. It distilled them into rules: one imperative rule per line\nwith its reason, one term per concept, a default plus an escape\nhatch, no dates in the body, and references one level deep.\n5. **Writing.** The coordinator wrote`SKILL.md` , this README and the\ndocument-head reference. Five agents wrote the other references from\nthe notes, under a shared terms table.\n6. **Verification.** The coordinator built the example app and ran every\ngate the skill prescribes: both HTML validators, ESLint, Prettier,\ntsc, the shell test, and axe plus element tests in Chromium, Firefox\nand WebKit. The run found defects in the first draft, and the skill\nwas corrected:\n  - Island sheets shipped with lazy modules shifted layout.\n  - An inline `<style>` in a declared root broke the strict CSP.\n  - A full list re-render dropped keyboard focus.\n  - A form submitted before upgrade lost its input in 4 of 16 runs.\n  - `@scope` broke the skill's own widely-available rule.\n  - A throttled benchmark showed an `@import` chain costing a round\ntrip before first paint; stylesheets are now linked in parallel.\n\n- **Document-first, not server-rendered.** The initial HTML is a static\nfile on any host. The host's only contract is MIME types, HTTP/2,\ncompression and cache headers. Per-request personalisation, if ever\nneeded, is an additive layer.\n- **Multi-document, not single-page.** One`.html` per purpose, with its\nown head as a manifest of that purpose. HTML has no include mechanism\nafter four attempts since 2011; the skill leans into that instead of\nfighting it.\n- **HTML may repeat; code may not.** Markup is content and may be\nduplicated, guarded by an equality test. Behaviour and presentation\nlive once in referenced files.\n- **HTML-first components.** Custom elements wrap existing markup in\nlight DOM by default. Shadow DOM is reserved for self-contained widgets.\n- **Baseline as the dependency line.** Widely available APIs are\ndependencies; newly available ones are feature-tested enhancements.\nThe one dated file,`references/platform-status.md` , says which is which.\n\nThe browser is the framework. Every convention here exists to keep the pieces the platform already provides composable: a document that reads before scripts run, an element that cleans up after itself, a store that is the only writer, a head that says what the page is for. When the platform lacks a primitive, the skill prescribes one hand-written idiom rather than a library, and says what it costs.\n\nThe research notes and report are not shipped with the skill. Primary sources the references cite most:\n\n- [HTML Living Standard](https://html.spec.whatwg.org/multipage/) and[MDN Web Docs](https://developer.mozilla.org/)\n- [web-features explorer](https://web-platform-dx.github.io/web-features-explorer/) for Baseline status\n- [W3C ARIA Authoring Practices](https://www.w3.org/WAI/ARIA/apg/) ,[ARIA in HTML](https://www.w3.org/TR/html-aria/) ,[WCAG 2.2](https://www.w3.org/WAI/WCAG22/Understanding/)\n- [web.dev custom element best practices](https://web.dev/articles/custom-elements-best-practices) and[declarative shadow DOM](https://web.dev/articles/declarative-shadow-dom)\n- [open-wc](https://open-wc.org/guides/) and[Modern Web buildless guides](https://modern-web.dev/guides/going-buildless/)\n- HTML web components writing by\n[Jeremy Keith](https://adactio.com/journal/20618) ,[Jim Nielsen](https://blog.jim-nielsen.com/2023/html-web-components/) ,[Eric Meyer](https://meyerweb.com/eric/thoughts/2023/11/01/blinded-by-the-light-dom/) ,[Chris Ferdinandi](https://gomakethings.com/html-web-components/) ,[Zach Leatherman](https://www.zachleat.com/web/a-taxonomy-of-web-component-types/) ,[Lea Verou](https://lea.verou.me/blog/2024/wcs-vs-frameworks/)\n- [Nolan Lawson on shadow DOM and ARIA](https://nolanlawson.com/2022/11/28/shadow-dom-and-accessibility-the-trouble-with-aria/)\n- [whatwg/html#2791](https://github.com/whatwg/html/issues/2791) and[WICG declarative partial updates](https://github.com/WICG/declarative-partial-updates) for the state of HTML includes\n- [Agent Skills specification](https://agentskills.io/specification) and[Anthropic skill authoring best practices](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices) for the skill's own form\n\nInstall with the repository's other skills, or copy the `vanilla-web`\ndirectory into your agent's skills location. Read `SKILL.md` first; it\nis under 200 lines. Open a reference only when a task touches its topic.\nThe example app under `assets/example-app` is a runnable three-document\ntree you can serve with any static file server.", "url": "https://wpnews.pro/news/show-hn-vanilla-web-skill-to-replace-all-javascript-frameworks", "canonical_source": "https://github.com/baalimago/skills/tree/main/skills/vanilla-web", "published_at": "2026-11-03 18:01:26+00:00", "updated_at": "2026-11-03 18:22:20.178312+00:00", "lang": "en", "topics": ["developer-tools", "ai-agents", "ai-tools"], "entities": ["Anthropic", "Agent Skills", "HTML Living Standard", "MDN Web Docs", "Chromium", "Firefox", "WebKit", "ESLint"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/show-hn-vanilla-web-skill-to-replace-all-javascript-frameworks", "markdown": "https://wpnews.pro/news/show-hn-vanilla-web-skill-to-replace-all-javascript-frameworks.md", "text": "https://wpnews.pro/news/show-hn-vanilla-web-skill-to-replace-all-javascript-frameworks.txt", "jsonld": "https://wpnews.pro/news/show-hn-vanilla-web-skill-to-replace-all-javascript-frameworks.jsonld"}}