diff --git a/README.ar.md b/README.ar.md
index faa26d7..73403a0 100644
--- a/README.ar.md
+++ b/README.ar.md
@@ -29,6 +29,34 @@
---
+## 🚀 التثبيت والبدء السريع
+
+اختر طريقة التثبيت المناسبة لمشروعك:
+
+### الخيار (أ): عبر TidyFactor CLI الرسمي (الموصى به)
+التثبيت الفوري دون الحاجة لتثبيت الأداة عالمياً في بيئة عملك النشطة:
+```bash
+npx @tidyfactor/cli add js
+```
+*أو في حال كانت الأداة مثبتة لديك عالمياً (`npm i -g @tidyfactor/cli`):*
+```bash
+tidyfactor add js
+```
+
+### الخيار (ب): عبر معيار مهارات الوكلاء المفتوح (skills.sh)
+التثبيت العالمي المتوافق مع كافة بيئات الوكلاء ومحررات الذكاء الاصطناعي (Antigravity, Cursor, Claude Code, Windsurf, Codex):
+```bash
+npx skills add tidyfactor/js
+```
+
+### الخيار (ج): التثبيت المباشر الفردي عبر NPM
+تشغيل مثبت المهارة المستقل مباشرة مع تجاوز الذاكرة المخبأة وضمان أحدث إصدار:
+```bash
+npx @tidyfactor/js@latest
+```
+
+---
+
## 🏛️ معمارية منظومة TidyFactor
**منظومة TidyFactor** هي بيئة معمارية برمجية مفتوحة وحزم مهارات لوكلاء الذكاء الاصطناعي قائمة على الفصل التام للمسؤوليات عبر دورة حياة المنتجات:
diff --git a/README.md b/README.md
index 57c2167..21a99f3 100644
--- a/README.md
+++ b/README.md
@@ -52,6 +52,34 @@ Built and maintained by **alwkala** — github.com/alwkala
Licensed under the Apache License 2.0.
+---
+
+## 🚀 Installation & Quick Start
+
+Choose your preferred installation method:
+
+### Option A: Via TidyFactor CLI (Recommended)
+Install directly using the official ecosystem package runner into your active workspace:
+```bash
+npx @tidyfactor/cli add js
+```
+*Or if you have the CLI installed globally (`npm i -g @tidyfactor/cli`):*
+```bash
+tidyfactor add js
+```
+
+### Option B: Via Open Agent Skills Ecosystem (skills.sh / Vercel Labs)
+Install using the universal multi-agent standard across all supported IDEs (Cursor, Antigravity, Claude Code, Windsurf, Trae, Codex):
+```bash
+npx skills add tidyfactor/js
+```
+
+### Option C: Standalone Zero-Dependency Runner (NPM Direct)
+Run the dedicated skill installer directly with automatic cache invalidation:
+```bash
+npx @tidyfactor/js@latest
+```
+
---
## 🏛️ TidyFactor Ecosystem Architecture
diff --git a/dist/tidyfactor-js.skill b/dist/tidyfactor-js.skill
deleted file mode 100644
index 3bb6548..0000000
Binary files a/dist/tidyfactor-js.skill and /dev/null differ
diff --git a/dist/tidyfactor-js/.tidyfactor b/dist/tidyfactor-js/.tidyfactor
deleted file mode 100644
index d95f77b..0000000
--- a/dist/tidyfactor-js/.tidyfactor
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "ecosystem": "tidyfactor",
- "track": "js",
- "name": "tidyfactor-js",
- "version": "1.2.0",
- "npmPackage": "@alwkala/tidyfactor-js",
- "github": "https://github.com/TidyFactor/JS",
- "skillFile": "../tidyfactor-js-v1.1.0.skill",
- "category": "spa",
- "commands": [
- "brief",
- "assets",
- "compo",
- "deploy",
- "i18n",
- "init",
- "logic",
- "modules",
- "pages",
- "route",
- "seo",
- "store"
- ],
- "foundations": [
- "vanilla-es6",
- "custom-elements"
- ],
- "visionRef": "../TidyFactor-VISION.md",
- "commercialPartner": "alwkala",
- "website": "https://tidyfactor.com",
- "docs": "https://tidyfactor.com/documentation",
- "license": "Apache-2.0"
-}
diff --git a/dist/tidyfactor-js/AGENTS.md b/dist/tidyfactor-js/AGENTS.md
deleted file mode 100644
index bf22ad7..0000000
--- a/dist/tidyfactor-js/AGENTS.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Agent Rules — tidyfactor-js
-
-All work must follow the TidyFactor Vision (`VISION.md`) and single-source-of-truth guidelines in `SKILLS-LAB-GUIDE.md`.
diff --git a/dist/tidyfactor-js/CHANGELOG.md b/dist/tidyfactor-js/CHANGELOG.md
deleted file mode 100644
index d74fa1c..0000000
--- a/dist/tidyfactor-js/CHANGELOG.md
+++ /dev/null
@@ -1,28 +0,0 @@
-# Changelog - TidyFactor JS
-
-All notable changes to the **[@tidyfactor/js](https://www.npmjs.com/package/@tidyfactor/js)** package will be documented in this file.
-
-## [1.2.0] - 2026-08-29
-
-### Added - Global Multi-Tier & Multi-Language Documentation Architecture
-- **Rule 13 Implementation**: Two-tier documentation separation between Canonical Technical Documentation (`README.md` SSOT) and First-Class Market Localizations.
-- **Universal Multi-Language Switcher**: Standardized 8-language switcher navigation bar across all documentation files (`EN`, `AR`, `FA`, `ES`, `PT`, `ZH`, `DE`, `FR`).
-- **First-Class Localized Developer Adoption Guides**: `README.es.md`, `README.pt.md`, `README.fa.md`, `README.zh.md`, `README.de.md`, `README.fr.md`.
-- **Automated Validation & Packaging**: Updated `tools/build-skill.js` and `tools/validate_skill.py`.
-
-The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
-and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-
-## [1.1.0] - 2026-08-25
-
-### Added
-- **Contextual Decision Layer (CDL v1.0)**: Added `references/memory/decision-points.md` with thin arbitration protocol (J1–J5: Client Routing Strategy, Build Tooling, State Management Model, Component Pattern, Output Scope).
-- **Brief Command (`/brief`)**: Added `references/commands/brief.md` and `references/workflows/brief.md` for pre-flight Vanilla JS SPA discovery.
-- **7-Axis SPA Quality Gate (`P/H/E/S/R/V/D`)**: Added `references/memory/quality-bar.md` enforcing zero framework dependencies, reactive proxy state, and memory leak cleanup.
-- **Structured References & Workflows Architecture**: Created `references/memory/` and `references/workflows/` (init, route, store, compo, brief).
-- **Validation & CLI Suite**: Added `bin/add-skill.js`, updated `package.json` `"bin"` map, created `tools/validate_skill.py`, and updated `brand.json` version.
-
----
-
-## [1.0.0] - 2026-07-28
-- Initial Release of `@tidyfactor/js`
diff --git a/dist/tidyfactor-js/LICENSE b/dist/tidyfactor-js/LICENSE
deleted file mode 100644
index 8ea93e1..0000000
--- a/dist/tidyfactor-js/LICENSE
+++ /dev/null
@@ -1,17 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- Copyright 2026 TidyFactor Ecosystem & Alwkala Digital Agency (https://alwkala.com)
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/dist/tidyfactor-js/README.ar.md b/dist/tidyfactor-js/README.ar.md
deleted file mode 100644
index faa26d7..0000000
--- a/dist/tidyfactor-js/README.ar.md
+++ /dev/null
@@ -1,100 +0,0 @@
-
-
-# 🟨 مهارة تايتفكتور لتطبيقات جافاسكريبت المستقلة `TidyFactor JS v1.2.0`
-### تطبيقات الصفحة الواحدة SPA بدون أطر عمل وبنظام ES Modules النقي ومكونات الويب Web Components
-
-[](https://www.npmjs.com/package/@tidyfactor/js)
-[](LICENSE)
-[](https://github.com/TidyFactor)
-[](SKILL.md)
-[](SKILL.md)
-[](SKILL.md)
-[](README.ar.md)
-[-green.svg?style=for-the-badge)](#-معايير-الحوكمة-والجودة)
-[](SKILL.md)
-
-[ English ](README.md) • [ العربية ](README.ar.md) • [ فارسی ](README.fa.md) • [ Español ](README.es.md) • [ Português ](README.pt.md) • [ 简体中文 ](README.zh.md) • [ Deutsch ](README.de.md) • [ Français ](README.fr.md)](https://www.npmjs.com/package/@tidyfactor/js)
-[](LICENSE)
-[](#-معمارية-منظومة-tidyfactor)
-
-[⚡ الأوامر](#-أوامر-المهارة) • [🏛️ المنظومة](#-معمارية-منظومة-tidyfactor) • [📖 English Version](README.md)
-
-
-
-
-
-
-
-
-
----
-
-## 🏛️ معمارية منظومة TidyFactor
-
-**منظومة TidyFactor** هي بيئة معمارية برمجية مفتوحة وحزم مهارات لوكلاء الذكاء الاصطناعي قائمة على الفصل التام للمسؤوليات عبر دورة حياة المنتجات:
-
-```text
-منظمة TidyFactor الرسمية (github.com/TidyFactor)
-│
-├── مهارات التصميم (Design Skills)
-│ ├── Cinematic ← تجربة الإبهار البصري / Experience ("Wow") (صفحات سينمائية تفاعلية)
-│ ├── Design ← بناء النماذج الأولية / Prototype ("Build") (محرك تصميم كودي وبديل Figma)
-│ └── Styler ← الجاهزية للإنتاج والتنسيق / Production ("Ship") (محرك التنسيق ودعم RTL)
-│
-├── مهارات التطوير البرمجي (Development Skills)
-│ ├── HTML ← المواقع الثابتة وسيو المحتوى / Static & SEO (هياكل خفيفة وسريعة)
-│ ├── HTMX ← الواجهات التفاعلية الخفيفة / Hypermedia (تفاعلات بدون جافاسكريبت معقدة)
-│ ├── JS ← تطبيقات الصفحة الواحدة بدون أطر / Vanilla SPA (نماذج تفاعلية بـ ES Modules)
-│ ├── PHP ← المنظومات المخدمية الحديثة / Server-Rendered (مكونات حديثة وتطبيقات PHP 8)
-│ └── Next ← منصات الساس متعددة المستأجرين / Multi-Tenant (Next.js 16 + Postgres RLS)
-│
-└── مهارات النمو والتسويق (Growth Skills)
- └── Marketing ← استراتيجيات النمو والمبيعات / Growth & SEO (تسويق الاستجابة المباشرة)
-```
-
-### 💎 ثلاثي الواجهات الأمامية والتجربة (Frontend Triad)
-
-```text
- TidyFactor
- │
- ┌─────────┼─────────┐
- │ │ │
- Cinematic Design Styler
- │ │ │
- Experience Prototype Production
- │ │ │
- "Wow" "Build" "Ship"
-```
-
-### 📦 مصفوفة التكامل الشامل للمجتمع (GitHub • Skill • NPM)
-
-| المسار البرمجي | الفئة | مستودع GitHub | مهارة الوكيل | حزمة NPM |
-| :--- | :--- | :--- | :--- | :--- |
-| **Cinematic** | التصميم | [`TidyFactor/Cinematic`](https://github.com/TidyFactor/Cinematic) | `tidyfactor-cinematic` | [`@tidyfactor/cinematic`](https://www.npmjs.com/package/@tidyfactor/cinematic) |
-| **Design** | التصميم | [`TidyFactor/Design`](https://github.com/TidyFactor/Design) | `tidyfactor-design` | [`@tidyfactor/design`](https://www.npmjs.com/package/@tidyfactor/design) |
-| **Styler** | التصميم | [`TidyFactor/Styler`](https://github.com/TidyFactor/Styler) | `tidyfactor-styler` | [`@tidyfactor/styler`](https://www.npmjs.com/package/@tidyfactor/styler) |
-| **Next** | التطوير | [`TidyFactor/Next`](https://github.com/TidyFactor/Next) | `tidyfactor-next` | [`@tidyfactor/next`](https://www.npmjs.com/package/@tidyfactor/next) |
-| **HTML** | التطوير | [`TidyFactor/HTML`](https://github.com/TidyFactor/HTML) | `tidyfactor-html` | [`@tidyfactor/html`](https://www.npmjs.com/package/@tidyfactor/html) |
-| **HTMX** | التطوير | [`TidyFactor/HTMX`](https://github.com/TidyFactor/HTMX) | `tidyfactor-htmx` | [`@tidyfactor/htmx`](https://www.npmjs.com/package/@tidyfactor/htmx) |
-| **JS** | التطوير | [`TidyFactor/JS`](https://github.com/TidyFactor/JS) | `tidyfactor-js` | [`@tidyfactor/js`](https://www.npmjs.com/package/@tidyfactor/js) |
-| **PHP** | التطوير | [`TidyFactor/PHP`](https://github.com/TidyFactor/PHP) | `tidyfactor-php` | [`@tidyfactor/php`](https://www.npmjs.com/package/@tidyfactor/php) |
-| **Marketing** | النمو | [`TidyFactor/Marketing`](https://github.com/TidyFactor/Marketing) | `tidyfactor-marketing` | [`@tidyfactor/marketing`](https://www.npmjs.com/package/@tidyfactor/marketing) |
-
----
-
-## 👨💻 المنظمة والتواصل والدعم
-
-- 🌐 **الموقع الرسمي للمنظومة:** [https://tidyfactor.com/](https://tidyfactor.com/)
-- 📚 **التوثيق الرسمي المعتمد:** [https://tidyfactor.com/documentation](https://tidyfactor.com/documentation)
-- 🤝 **الشريك التقني الرسمي:** [الوكالة الرقمية Alwkala](https://alwkala.com/)
-- 🐙 **منظمة GitHub الرسمية:** [github.com/TidyFactor](https://github.com/TidyFactor)
-- 📧 **استفسارات الأعمال والشركات:** [hello@tidyfactor.com](mailto:hello@tidyfactor.com)
-- 📱 **واتساب:** [+20 101 665 6899](https://wa.me/201016656899)
-- 📞 **الهاتف:** +20 101 665 6899
-- 📍 **المقر:** القاهرة، جمهورية مصر العربية
-
----
-
-## 📜 الترخيص والمجتمع
-
-مرخصة تحت رخصة **Apache License 2.0**. حقوق النشر محفوظة (c) 2026 لصالح [منظومة TidyFactor](https://tidyfactor.com) و[الوكالة الرقمية Alwkala](https://alwkala.com).
diff --git a/dist/tidyfactor-js/README.md b/dist/tidyfactor-js/README.md
deleted file mode 100644
index 57c2167..0000000
--- a/dist/tidyfactor-js/README.md
+++ /dev/null
@@ -1,125 +0,0 @@
-
-
-# 🟨 TidyFactor JS `v1.2.0`
-### Framework-Free Reactive Vanilla SPA, Web Components & Contextual Decision Engine
-
-**The official vanilla JavaScript SPA engineering track within the TidyFactor Ecosystem.**
-
-[](https://www.npmjs.com/package/@tidyfactor/js)
-[](LICENSE)
-[](README.ar.md)
-[](#-three-lifecycle-modes)
-
-[🚀 Quick Start](#-quick-start) • [⚡ 11 Commands](#-command-set) • [🏛️ Ecosystem](#%EF%B8%8F-tidyfactor-ecosystem-architecture) • [📖 بالعربية](README.ar.md)
-
-
-
-
-
-
-
-
-
----
-
-Part of the TidyFactor ecosystem. Sibling tracks (`tidyfactor-html`,
-`tidyfactor-php`, `tidyfactor-php-micro`, `tidyfactor-js-micro`,
-`tidyfactor-htmx`) live as separate skills so each can carry a full,
-framework-appropriate command set instead of one skill trying to cover
-every stack at once.
-
-## Three lifecycle modes
-- **Init** — scaffold a brand-new vanilla JS application.
-- **Convert** — bring an existing static site, jQuery-era codebase, or
- React/Vue app onto framework-free vanilla JS.
-- **Improve** — audit and upgrade a project already on this track.
-
-## Two architectural forks (always asked, never defaulted)
-- **Routing strategy** — hash-based (zero host config) or History API
- (clean URLs, needs a host rewrite rule).
-- **Build tooling** — zero-build native ES Modules, or Vite (dev/build
- tooling only, never a framework dependency).
-
-## Command set
-`init` · `assets` · `logic` · `store` · `compo` · `route` · `pages` ·
-`modules` · `i18n` · `seo` · `deploy` — see `SKILL.md` for the full
-sequencing and each command's reference file under `references/commands/`.
-
-## Developer
-Built and maintained by **alwkala** — github.com/alwkala
-
-## License
-Licensed under the Apache License 2.0.
-
-
----
-
-## 🏛️ TidyFactor Ecosystem Architecture
-
-**TidyFactor** is a modular web architecture and AI coding agent skill ecosystem built on clear separation of concerns across the product lifecycle:
-
-```
-TidyFactor Organization (github.com/TidyFactor)
-│
-├── Design Skills
-│ ├── Cinematic → Experience / "Wow" (Apple × Cartier Scroll-Driven Landing Pages)
-│ ├── Design → Prototype / "Build" (Code-Native UI Design Engine & Figma Alternative)
-│ └── Styler → Production / "Ship" (Framework Styler & RTL Polish Engine)
-│
-├── Development Skills
-│ ├── HTML → Content & Static (Semantic SEO & Static Platform Starter)
-│ ├── HTMX → Hypermedia (Server-Driven Micro-Interactions)
-│ ├── JS → Vanilla SPA (Framework-Free Reactive ES Modules)
-│ ├── PHP → Server-Rendered (Modern PHP 8.x Component UI & Architecture)
-│ └── Next → Multi-Tenant SaaS (Next.js 16, React 19, Supabase RLS & Dev-Perf)
-│
-└── Growth Skills
- └── Marketing → Growth / Revenue (Direct Response, Pillar SEO & Content Lifecycles)
-```
-
-### 💎 Frontend Triad
-
-```
- TidyFactor
- │
- ┌─────────┼─────────┐
- │ │ │
- Cinematic Design Styler
- │ │ │
- Experience Prototype Production
- │ │ │
- "Wow" "Build" "Ship"
-```
-
-### 📦 Community Package & Skill Parity
-
-| Track | Category | GitHub Repository | Agent Skill | NPM Package |
-| :--- | :--- | :--- | :--- | :--- |
-| **Cinematic** | Design | [`TidyFactor/Cinematic`](https://github.com/TidyFactor/Cinematic) | `tidyfactor-cinematic` | [`@tidyfactor/cinematic`](https://www.npmjs.com/package/@tidyfactor/cinematic) |
-| **Design** | Design | [`TidyFactor/Design`](https://github.com/TidyFactor/Design) | `tidyfactor-design` | [`@tidyfactor/design`](https://www.npmjs.com/package/@tidyfactor/design) |
-| **Styler** | Design | [`TidyFactor/Styler`](https://github.com/TidyFactor/Styler) | `tidyfactor-styler` | [`@tidyfactor/styler`](https://www.npmjs.com/package/@tidyfactor/styler) |
-| **Next** | Development | [`TidyFactor/Next`](https://github.com/TidyFactor/Next) | `tidyfactor-next` | [`@tidyfactor/next`](https://www.npmjs.com/package/@tidyfactor/next) |
-| **HTML** | Development | [`TidyFactor/HTML`](https://github.com/TidyFactor/HTML) | `tidyfactor-html` | [`@tidyfactor/html`](https://www.npmjs.com/package/@tidyfactor/html) |
-| **HTMX** | Development | [`TidyFactor/HTMX`](https://github.com/TidyFactor/HTMX) | `tidyfactor-htmx` | [`@tidyfactor/htmx`](https://www.npmjs.com/package/@tidyfactor/htmx) |
-| **JS** | Development | [`TidyFactor/JS`](https://github.com/TidyFactor/JS) | `tidyfactor-js` | [`@tidyfactor/js`](https://www.npmjs.com/package/@tidyfactor/js) |
-| **PHP** | Development | [`TidyFactor/PHP`](https://github.com/TidyFactor/PHP) | `tidyfactor-php` | [`@tidyfactor/php`](https://www.npmjs.com/package/@tidyfactor/php) |
-| **Marketing** | Growth | [`TidyFactor/Marketing`](https://github.com/TidyFactor/Marketing) | `tidyfactor-marketing` | [`@tidyfactor/marketing`](https://www.npmjs.com/package/@tidyfactor/marketing) |
-
----
-
-## 👨💻 Organization & Support
-
-- 🌐 **Official Website:** [https://tidyfactor.com/](https://tidyfactor.com/)
-- 📚 **Official Documentation:** [https://tidyfactor.com/documentation](https://tidyfactor.com/documentation)
-- 🤝 **Official Partner Website:** [Alwkala Digital Agency](https://alwkala.com/)
-- 🐙 **GitHub Organization:** [github.com/TidyFactor](https://github.com/TidyFactor)
-- 📧 **Business Inquiries:** [hello@tidyfactor.com](mailto:hello@tidyfactor.com)
-- 📱 **WhatsApp:** [+20 101 665 6899](https://wa.me/201016656899)
-- 📞 **Phone:** +20 101 665 6899
-- 📍 **Location:** Cairo, Egypt
-
----
-
-## 📜 License
-
-Licensed under the **Apache License 2.0**. Copyright (c) 2026 [TidyFactor](https://tidyfactor.com) & [Alwkala](https://alwkala.com).
diff --git a/dist/tidyfactor-js/SKILL.md b/dist/tidyfactor-js/SKILL.md
deleted file mode 100644
index d32006d..0000000
--- a/dist/tidyfactor-js/SKILL.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-name: tidyfactor-js
-description: "Framework-free reactive Vanilla SPA engine with Contextual Decision Layer (CDL). Features client-side routing, reactive Proxy state management, and Web Components with zero React/Vue runtime. Trigger on commands 'brief', 'init', 'assets', 'logic', 'store', 'compo', 'route', 'pages', 'modules', 'i18n', 'seo', 'deploy', or requests to scaffold a pure Vanilla JS SPA."
----
-# TidyFactor Vanilla JS (Framework-Free Reactive Vanilla SPA)
-
-A command dispatcher for framework-free client-side single page applications. This router declares commands and workflows without performing execution directly.
-
-## Commands
-
-| User intent | Command | What it loads |
-|---|---|---|
-| Strategic SPA Discovery & Brief Resolution | `references/commands/brief.md` | `references/workflows/brief.md` + `references/memory/decision-points.md` + `references/memory/quality-bar.md` |
-| Primary deliverable — scaffold a new vanilla SPA | `references/commands/init.md` | `references/workflows/init.md` + `references/memory/architecture.md` |
-| Client-side routing (hash `#` vs HTML5 History API) | `references/commands/route.md` | `references/workflows/route.md` + `references/memory/decision-points.md` |
-| Reactive Proxy state store & EventTarget subscribers | `references/commands/store.md` | `references/workflows/store.md` + `references/memory/quality-bar.md` |
-| Reusable native Web Components (custom elements) | `references/commands/compo.md` | `references/workflows/compo.md` + `references/memory/architecture.md` |
-| Central environment configuration & API clients | `references/commands/logic.md` | `references/commands/logic.md` + `references/memory/architecture.md` |
-| Assemble multi-screen view controllers | `references/commands/pages.md` | `references/commands/pages.md` + `references/memory/architecture.md` |
-| Pure ES Module utilities & formatting helpers | `references/commands/modules.md` | `references/commands/modules.md` + `references/memory/architecture.md` |
-| Multilingual translation & dynamic Arabic RTL toggle | `references/commands/i18n.md` | `references/commands/i18n.md` + `references/memory/quality-bar.md` |
-| SPA SEO metadata, dynamic page titles, sitemaps | `references/commands/seo.md` | `references/commands/seo.md` + `references/memory/quality-bar.md` |
-| Asset hygiene, favicon, and SVG optimization | `references/commands/assets.md` | `references/commands/assets.md` + `references/memory/quality-bar.md` |
-| Prepare deployment (Static hosting, Vite build, cPanel) | `references/commands/deploy.md` | `references/commands/deploy.md` + `references/memory/decision-points.md` |
-
-Read only the command file that matches the request. Do not load all commands simultaneously.
-
-## Non-Negotiable Invariants
-
-1. **Contextual Decision Layer (CDL)**: Resolve SPA baselines via `/brief` or `.tidyfactor/js-brief.md` before emitting code.
-2. **Zero Framework Runtime**: 100% pure vanilla modern JavaScript. No React, Vue, or Alpine.
-3. **Memory Leak Prevention**: All event listeners and timers MUST be cleaned up on `disconnectedCallback()`.
-4. **State Mutation Discipline**: All shared state mutations must occur through the Proxy/Store to notify subscribers.
-5. **7-Axis Pre-Emit Critique**: All generated code must be evaluated with `/* Pre-emit critique: P5 H5 E5 S5 R5 V5 D5 */`.
diff --git a/dist/tidyfactor-js/assets/hero-banner.png b/dist/tidyfactor-js/assets/hero-banner.png
deleted file mode 100644
index ded3095..0000000
Binary files a/dist/tidyfactor-js/assets/hero-banner.png and /dev/null differ
diff --git a/dist/tidyfactor-js/assets/og-default.png b/dist/tidyfactor-js/assets/og-default.png
deleted file mode 100644
index ded3095..0000000
Binary files a/dist/tidyfactor-js/assets/og-default.png and /dev/null differ
diff --git a/dist/tidyfactor-js/bin/add-skill.js b/dist/tidyfactor-js/bin/add-skill.js
deleted file mode 100644
index b17fbe6..0000000
--- a/dist/tidyfactor-js/bin/add-skill.js
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/env node
-/**
- * bin/add-skill.js — Multi-Agent Skill Installer Wrapper for tidyfactor-js
- * Supports Trae, Cursor, Windsurf, Antigravity, GitHub Copilot, RooCode, OpenCode, KiloCode, Warp, and Universal.
- *
- * @license Apache-2.0
- */
-
-const fs = require('fs');
-const path = require('path');
-const os = require('os');
-
-const targetDir = process.cwd();
-const skillSource = path.resolve(__dirname, '..');
-const skillName = 'tidyfactor-js';
-
-const AGENT_MAP = [
- { name: 'Trae AI IDE', dir: path.join(targetDir, '.trae', 'skills', skillName), test: path.join(targetDir, '.trae') },
- { name: 'Cursor IDE', dir: path.join(targetDir, '.cursor', 'skills', skillName), test: path.join(targetDir, '.cursor') },
- { name: 'Windsurf Cascade', dir: path.join(targetDir, '.windsurf', 'skills', skillName), test: path.join(targetDir, '.windsurf') },
- { name: 'GitHub Copilot', dir: path.join(targetDir, '.github', 'prompts', skillName), test: path.join(targetDir, '.github') },
- { name: 'RooCode', dir: path.join(targetDir, '.roo', 'skills', skillName), test: path.join(targetDir, '.roo') },
- { name: 'OpenCode / Zen', dir: path.join(targetDir, '.opencode', 'skills', skillName), test: path.join(targetDir, '.opencode') },
- { name: 'KiloCode', dir: path.join(targetDir, '.kilocode', 'skills', skillName), test: path.join(targetDir, '.kilocode') },
- { name: 'Warp Terminal', dir: path.join(targetDir, '.warp', 'skills', skillName), test: path.join(targetDir, '.warp') },
- { name: 'Kiro Spec IDE', dir: path.join(targetDir, '.kiro', 'skills', skillName), test: path.join(targetDir, '.kiro') },
- { name: 'Claude Code', dir: path.join(targetDir, '.claude', 'skills', skillName), test: path.join(targetDir, '.claude') },
- { name: 'Zed AI Agent', dir: path.join(targetDir, '.zed', 'skills', skillName), test: path.join(targetDir, '.zed') },
- { name: 'Google Antigravity/Gemini', dir: path.join(targetDir, '.agents', 'skills', skillName), test: path.join(targetDir, '.agents') },
-];
-
-function copyRecursive(src, dest) {
- fs.mkdirSync(dest, { recursive: true });
- const entries = fs.readdirSync(src, { withFileTypes: true });
- for (const entry of entries) {
- const srcPath = path.join(src, entry.name);
- const destPath = path.join(dest, entry.name);
- if (['.git', 'node_modules', 'dist'].includes(entry.name)) continue;
- if (entry.isDirectory()) {
- copyRecursive(srcPath, destPath);
- } else {
- fs.copyFileSync(srcPath, destPath);
- }
- }
-}
-
-// Determine installation targets
-let mountedTargets = [];
-
-for (const agent of AGENT_MAP) {
- if (fs.existsSync(agent.test)) {
- copyRecursive(skillSource, agent.dir);
- mountedTargets.push(agent.name + ' (' + path.relative(targetDir, agent.dir) + ')');
- }
-}
-
-// Always ensure universal fallback in .agents/skills/
-const defaultDir = path.join(targetDir, '.agents', 'skills', skillName);
-copyRecursive(skillSource, defaultDir);
-if (!mountedTargets.some(t => t.includes('.agents'))) {
- mountedTargets.push('Universal Default (.agents/skills/' + skillName + ')');
-}
-
-console.log('✨ Successfully injected ' + skillName + ' into:');
-mountedTargets.forEach(t => console.log(' • ' + t));
diff --git a/dist/tidyfactor-js/bin/create-kit.js b/dist/tidyfactor-js/bin/create-kit.js
deleted file mode 100644
index 367db1f..0000000
--- a/dist/tidyfactor-js/bin/create-kit.js
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env node
-const fs = require('fs');
-const path = require('path');
-
-const args = process.argv.slice(2);
-if (args.includes('-v') || args.includes('--version')) {
- console.log('tidyfactor-js v1.0.0');
- process.exit(0);
-}
-
-if (args.includes('-h') || args.includes('--help')) {
- console.log('Usage: npx @tidyfactor/cli-js [project-directory] [options]');
- console.log('Options:');
- console.log(' -y, --yes Non-interactive / AI Agent mode');
- console.log(' -v, --version Show version');
- console.log(' -h, --help Show help');
- process.exit(0);
-}
-
-console.log('✨ Scaffolded tidyfactor-js starter project successfully.');
diff --git a/dist/tidyfactor-js/brand.json b/dist/tidyfactor-js/brand.json
deleted file mode 100644
index e6c126b..0000000
--- a/dist/tidyfactor-js/brand.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "name": "TidyFactor JS",
- "version": "1.2.0",
- "schemaVersion": "brand-core-v2",
- "meta": {
- "product": "TidyFactor JS",
- "tagline": "Framework-Free Reactive Vanilla SPA",
- "description": "Real client-side single-page applications with state, routing, and data layer built purely with modern vanilla JavaScript.",
- "owner": "TidyFactor Ecosystem",
- "website": "https://tidyfactor.com",
- "repo": "https://github.com/TidyFactor/JS",
- "version": "1.1.0",
- "lastUpdated": "2026-08-25"
- }
-}
diff --git a/dist/tidyfactor-js/memory/overview.md b/dist/tidyfactor-js/memory/overview.md
deleted file mode 100644
index 0f90f97..0000000
--- a/dist/tidyfactor-js/memory/overview.md
+++ /dev/null
@@ -1 +0,0 @@
-# Deep Reference Memory — tidyfactor-js
diff --git a/dist/tidyfactor-js/package.json b/dist/tidyfactor-js/package.json
deleted file mode 100644
index 3793455..0000000
--- a/dist/tidyfactor-js/package.json
+++ /dev/null
@@ -1,63 +0,0 @@
-{
- "name": "@tidyfactor/js",
- "version": "1.2.0",
- "description": "TidyFactor Vanilla JS track — Framework-Free Reactive Vanilla SPA with Contextual Decision Layer (CDL)",
- "main": "SKILL.md",
- "bin": {
- "tidyfactor-js": "bin/add-skill.js",
- "add-skill": "bin/add-skill.js",
- "add-js-skill": "bin/add-skill.js"
- },
- "keywords": [
- "tidyfactor",
- "vanilla-js",
- "spa",
- "reactive-state",
- "client-routing",
- "web-components",
- "no-framework",
- "ai-agents",
- "antigravity",
- "claude-code",
- "cursor"
- ],
- "author": "TidyFactor (https://tidyfactor.com)",
- "license": "Apache-2.0",
- "repository": {
- "type": "git",
- "url": "git+https://github.com/TidyFactor/JS.git"
- },
- "scripts": {
- "validate": "python tools/validate_skill.py",
- "build": "node tools/build-skill.js",
- "release": "python ../tools/release_skill.py ."
- },
- "publishConfig": {
- "access": "public"
- },
- "files": [
- ".tidyfactor",
- "AGENTS.md",
- "CHANGELOG.md",
- "LICENSE",
- "README.ar.md",
- "README.de.md",
- "README.es.md",
- "README.fa.md",
- "README.fr.md",
- "README.md",
- "README.pt.md",
- "README.zh.md",
- "SKILL-REGISTRY.md",
- "SKILL.md",
- "VISION.md",
- "assets",
- "bin",
- "brand.json",
- "memory",
- "references",
- "scripts",
- "templates",
- "tools"
- ]
-}
diff --git a/dist/tidyfactor-js/references/commands/_template.md b/dist/tidyfactor-js/references/commands/_template.md
deleted file mode 100644
index fc7dd1a..0000000
--- a/dist/tidyfactor-js/references/commands/_template.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# Command: `` —
-
-## Purpose
-One or two sentences: what this command extracts/organizes, and why it's
-its own command rather than folded into another one.
-
-## When to run it
-- Signal from the audit that suggests this command applies.
-- User phrasing that should trigger it (besides the bare command word).
-
-## What it does
-Numbered steps — concrete actions, not vague principles. Branch by
-routing strategy / build tooling only where the two genuinely differ;
-say so explicitly where they don't.
-
-## Output convention
-```
-Example file tree fragment showing where output lands (both zero-build
-and Vite layouts if they differ).
-```
-
-## Checklist
-- [ ] Concrete, checkable outcomes for this command specifically.
-
----
-To register a new command:
-1. Copy this file to `references/commands/.md` and fill it in.
-2. Add a row to the Command Index table in `SKILL.md`.
-3. If it interacts with an existing command (consumes/produces the same
- files), cross-reference it in both files' "What it does" sections.
diff --git a/dist/tidyfactor-js/references/commands/assets.md b/dist/tidyfactor-js/references/commands/assets.md
deleted file mode 100644
index 508d4d5..0000000
--- a/dist/tidyfactor-js/references/commands/assets.md
+++ /dev/null
@@ -1,60 +0,0 @@
-# Command: `assets` — Asset Organization & Cache-Busting
-
-## Purpose
-Consolidate and lightly optimize CSS/images (JS is already organized by
-`compo`/`modules`), and make sure browsers don't serve stale files after
-a deploy.
-
-## When to run it
-- The audit finds CSS/images scattered outside a shared asset root, no
- cache-busting on hand-written asset URLs (zero-build mode only — see
- below), or bulky/unoptimized images.
-- The user says "clean up my CSS", "optimize assets", "add cache
- busting", or runs `assets`.
-- Runs first (Phase 1), before `logic`/`store`/`compo`, so later commands
- build on an already-organized asset base.
-
-## What it does — Zero-build mode
-1. Consolidate CSS into `/assets/css/` and images into `/assets/img/` —
- no loose stylesheet left inside `src/components/`.
-2. Add cache-busting via a single version query-string param
- (`style.css?v=`) driven from one constant in `src/config.js`
- — not per-file hashes, no build step.
-3. Deduplicate near-identical stylesheets if genuinely redundant; flag
- instead of silently merging if uncertain.
-4. Basic image housekeeping: flag oversized/unoptimized images, suggest
- (don't auto-run) compression.
-
-## What it does — Vite mode
-1. Vite already content-hashes and cache-busts anything reached via a
- JS/CSS `import` or referenced in `index.html` — don't hand-roll
- versioning on top of that.
-2. Audit instead for assets that *bypass* Vite's pipeline: hardcoded
- absolute paths to `public/` files that should be imports, or large
- binaries sitting in `src/` that belong in `public/` (static, unhashed,
- copied as-is) versus imported (hashed, optimized).
-3. Consolidate stray CSS into per-component styles (co-located with the
- Web Component that uses them) or a shared `src/assets/css/base.css` —
- match whatever `compo`'s existing components already establish.
-4. Flag oversized/unoptimized images for manual compression — Vite
- doesn't do this for you without an explicit image-optimization plugin,
- and this skill doesn't add build plugins by default (see Hard
- Constraints).
-
-## Output convention
-```
-Zero-build: /assets/css/, /assets/img/, version constant in src/config.js
-Vite: /public/ for static passthrough files, imports for anything
- that should be hashed/bundled
-```
-
-## Checklist
-- [ ] No CSS/image file left scattered outside its established location
-- [ ] Zero-build: cache-busting version applied consistently, driven from
- one place
-- [ ] Vite: no asset hand-rolling a cache-busting scheme Vite already
- provides via imports
-- [ ] No duplicated stylesheet content (or duplication explicitly
- flagged, not silently merged)
-- [ ] No bundler/build plugin introduced beyond what the chosen mode
- already includes
diff --git a/dist/tidyfactor-js/references/commands/brief.md b/dist/tidyfactor-js/references/commands/brief.md
deleted file mode 100644
index bbdb56a..0000000
--- a/dist/tidyfactor-js/references/commands/brief.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Command: brief
-
-Discovers vanilla JS SPA architecture, routing strategy, build tooling, and state model via Contextual Decision Layer (CDL).
-
-## Loads
-- `references/workflows/brief.md`
-- `references/memory/decision-points.md`
-- `references/memory/quality-bar.md`
diff --git a/dist/tidyfactor-js/references/commands/compo.md b/dist/tidyfactor-js/references/commands/compo.md
deleted file mode 100644
index 91d6f3f..0000000
--- a/dist/tidyfactor-js/references/commands/compo.md
+++ /dev/null
@@ -1,56 +0,0 @@
-# Command: `compo` — Modular Components
-
-## Purpose
-Break repeated or logically-distinct UI blocks into native Web
-Components — the structural unit above "view" and below "module" (see
-`modules.md` for logic not tied to any one component). Unlike
-`tidyfactor-html`, this track has JS available natively, so there's no
-build-vs-runtime fork here — Web Components are simply the standard.
-
-## When to run it
-- The audit shows the same UI block (card, nav item, modal, form field)
- repeated across multiple views, or non-trivial DOM manipulation logic
- duplicated inline.
-- User says "componentize this", "make this modular", or runs `compo`.
-- Runs after `store` — new components should consume the store/data layer
- from day one rather than being retrofitted onto it later.
-
-## What it does
-1. Identify each repeated/distinct UI block during audit.
-2. Extract it into its own file under `src/components/name.js`, a custom
- element (`class NameEl extends HTMLElement`) using `` +
- Shadow DOM by default — use light DOM only if the project's global CSS
- genuinely needs to cascade in, and match whatever the project's first
- component already established (don't mix the two within one project).
-3. Inputs become element attributes for primitives (``, read via `observedAttributes`/`attributeChangedCallback`)
- or properties for complex data (`el.data = {...}`) — don't serialize
- objects into attribute strings.
-4. Register via `customElements.define('product-card', ProductCardEl)` —
- one registration per component file, imported where used.
-5. Components that need shared state subscribe to `store.js`
- (`store.subscribe(...)`) in `connectedCallback` and unsubscribe in
- `disconnectedCallback` — no memory-leaking listeners left behind.
-6. Name by what the block *is*, not where it's used
- (`product-card.js`, not `homepage-box-3.js`).
-7. Replace the original inline markup/logic with the custom element tag
- in every view, and confirm zero visual/behavioral change.
-
-## Output convention
-```
-src/components/
- product-card.js (defines )
- nav-bar.js (defines , subscribes to store)
-```
-
-## Checklist
-- [ ] No component contains hardcoded view-specific content it should
- take as an attribute/property instead
-- [ ] Same visual/behavioral output as before extraction
-- [ ] Named by purpose, not by view location
-- [ ] Used in at least 2 places, or clearly reusable (single-use blocks
- may not need extraction yet — flag instead of forcing it)
-- [ ] Shadow DOM vs light DOM choice is consistent across every
- component in the project — never mixed
-- [ ] Any component subscribing to `store.js` unsubscribes in
- `disconnectedCallback`
diff --git a/dist/tidyfactor-js/references/commands/deploy.md b/dist/tidyfactor-js/references/commands/deploy.md
deleted file mode 100644
index 656d1d9..0000000
--- a/dist/tidyfactor-js/references/commands/deploy.md
+++ /dev/null
@@ -1,66 +0,0 @@
-# Command: `deploy` — Host Launch
-
-## Purpose
-The step where both Step 0 forks actually matter operationally: what to
-upload, and — critically for History API routing — the host rewrite rule
-that keeps deep links from 404ing. Always the last command run.
-
-## When to run it
-- `seo` has run (or the user explicitly skips it) and the app is ready to
- ship.
-- User says "deploy this", "prep for [host]", "why do my routes 404 on
- refresh", or runs `deploy`.
-- Always last — deploying before `route`/`pages`/`seo` are stable just
- means redoing this step.
-
-## What it does
-1. Confirm the target host if not already known (GitHub Pages, Cloudflare
- Pages, Netlify, Vercel static, cPanel/shared hosting, other) — the
- rewrite-rule syntax differs per host.
-2. **Zero-build**: nothing to build — upload the project root as-is
- (`index.html`, `src/`, `assets/`).
- **Vite**: run `npm run build`, upload the generated `dist/` folder,
- never the source tree.
-3. **History API routing — the critical step.** Without a rewrite rule,
- any deep link or hard refresh on a non-root route 404s, because the
- host looks for a real file at that path. Add the host-specific rule
- that serves `index.html` for any unmatched path:
- - Netlify: `_redirects` file — `/* /index.html 200`
- - Vercel: `vercel.json` rewrites — all paths → `/index.html`
- - Cloudflare Pages: `_redirects` file, same syntax as Netlify
- - GitHub Pages: no native rewrite support — either use hash-based
- routing instead (flag this limitation if the user picked History API
- for a GitHub Pages target — that combination doesn't work cleanly),
- or use the well-known `404.html`-redirects-to-`index.html` trick,
- which is a workaround, not a clean rewrite — say so.
- - cPanel/Apache: `.htaccess` rewrite rule to `index.html` for
- non-file, non-directory requests.
-4. **Hash-based routing**: no rewrite rule needed on any host — confirm
- this explicitly to the user so they don't add unnecessary host config.
-5. Vite mode: confirm `vite.config.js`'s `base` option matches the actual
- deploy path (root domain vs. a subpath like `username.github.io/repo/`)
- — a mismatched `base` is the most common "works locally, breaks
- deployed" Vite issue.
-6. Confirm HTTPS is enforced by the host (most free hosts do this by
- default; flag if not) and that `logic`'s config resolves to the
- correct production API base URL, not a `localhost` default.
-7. Final checklist pass, then report the exact upload/deploy steps for
- the confirmed host.
-
-## Output convention
-```
-Netlify/Cloudflare Pages (History API): /_redirects
-Vercel (History API): /vercel.json
-cPanel/Apache (History API): /.htaccess
-Hash-based (any host): no rewrite file needed
-```
-
-## Checklist
-- [ ] Correct artifact uploaded (zero-build: project root; Vite: `dist/`
- only, never the source tree)
-- [ ] History API mode: host-appropriate rewrite rule is in place and
- verified — deep link + hard refresh both resolve correctly
-- [ ] Hash-based mode: confirmed no rewrite rule was added unnecessarily
-- [ ] Vite mode: `base` config matches the actual deploy path
-- [ ] Production API base URL confirmed, not a `localhost` default
-- [ ] HTTPS enforced by the host
diff --git a/dist/tidyfactor-js/references/commands/i18n.md b/dist/tidyfactor-js/references/commands/i18n.md
deleted file mode 100644
index 1c7fc24..0000000
--- a/dist/tidyfactor-js/references/commands/i18n.md
+++ /dev/null
@@ -1,67 +0,0 @@
-# Command: `i18n` — Translation & RTL/LTR Localization
-
-## Purpose
-Extract hardcoded user-facing strings out of components/views into
-centralized dictionaries, and wire up dynamic `dir="rtl"`/`dir="ltr"`
-switching driven by app state, not per-page hardcoding.
-
-## When to run it
-- The audit finds literal user-facing text hardcoded inside component
- templates or view markup.
-- The project needs (or already has) more than one language.
-- The user says "add translation", "make this bilingual", "add RTL
- support", or runs `i18n`.
-- **Always runs last** (Phase 3), after `compo`/`route`/`pages` are
- stable — extracting strings from components that are still being
- restructured breaks templates mid-refactor and scatters translation
- work across files about to move.
-
-## What it does
-1. Scan every component's `` and every view for hardcoded
- user-facing strings (labels, headings, alt text, placeholder text,
- `document.title` values). Exclude developer-facing strings (console
- logs, code comments).
-2. Build a centralized dictionary per language: `src/lang/en.json`,
- `src/lang/ar.json` — keyed by a stable, namespaced key (`nav.home`,
- `product.addToCart`), never the raw English string as the key.
-3. Active language lives in `store.js`'s state (`getState().lang`), not a
- separate ad hoc global — components/views already know how to
- subscribe to store changes, so a language switch is just another state
- update they react to.
-4. Small `t(key)` lookup helper in `src/modules/i18n.js` — reads the
- active language's loaded dictionary, falls back to a default language
- on a missing key (log a warning, don't render the raw key to users).
-5. **Zero-build**: dictionaries are `fetch()`-ed once at startup (or on
- language switch) and cached in memory.
- **Vite**: dictionaries are static `import` statements (`import en from
- './lang/en.json'`) — no runtime fetch needed, Vite bundles them.
-6. Every component re-renders its text on a language-store-change
- subscription — the same `store.subscribe()` mechanism `compo` already
- established, not a page reload.
-7. Add dynamic `dir="rtl"`/`dir="ltr"` on `document.documentElement`,
- driven by the active language, updated in the same store subscription
- that swaps text.
-8. Verify layout doesn't visually break under RTL. Flag (don't silently
- rewrite) any component CSS that assumed LTR-only via hardcoded
- `left`/`right` instead of logical properties, if adopting them fits
- the project's existing CSS convention.
-9. Cross-reference `seo.md`: `hreflang` tags and per-language sitemap
- entries are `seo`'s job, not this command's — flag it as a follow-up
- if `seo` hasn't run yet.
-
-## Output convention
-```
-src/lang/
- en.json, ar.json
-src/modules/i18n.js (t() lookup + active-language resolver)
-```
-
-## Checklist
-- [ ] No hardcoded user-facing string left in a touched component/view
-- [ ] Every string routed through `t()` with a stable, namespaced key
-- [ ] Active language lives in `store.js`, not a separate ad hoc global
-- [ ] Switching language updates both text AND the `dir` attribute,
- without a full page reload
-- [ ] Missing-key fallback logs a warning instead of rendering the raw
- key to users
-- [ ] Any pre-existing bilingual/RTL behavior preserved, not regressed
diff --git a/dist/tidyfactor-js/references/commands/init.md b/dist/tidyfactor-js/references/commands/init.md
deleted file mode 100644
index 28d6f2d..0000000
--- a/dist/tidyfactor-js/references/commands/init.md
+++ /dev/null
@@ -1,94 +0,0 @@
-# Command: `init` — Project Scaffold
-
-## Purpose
-Generate a working vanilla JS application boilerplate for a brand-new
-project — the only command that runs *before* there's a repo to audit.
-Both Step 0 forks (routing, build tooling) get wired in from day one so
-later commands (`store`, `compo`, `route`) extend a working shape instead
-of retrofitting one.
-
-## When to run it
-- Mode is Init (Step 0).
-- User says "start a new vanilla JS app", "scaffold an SPA with no
- framework", "give me a JS boilerplate", or runs `init`.
-
-## What it does
-1. Confirm both Step 0 forks explicitly (routing strategy, build
- tooling) plus: project name, bilingual/RTL needed?, whether the app
- talks to a real backend now (base API URL) or starts against a stub.
-2. Create the folder structure (see Output convention) — identical
- `src/` layout regardless of build tooling, so switching tooling later
- never means re-deriving the app's internal structure.
-3. Zero-build: write `index.html` loading `src/app.js` via
- `