About web-components
web-components is a set of implementation guidelines for building or refactoring interfaces with plain HTML, CSS, and JavaScript. It emphasizes modular ESM, focused functions, and avoiding framework dependencies.
Key features
- 01Use only HTML, CSS, and JavaScript
- 02Use modular ESM and avoid global state
- 03Follow file structure and naming conventions
- 04Apply semantic HTML and modern DOM APIs
- 05Use the included CSS and JavaScript guidelines
Use cases
- 01Build a native web interface from scratch
- 02Create modals, tabs, or dropdowns
- 03Remove framework dependencies from a project
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ manzdev/ web-core --skill web-componentsAfter installing, type/web-componentsin Claude Code to confirm it loaded.
Details
From the project READMEVanilla Web (HTML/CSS/JS)
Required constraints (non-negotiables)
- HTML/CSS/JS only (no framework)
- Use modular JS (ESM)
- Prefer small, focused functions and pure utilities
- Avoid global state
When to activate this skill (user asks for)
- Vanilla JS / plain HTML/CSS/JS / static page / efficient
- no framework, no React/Angular/Vue
- small UI components (modals, tabs, dropdown, form validation) built directly in the DOM
- refactors to remove framework dependencies or reduce JS complexity
Output expectations
- Avoid missing imports or paths
- Avoid TODO placeholders
- Keep changes small, testable, and incremental
Implementation workflow
1) Structure
-
Prefer this structure:
src/source codepublic/static files (fonts, images, etc...)index.htmlmain entrypointmain.jsmain JS entrypointsrc/css/global.cssglobal stylessrc/components/webcomponents foldersrc/modules/reusable and utilities modules JS
-
Each module does one thing (DOM wiring, module state, rendering, API, utilities...)
-
Avoid global mutable state. If state is needed, encapsulate it in a module and expose minimal functions.
-
Use always this name convention for filenames:
src/components/components should use PascalCase. Class name should match with filename. Same with css files.src/modules/modules should use camelCase. Function names should match with filename.
2) HTML guidelines
- Use semantic tags (
<header>,<footer>,<article>,<main>,<nav>,<button>,<dialog>, etc... where applicable) - Avoid soup of divs (reduce to essential elements)
3) DOM guidelines
- Use
CSSStyleSheetAPI for create styles instead string templates. - Prefer
importattributeswithovernew CSSStyleSheet(). Prefernew CSSStyleSheet()over plain string templates. - Use
querySelector*()API insteadgetElement*()API. - Use
setHTMLUnsafe()/getHTML()insteadinnerHTML. - Prefer modern DOM API for add elements:
append(),prepend(),before(),after(). Else,insertAdjacent*()over old APIappendChild().
4) CSS guidelines
- Prefer simple, predictable naming
- Prefer
@scoperules instead BEM naming - Use CSS variables for theme primitives and very common reusable data
- Keep layout responsive by default (flex/grid)
- Prefer
:where()low specificity over!important - Use CSS nesting for group related-block classes
5) Javascript guidelines
- Use
type="module"and explicit imports/exports - Prefer naming imports over default imports
- Prefer pure utilities and small functions
- Use event delegation for lists/dynamics UIs
- Handle errors explicity (network failures, missing DOM nodes, invalid inputs)
- Create small class methods for split logic
- Prefix code string template with
/* html */,/* css */or/* svg */
Verification checklist
When finishing work, ensure:
- No console errors/warnings caused by changes
- All referenced assets resolve (paths/imports)
- Review the imported items to check if they are being used
- Feature works with keyboard and without requiring a framework runtime
Suggested scripts
- Add a
npm run devusingservorlocal server development
Comments
Markdown supported