The javascript-web-app profile covers browser applications
built from owned HTML, CSS, and JavaScript. The default posture is no-build:
source files are served directly by a host app or static file server until a
package manager, bundler, or transpiler is clearly justified.
javascript-web-apppython-js-appReturns the generic no-build browser JavaScript and CSS profile.
Returns the Python-served browser application profile.
Renders the generic browser profile for human or machine use.
Renders the Python-served browser app profile for human or machine use.
A build step is optional. Projects may use native browser JavaScript,
explicit script load order, ES modules, or manifest-ordered IIFEs. If a Node
toolchain is introduced, package.json and its lockfile must be
committed and CI must run the declared lint/test/build scripts.
Import maps, direct ES modules, and modern CSS are preferred when they keep source inspectable in the browser. Build tools are allowed when they remove real complexity, such as package dependency resolution, reusable TypeScript libraries, generated assets, or browser automation infrastructure.
src/.vendor/, lib/, _build/, or
node_modules/.
JavaScript profiles require a canonical JavaScript standard design doc.
Repositories may keep the legacy root page
docs/design/javascript-standard.html or use the foldered
design-doc layout docs/design/standards/javascript.html.
Projects with another deliberate layout may configure the canonical path:
[documentation.standard_docs]
javascript = "docs/design/standards/javascript.html"
jsconfig.json or
tsconfig.json with allowJs,
checkJs, and noEmit, or put
// @ts-check at the top of owned JavaScript modules.
node:test runner and
node --test for dependency-free module tests. Rack can
orchestrate those commands through a Python signoff stratum.
Web Components means the platform custom element, Shadow DOM, template, and
slot APIs. The standard is to build owned wn-* primitives when a
UI pattern is reused or needs lifecycle, accessibility, encapsulated DOM, or
a stable event contract.
<dialog> and the
Popover API where they fit. Wrap repeated patterns such as dialogs, toast
regions, property rows, toolbar buttons, inspectors, and panel shells.
part names for deliberate
styling hooks.
bubbles: true and composed: true when consumers
outside the component need to observe them.
Agents changing UI must open the app in a browser, inspect the rendered state, and use screenshots or DOM checks to verify that important controls, canvas content, panels, dialogs, and responsive states are not broken. CI should still test the underlying algorithms, contracts, and generated files without depending on human visual judgment.
Repositories must expose simple verbs even when the underlying shell differs.
The required verbs are install, update,
build, test, and signoff. Optional
verbs include clean, dev, and run.
Existing repositories may keep PowerShell, shell, Make, package scripts, or Python wrappers. New cross-platform repositories should prefer a small Python or uv-backed orchestrator with thin platform wrappers when native shell behavior diverges.
No-build projects should provide dependency-free
scripts/js_hygiene.py and scripts/css_hygiene.py
ratchets, plus Rack L99 tests that call them. Projects with Node tooling may
satisfy the same role through committed package scripts and lockfiles.
Web signoff should include type checking, CSS token hygiene, JS/CSS hygiene, deterministic module tests for non-DOM logic, browser smoke where feasible, Python API contract tests for served apps, and release validation for generated standalone HTML bundles.