@networkpro/web 1.22.0 → 1.22.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -36,7 +36,7 @@ jobs:
36
36
  uses: actions/checkout@v5
37
37
 
38
38
  - name: Set up Node.js
39
- uses: actions/setup-node@v5
39
+ uses: actions/setup-node@v6
40
40
  with:
41
41
  node-version: 22
42
42
  cache: npm
@@ -96,7 +96,7 @@ jobs:
96
96
  run: git archive --format=tar.gz --output=clean-source.tar.gz HEAD
97
97
 
98
98
  - name: Upload source archive
99
- uses: actions/upload-artifact@v4
99
+ uses: actions/upload-artifact@v5
100
100
  with:
101
101
  name: clean-source
102
102
  path: clean-source.tar.gz
@@ -121,7 +121,7 @@ jobs:
121
121
  run: rm clean-source.tar.gz
122
122
 
123
123
  - name: Set up Node.js for npmjs
124
- uses: actions/setup-node@v5
124
+ uses: actions/setup-node@v6
125
125
  with:
126
126
  node-version: 22
127
127
  registry-url: https://registry.npmjs.org/
@@ -182,7 +182,7 @@ jobs:
182
182
  run: rm clean-source.tar.gz
183
183
 
184
184
  - name: Set up Node.js for GPR
185
- uses: actions/setup-node@v5
185
+ uses: actions/setup-node@v6
186
186
  with:
187
187
  node-version: 22
188
188
  registry-url: https://npm.pkg.github.com/
@@ -42,7 +42,7 @@ jobs:
42
42
  run: 'echo "ENV_MODE is set to: $ENV_MODE"'
43
43
 
44
44
  - name: Setup Node.js
45
- uses: actions/setup-node@v5
45
+ uses: actions/setup-node@v6
46
46
  with:
47
47
  node-version: 22
48
48
  cache: npm
@@ -23,7 +23,7 @@ jobs:
23
23
  uses: actions/checkout@v5
24
24
 
25
25
  - name: Set up Node.js
26
- uses: actions/setup-node@v5
26
+ uses: actions/setup-node@v6
27
27
  with:
28
28
  node-version: 22
29
29
 
@@ -32,7 +32,7 @@ jobs:
32
32
  run: 'echo "ENV_MODE is set to: $ENV_MODE"'
33
33
 
34
34
  - name: Set up Node.js
35
- uses: actions/setup-node@v5
35
+ uses: actions/setup-node@v6
36
36
  with:
37
37
  node-version: 22
38
38
  cache: npm
@@ -34,16 +34,16 @@ jobs:
34
34
  uses: actions/checkout@v5
35
35
 
36
36
  - name: Set up Node.js
37
- uses: actions/setup-node@v5
37
+ uses: actions/setup-node@v6
38
38
  with:
39
39
  node-version: 22
40
40
  cache: npm
41
41
  cache-dependency-path: package-lock.json
42
42
 
43
- - name: Show Node.js and npm versions
44
- run: |
45
- echo "Node.js version: $(node -v)"
46
- echo "npm version: $(npm -v)"
43
+ #- name: Show Node.js and npm versions
44
+ # run: |
45
+ # echo "Node.js version: $(node -v)"
46
+ # echo "npm version: $(npm -v)"
47
47
 
48
48
  - name: Upgrade npm
49
49
  run: |
@@ -94,7 +94,7 @@ jobs:
94
94
  run: git archive --format=tar.gz --output=clean-source.tar.gz HEAD
95
95
 
96
96
  - name: Upload source archive
97
- uses: actions/upload-artifact@v4
97
+ uses: actions/upload-artifact@v5
98
98
  with:
99
99
  name: clean-source
100
100
  path: clean-source.tar.gz
@@ -119,17 +119,17 @@ jobs:
119
119
  run: rm clean-source.tar.gz
120
120
 
121
121
  - name: Set up Node.js for npmjs
122
- uses: actions/setup-node@v5
122
+ uses: actions/setup-node@v6
123
123
  with:
124
124
  node-version: 22
125
125
  registry-url: https://registry.npmjs.org/
126
126
  cache: npm
127
127
  cache-dependency-path: package-lock.json
128
128
 
129
- - name: Show Node.js and npm versions
130
- run: |
131
- echo "Node.js version: $(node -v)"
132
- echo "npm version: $(npm -v)"
129
+ #- name: Show Node.js and npm versions
130
+ # run: |
131
+ # echo "Node.js version: $(node -v)"
132
+ # echo "npm version: $(npm -v)"
133
133
 
134
134
  - name: Upgrade npm
135
135
  run: |
@@ -180,17 +180,17 @@ jobs:
180
180
  run: rm clean-source.tar.gz
181
181
 
182
182
  - name: Set up Node.js for GPR
183
- uses: actions/setup-node@v5
183
+ uses: actions/setup-node@v6
184
184
  with:
185
185
  node-version: 22
186
186
  registry-url: https://npm.pkg.github.com/
187
187
  cache: npm
188
188
  cache-dependency-path: package-lock.json
189
189
 
190
- - name: Show Node.js and npm versions
191
- run: |
192
- echo "Node.js version: $(node -v)"
193
- echo "npm version: $(npm -v)"
190
+ #- name: Show Node.js and npm versions
191
+ # run: |
192
+ # echo "Node.js version: $(node -v)"
193
+ # echo "npm version: $(npm -v)"
194
194
 
195
195
  - name: Upgrade npm
196
196
  run: |
@@ -44,7 +44,7 @@ jobs:
44
44
  uses: actions/checkout@v5
45
45
 
46
46
  - name: Set up Node.js
47
- uses: actions/setup-node@v5
47
+ uses: actions/setup-node@v6
48
48
  with:
49
49
  node-version: 22
50
50
  cache: npm
@@ -104,7 +104,7 @@ jobs:
104
104
  run: git archive --format=tar.gz --output=clean-source.tar.gz HEAD
105
105
 
106
106
  - name: Upload source archive
107
- uses: actions/upload-artifact@v4
107
+ uses: actions/upload-artifact@v5
108
108
  with:
109
109
  name: clean-source
110
110
  path: clean-source.tar.gz
@@ -129,7 +129,7 @@ jobs:
129
129
  run: rm clean-source.tar.gz
130
130
 
131
131
  - name: Set up Node.js for npmjs
132
- uses: actions/setup-node@v5
132
+ uses: actions/setup-node@v6
133
133
  with:
134
134
  node-version: 22
135
135
  registry-url: https://registry.npmjs.org/
@@ -190,7 +190,7 @@ jobs:
190
190
  run: rm clean-source.tar.gz
191
191
 
192
192
  - name: Set up Node.js for GPR
193
- uses: actions/setup-node@v5
193
+ uses: actions/setup-node@v6
194
194
  with:
195
195
  node-version: 22
196
196
  registry-url: https://npm.pkg.github.com/
package/.ncurc.cjs ADDED
@@ -0,0 +1,50 @@
1
+ /* ==========================================================================
2
+ .ncurc.cjs
3
+
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
5
+ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
6
+ This file is part of Network Pro.
7
+ ========================================================================= */
8
+
9
+ /**
10
+ * ==========================================================
11
+ * npm-check-updates Configuration
12
+ * ----------------------------------------------------------
13
+ * This file defines upgrade behavior for project dependencies.
14
+ * It ensures consistent updates while protecting pinned tools
15
+ * that are known to break between major versions.
16
+ *
17
+ * 🔧 Usage:
18
+ * - Run `npm run check:updates` to preview safe upgrades
19
+ * - Run `npm run upgrade` to apply upgrades (respects these rules)
20
+ *
21
+ * 📜 Notes for Contributors:
22
+ * - Do NOT remove entries from "reject" unless a maintainer
23
+ * confirms the dependency has been tested and verified.
24
+ * - This config is automatically used by npm-check-updates (NCU)
25
+ * and requires no command-line flags.
26
+ *
27
+ * 💡 See CONTRIBUTING.md → "Dependency Management" for details.
28
+ * ==========================================================
29
+ */
30
+
31
+ /** @type {import('npm-check-updates').RunOptions} */
32
+ module.exports = {
33
+ // Ignore specific dependencies (prevent upgrades)
34
+ reject: ['vitest', '@vitest/coverage-v8', 'prettier', 'jsdom'],
35
+
36
+ // Always upgrade devDependencies as well
37
+ dep: 'prod,dev',
38
+
39
+ // Show a summary table
40
+ format: ['group', 'table'],
41
+
42
+ // Don’t automatically install — just update package.json
43
+ upgrade: true,
44
+
45
+ // Display upgraded dependencies as JSON (optional for automation)
46
+ jsonUpgraded: false,
47
+
48
+ // Enable readable colors when supported
49
+ color: true, // harmless, but CLI-only
50
+ };
package/.node-version CHANGED
@@ -1 +1 @@
1
- 22.20.0
1
+ 22.21.0
package/.nvmrc CHANGED
@@ -1 +1 @@
1
- 22.20.0
1
+ 22.21.0
package/CHANGELOG.md CHANGED
@@ -22,6 +22,85 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
22
22
 
23
23
  ---
24
24
 
25
+ ## [1.22.2] - 2025-10-29
26
+
27
+ ### Documentation
28
+
29
+ - Rewrote `CONTRIBUTING.md` to accurately describe the modern SvelteKit contribution workflow.
30
+ - Updated guidelines for branch naming, code style, and pull request submission.
31
+ - Removed outdated references to Webpack and `build/` artifacts.
32
+ - Moved `CONTRIBUTING.md` and `CODE_OF_CONDUCT.md` to the organization’s `.github` repository to centralize contribution and conduct policies across all projects.
33
+
34
+ ### Added
35
+
36
+ - Introduced `vite-plugin-devtools-json` as a new `devDependency` to improve DevTools and JSON inspection support.
37
+ - Added plugin configuration in `vite.config.js`.
38
+ - Added `.ncurc.json` configuration to define rules for `npm-check-updates`, preventing automatic upgrades of version-linked packages such as `vitest` and `@vitest/coverage-v8`.
39
+ - Added the term `ncurc` to `cspell.json` to prevent false-positive spell-check warnings.
40
+
41
+ ### Changed
42
+
43
+ - Updated GitHub workflows to utilize `actions/upload-artifact@v5` and `actions/setup-node@v6`:
44
+ - `templates/publish.template.yml`
45
+ - `build-and-publish.yml`
46
+ - `lighthouse.yml`
47
+ - `meta-check.yml`
48
+ - `playwright.yml`
49
+ - `publish-test.yml`
50
+ - Improved **Svelte 5** / Rune compatibility in `vitest.config.client.js`:
51
+ - Added `optimizeDeps.include` configuration to ensure `.svelte` files are properly transformed during testing, and to align with **Vitest 4.x** and future **Vite 6** compatibility.
52
+ - Prevents `rune_outside_svelte` errors and prepares for future **Vitest 4.x** updates.
53
+ - Updated generator metadata in `src/app.html` to reflect **SvelteKit 2.48.3**.
54
+ - Modified `.node-version` and `.nvmrc` to reflect **Node.js** version `22.21.0` (LTS).
55
+ - Bumped project version to `v1.22.2`.
56
+ - Updated dependencies:
57
+ - `@eslint/compat` `^1.4.0` → `^1.4.1`
58
+ - `@sveltejs/adapter-vercel` `^6.0.0` → `^6.1.1`
59
+ - `@sveltejs/kit` `2.47.2` → `2.48.3`
60
+ - `browserslist` `^4.26.3` → `^4.27.0`
61
+ - `eslint-plugin-jsdoc` `^61.1.5` → `^61.1.11`
62
+ - `posthog-js` `^1.278.0` → `^1.282.0`
63
+ - `svelte` `5.41.1` → `5.43.0`
64
+ - `vite` `^7.1.11` → `^7.1.12`
65
+
66
+ ---
67
+
68
+ ## [1.22.1] - 2025-10-21
69
+
70
+ ### Documentation
71
+
72
+ - Updated directory structure and **static/pgp** section of `README.md`.
73
+
74
+ ### Changed
75
+
76
+ - Bumped project version to `v1.22.1`.
77
+ - Updated the text and layout of `AboutContent.svelte`.
78
+ - Added a link to the privacy email address in `PrivacyContent.svelte` and `PrivacyDashboard.svelte` for easier access.
79
+ - Updated the text of `ServicesContent.svelte`.
80
+ - Increased default Playwright test timeouts for navigation-sensitive suites (Desktop and Mobile) to improve stability under CI latency conditions.
81
+ - Implemented `Promise.all()` pattern for combined click and navigation waits, reducing flakiness in route transition tests.
82
+ - Updated the `'about' link` navigation tests in both Desktop and Mobile scenarios to include:
83
+ - Explicit `page.waitForLoadState('domcontentloaded')` calls before assertions.
84
+ - Extended per-suite timeouts (`90s`) using `test.setTimeout(90000)` for reliability on slower environments.
85
+ - Added fallback `waitForURL('\*\*/about', { timeout: 60000 })` to ensure deterministic routing checks.
86
+ - Adjusted test structure for consistency across device profiles and browsers.
87
+ - Verified local runs remain performant while increasing tolerance for **CI network latency**.
88
+
89
+ ### Fixed
90
+
91
+ - Corrected `TermsUseContent.svelte` to reflect hosting by Vercel, not Netlify.
92
+ - Corrected license identifier syntax on the following pages:
93
+ - `AboutContent.svelte`
94
+ - `FossContent.svelte`
95
+ - `LicenseContent.svelte`
96
+ - `PrivacyContent.svelte`
97
+ - `PrivacyDashboard.svelte`
98
+ - `ServicesContent.svelte`
99
+ - `TermsConditionsContent.svelte`
100
+ - `TermsUseContent.svelte`
101
+
102
+ ---
103
+
25
104
  ## [1.22.0] - 2025-10-20
26
105
 
27
106
  ### Added
@@ -1231,7 +1310,9 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
1231
1310
 
1232
1311
  <!-- Link references -->
1233
1312
 
1234
- [Unreleased]: https://github.com/netwk-pro/netwk-pro.github.io/compare/v1.22.0...HEAD
1313
+ [Unreleased]: https://github.com/netwk-pro/netwk-pro.github.io/compare/v1.22.2...HEAD
1314
+ [1.22.2]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.22.2
1315
+ [1.22.1]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.22.1
1235
1316
  [1.22.0]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.22.0
1236
1317
  [1.21.1]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.21.1
1237
1318
  [1.21.0]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.21.0
@@ -1273,4 +1354,4 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
1273
1354
  [1.12.3]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.12.3
1274
1355
  [1.12.1]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.12.1
1275
1356
 
1276
- <!-- cspell:ignore qrcode cryptom otphelp -->
1357
+ <!-- cspell:ignore qrcode cryptom otphelp domcontentloaded -->
package/README.md CHANGED
@@ -83,7 +83,7 @@ This project follows the principles of [Keep a Changelog](https://keepachangelog
83
83
  │ ├── hooks.server.js # Injects CSP headers and permissions policy
84
84
  │ └── service-worker.js # Custom PWA service worker
85
85
  ├── static/ # Public assets served at site root
86
- │ ├── pgp/ # PGP keys and QR code images
86
+ │ ├── pgp/ # PGP keys
87
87
  │ ├── disableSw.js # Service worker bypass (via ?nosw param)
88
88
  │ ├── manifest.json # PWA metadata
89
89
  │ ├── robots.txt # SEO: allow/disallow crawlers
@@ -106,26 +106,19 @@ This project follows the principles of [Keep a Changelog](https://keepachangelog
106
106
 
107
107
  ### 🔐 `static/pgp/` Directory Structure
108
108
 
109
- This directory contains public PGP key files and their corresponding QR codes.
109
+ This directory contains public PGP key files. Their corresponding QR code images are now loaded dynamically from `src/lib/img/qr`. A dynamic QR code import utility in `src/lib/images.js` allows these files to be imported directly from `$lib`.
110
110
 
111
111
  ```bash
112
112
  static/
113
113
  ├── pgp/
114
114
  │ ├── contact@s.neteng.pro.asc # Public key for secure email
115
- │ ├── pgp-contact.png # QR code (PNG) for secure email key
116
- │ ├── pgp-contact.webp # Optimized WebP version of the QR code
117
- │ ├── pgp-security.png # QR code (PNG) for security contact key
118
- │ ├── pgp-security.webp # WebP version of the security QR code
119
- │ ├── pgp-support.png # QR code (PNG) for support key
120
- │ ├── pgp-support.webp # WebP version of the support QR code
121
115
  │ ├── security@s.neteng.pro.asc # Public key for security contact
122
116
  │ ├── support@neteng.pro.asc # Public key for general support
123
117
  └── ...
124
118
  ```
125
119
 
126
120
  - `.asc` files are **excluded from service worker precaching** but served directly via the `/pgp/[key]` route.
127
- - QR code images are **served statically** by the `/pgp` route using `<picture>` elements.
128
- - **WebP versions** are also used in the `/pgp` route, while the `/about` route imports **dynamic equivalents** from `src/lib/img/qr`.
121
+ - QR code images—including WebP and PNG versions—are **served dynamically** from `src/lib/img/qr` using `<picture>` elements.
129
122
  - This route does **not use fallback rendering**; only explicitly defined files are available and expected to resolve.
130
123
  - A dynamic `[key]/+server.js` handler under `src/routes/pgp/` serves the `.asc` files with appropriate `Content-Type` and download headers.
131
124
 
package/cspell.json CHANGED
@@ -45,6 +45,7 @@
45
45
  "mdsvex",
46
46
  "MSYS",
47
47
  "navigations",
48
+ "ncurc",
48
49
  "neteng",
49
50
  "netpro",
50
51
  "netwk",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@networkpro/web",
3
3
  "private": false,
4
- "version": "1.22.0",
4
+ "version": "1.22.2",
5
5
  "description": "Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro Strategies",
6
6
  "keywords": [
7
7
  "advisory",
@@ -52,7 +52,8 @@
52
52
  "verify": "npm run checkout",
53
53
  "delete": "rm -rf build .svelte-kit node_modules package-lock.json",
54
54
  "clean": "npm run delete && npm cache clean --force && npm install",
55
- "upgrade": "npm-check-updates -u",
55
+ "upgrade": "ncu -u --format group --color",
56
+ "check:updates": "ncu --format group --color",
56
57
  "test": "npm run test:all",
57
58
  "test:all": "npm run test:client -- --run && npm run test:server -- --run",
58
59
  "test:client": "vitest --config vitest.config.client.js",
@@ -78,26 +79,26 @@
78
79
  },
79
80
  "dependencies": {
80
81
  "dompurify": "^3.3.0",
81
- "posthog-js": "^1.278.0",
82
+ "posthog-js": "^1.282.0",
82
83
  "semver": "^7.7.3",
83
- "svelte": "5.41.1"
84
+ "svelte": "5.43.0"
84
85
  },
85
86
  "devDependencies": {
86
- "@eslint/compat": "^1.4.0",
87
+ "@eslint/compat": "^1.4.1",
87
88
  "@eslint/js": "^9.38.0",
88
89
  "@lhci/cli": "^0.15.1",
89
90
  "@playwright/test": "^1.56.1",
90
- "@sveltejs/adapter-vercel": "^6.0.0",
91
- "@sveltejs/kit": "2.47.2",
91
+ "@sveltejs/adapter-vercel": "^6.1.1",
92
+ "@sveltejs/kit": "2.48.3",
92
93
  "@sveltejs/vite-plugin-svelte": "^6.2.1",
93
94
  "@testing-library/jest-dom": "^6.9.1",
94
95
  "@testing-library/svelte": "^5.2.8",
95
- "@vitest/coverage-v8": "^3.2.4",
96
+ "@vitest/coverage-v8": "3.2.4",
96
97
  "autoprefixer": "^10.4.21",
97
- "browserslist": "^4.26.3",
98
+ "browserslist": "^4.27.0",
98
99
  "eslint": "^9.38.0",
99
100
  "eslint-config-prettier": "^10.1.8",
100
- "eslint-plugin-jsdoc": "^61.1.5",
101
+ "eslint-plugin-jsdoc": "^61.1.11",
101
102
  "eslint-plugin-svelte": "^3.12.5",
102
103
  "globals": "^16.4.0",
103
104
  "jsdom": "26.1.0",
@@ -106,7 +107,7 @@
106
107
  "markdownlint-cli2": "^0.18.1",
107
108
  "playwright": "^1.56.1",
108
109
  "postcss": "^8.5.6",
109
- "prettier": "^3.6.2",
110
+ "prettier": "3.6.2",
110
111
  "prettier-plugin-svelte": "^3.4.0",
111
112
  "stylelint": "^16.25.0",
112
113
  "stylelint-config-html": "^1.1.0",
@@ -116,10 +117,11 @@
116
117
  "svelte-eslint-parser": "^1.4.0",
117
118
  "svelte-preprocess": "^6.0.3",
118
119
  "typescript": "^5.9.3",
119
- "vite": "^7.1.11",
120
+ "vite": "^7.1.12",
121
+ "vite-plugin-devtools-json": "^1.0.0",
120
122
  "vite-plugin-lightningcss": "^0.0.5",
121
123
  "vite-tsconfig-paths": "^5.1.4",
122
- "vitest": "^3.2.4"
124
+ "vitest": "3.2.4"
123
125
  },
124
126
  "overrides": {
125
127
  "tmp": ">=0.2.4",
package/src/app.html CHANGED
@@ -53,7 +53,7 @@
53
53
  content="bx4ham0zkpvzztzu213bhpt76m9siq" />
54
54
  <!-- cspell:enable -->
55
55
 
56
- <meta name="generator" content="SvelteKit 2.47.2" />
56
+ <meta name="generator" content="SvelteKit 2.48.3" />
57
57
 
58
58
  <script src="/disableSw.js"></script>
59
59
 
@@ -73,7 +73,7 @@ This file is part of Network Pro.
73
73
  */
74
74
  const navLinks = [
75
75
  {
76
- label: 'SPDX License Identifier',
76
+ label: 'SPDX-License-Identifier',
77
77
  href: 'https://spdx.dev/learn/handling-license-info',
78
78
  target: PAGE.BLANK,
79
79
  text: 'CC-BY-4.0 OR GPL-3.0-or-later',
@@ -120,7 +120,7 @@ This file is part of Network Pro.
120
120
  <p>
121
121
  <strong>{COMPANY_INFO.NAME} ({COMPANY_INFO.APP_NAME}&trade;)</strong>
122
122
  <br />
123
- <em>Networking, Security, Privacy</em>
123
+ <em>Security, Networking, Privacy</em>
124
124
  </p>
125
125
  </section>
126
126
 
@@ -144,11 +144,10 @@ This file is part of Network Pro.
144
144
 
145
145
  <p>
146
146
  At <strong>{COMPANY_INFO.NAME} ({COMPANY_INFO.APP_NAME}&trade;)</strong>, we
147
- deliver network security and engineering, information security (IS),
148
- information technology (IT), cyber security, and digital privacy consulting
149
- with clarity, credibility, and care. We believe that real security doesn't
150
- have to come at the cost of user autonomy, and that privacy-minded solutions
151
- can be both practical and powerful.
147
+ deliver network security and engineering, cybersecurity, and digital privacy
148
+ consulting with clarity, credibility, and care. We believe that real security
149
+ doesn't have to come at the cost of user autonomy, and that privacy-minded
150
+ solutions can be both practical and powerful.
152
151
  </p>
153
152
 
154
153
  <p>
@@ -189,7 +188,7 @@ This file is part of Network Pro.
189
188
  <p>
190
189
  Additionally, {COMPANY_INFO.APP_NAME}&trade; provides
191
190
  <a href={servLink} target={PAGE.SELF}>on-site services</a>
192
- in the Greater Phoenix Metro Area (Maricopa County, AZ). Our
191
+ in the Greater Phoenix Metropolitan Area (Maricopa County, AZ). Our
193
192
  <a href={servLink} target={PAGE.SELF}>on-site services</a> are available to both
194
193
  consumers and businesses. In addition to consulting, we offer the following services:
195
194
  </p>
@@ -204,14 +203,14 @@ This file is part of Network Pro.
204
203
  <li><strong>Add or Configure a Printer</strong></li>
205
204
  </ul>
206
205
 
206
+ <div class="spacer"></div>
207
+
207
208
  <p>
208
209
  We also believe education is a core pillar of real-world security. That's why
209
210
  we invest in raising awareness—across both technical and general audiences—on
210
211
  best practices in digital privacy, secure design, and threat mitigation.
211
212
  </p>
212
213
 
213
- <div class="spacer"></div>
214
-
215
214
  <p>
216
215
  At {COMPANY_INFO.APP_NAME}&trade;, we deliver robust, intentional solutions
217
216
  for individuals and organizations that prioritize integrity — without
@@ -223,8 +222,8 @@ This file is part of Network Pro.
223
222
  Ready to take the next step? <a href={contactLink} target={PAGE.BLANK}
224
223
  >Let's connect</a>
225
224
  to explore how we can help fortify your home or business.
226
- <a href={consultLink} target={PAGE.BLANK}>Schedule a consultation</a> today and
227
- discover what's possible.
225
+ <a href={consultLink} target={PAGE.BLANK}
226
+ >Schedule a free, initial consultation</a> today and discover what's possible.
228
227
  </p>
229
228
 
230
229
  <p>
@@ -61,7 +61,7 @@ This file is part of Network Pro.
61
61
  rel={PAGE.REL}
62
62
  href="https://spdx.dev/learn/handling-license-info"
63
63
  target={PAGE.BLANK}>
64
- SPDX License Identifier
64
+ SPDX-License-Identifier
65
65
  </a>: &nbsp;<code>CC-BY-4.0 OR GPL-3.0-or-later</code>
66
66
  </span>
67
67
  </section>
@@ -77,7 +77,7 @@ This file is part of Network Pro.
77
77
  rel={PAGE.REL}
78
78
  href="https://spdx.dev/learn/handling-license-info"
79
79
  target={PAGE.BLANK}>
80
- SPDX License Identifier
80
+ SPDX-License-Identifier
81
81
  </a>: &nbsp;<code>CC-BY-4.0 OR GPL-3.0-or-later</code>
82
82
  </span>
83
83
  </section>
@@ -55,7 +55,7 @@ This file is part of Network Pro.
55
55
  ];
56
56
 
57
57
  /** @type {string} */
58
- const effectiveDate = 'October 10, 2025';
58
+ const effectiveDate = 'October 21, 2025';
59
59
 
60
60
  /** @type {string} */
61
61
  const classSmall = 'small-text';
@@ -112,7 +112,7 @@ This file is part of Network Pro.
112
112
  rel={PAGE.REL}
113
113
  href="https://spdx.dev/learn/handling-license-info"
114
114
  target={PAGE.BLANK}>
115
- SPDX License Identifier
115
+ SPDX-License-Identifier
116
116
  </a>: &nbsp;<code>CC-BY-4.0 OR GPL-3.0-or-later</code>
117
117
  </span>
118
118
  </section>
@@ -432,7 +432,10 @@ This file is part of Network Pro.
432
432
  href={prightsLink}
433
433
  target={PAGE.BLANK}>Privacy Rights Request Form</a
434
434
  >. Alternatively, you can email us at
435
- <strong>{CONTACT.PRIVACY}</strong>
435
+ <strong
436
+ ><a href={`mailto:${CONTACT.PRIVACY_LINK}`} target={PAGE.BLANK}
437
+ >{CONTACT.PRIVACY_LINK}</a
438
+ ></strong>
436
439
  with the subject line: "<strong>Privacy Rights Preferences</strong>".
437
440
  </p>
438
441
  {:else if link.id === 'third-party'}
@@ -87,7 +87,7 @@ This file is part of Network Pro.
87
87
  rel={PAGE.REL}
88
88
  href="https://spdx.dev/learn/handling-license-info"
89
89
  target={PAGE.BLANK}>
90
- SPDX License Identifier
90
+ SPDX-License-Identifier
91
91
  </a>: &nbsp;<code>CC-BY-4.0 OR GPL-3.0-or-later</code>
92
92
  </span>
93
93
  </section>
@@ -240,7 +240,10 @@ This file is part of Network Pro.
240
240
  href={prightsLink}
241
241
  target={PAGE.BLANK}>Privacy Rights Request Form</a
242
242
  >. Alternatively, you can email us at
243
- <strong>{CONTACT.PRIVACY}</strong>
243
+ <strong
244
+ ><a href={`mailto:${CONTACT.PRIVACY_LINK}`} target={PAGE.BLANK}
245
+ >{CONTACT.PRIVACY_LINK}</a
246
+ ></strong>
244
247
  with the subject line: "<strong>Privacy Rights Preferences</strong>".
245
248
  </p>
246
249
  </section>
@@ -44,7 +44,7 @@ This file is part of Network Pro.
44
44
  * @type {{ effectiveDate: string, classSmall: string }}
45
45
  */
46
46
  const constants = {
47
- effectiveDate: 'October 20, 2025',
47
+ effectiveDate: 'October 21, 2025',
48
48
  classSmall: 'small-text',
49
49
  };
50
50
  </script>
@@ -56,7 +56,7 @@ This file is part of Network Pro.
56
56
  rel={PAGE.REL}
57
57
  href="https://spdx.dev/learn/handling-license-info"
58
58
  target={PAGE.BLANK}>
59
- SPDX License Identifier
59
+ SPDX-License-Identifier
60
60
  </a>: &nbsp;<code>CC-BY-4.0 OR GPL-3.0-or-later</code>
61
61
  </span>
62
62
  </section>
@@ -83,7 +83,7 @@ This file is part of Network Pro.
83
83
  If you're a business seeking similar on-site solutions, we've got you covered!
84
84
  We offer tailored services to meet the unique needs of commercial clients as
85
85
  well. Simply <a href={consultLink} target={PAGE.BLANK}
86
- >schedule a consultation</a>
86
+ >schedule a free, initial consultation</a>
87
87
  or <a href={contactLink} target={PAGE.BLANK}>contact us directly</a> — we'd be
88
88
  happy to discuss how {COMPANY_INFO.APP_NAME}&trade; can support your business
89
89
  on-site.
@@ -67,7 +67,7 @@ This file is part of Network Pro.
67
67
  rel={PAGE.REL}
68
68
  href="https://spdx.dev/learn/handling-license-info"
69
69
  target={PAGE.BLANK}>
70
- SPDX License Identifier
70
+ SPDX-License-Identifier
71
71
  </a>: &nbsp;<code>CC-BY-4.0 OR GPL-3.0-or-later</code>
72
72
  </span>
73
73
  </section>
@@ -65,7 +65,7 @@ This file is part of Network Pro.
65
65
  * @type {{ effectiveDate: string, classSmall: string }}
66
66
  */
67
67
  const constants = {
68
- effectiveDate: 'May 21, 2025',
68
+ effectiveDate: 'October 21, 2025',
69
69
  classSmall: 'small-text',
70
70
  };
71
71
  </script>
@@ -77,7 +77,7 @@ This file is part of Network Pro.
77
77
  rel={PAGE.REL}
78
78
  href="https://spdx.dev/learn/handling-license-info"
79
79
  target={PAGE.BLANK}>
80
- SPDX License Identifier
80
+ SPDX-License-Identifier
81
81
  </a>: &nbsp;<code>CC-BY-4.0 OR GPL-3.0-or-later</code>
82
82
  </span>
83
83
  </section>
@@ -142,7 +142,7 @@ This file is part of Network Pro.
142
142
  These Terms of Use apply to all platforms associated with the Company,
143
143
  including but not limited to:
144
144
  <strong>
145
- GitHub, our main website (hosted via Netlify and GitHub Pages), Stack
145
+ GitHub, our main website (hosted via Vercel and GitHub Pages), Stack
146
146
  Overflow Teams, Nextcloud, communications on Discord and/or Slack, and
147
147
  our social media presence (e.g., Facebook, Instagram, X, and similar
148
148
  platforms).
@@ -11,7 +11,7 @@ This file is part of Network Pro.
11
11
  * @description Runs Playwright E2E tests with desktop and root route assertions.
12
12
  * @module tests/e2e
13
13
  * @author Scott Lopez
14
- * @updated 2025-09-17
14
+ * @updated 2025-10-21
15
15
  */
16
16
 
17
17
  import { expect, test } from '@playwright/test';
@@ -24,6 +24,8 @@ import {
24
24
 
25
25
  // Root route should display nav bar and about link
26
26
  test.describe('Desktop Tests', () => {
27
+ test.setTimeout(90_000); // increase timeout for all desktop tests
28
+
27
29
  test("should display the navigation bar and 'about' link", async ({
28
30
  page,
29
31
  }) => {
@@ -67,12 +69,15 @@ test.describe('Desktop Tests', () => {
67
69
  await page.waitForLoadState('domcontentloaded', { timeout: 60000 });
68
70
 
69
71
  const nav = await getVisibleNav(page);
70
-
71
72
  const aboutLink = nav.getByRole('link', { name: 'about' });
72
73
  await expect(aboutLink).toBeVisible();
73
74
  await aboutLink.click();
74
75
 
75
- await page.waitForURL('/about', { timeout: 60000 });
76
+ // safer wait pattern with load state
77
+ await Promise.all([
78
+ page.waitForLoadState('load'),
79
+ page.waitForURL('**/about', { timeout: 60000 }),
80
+ ]);
76
81
  await expect(page).toHaveURL(/\/about/);
77
82
  });
78
83
  }); // End Desktop Tests
@@ -11,7 +11,7 @@ This file is part of Network Pro.
11
11
  * @description Runs Playwright E2E tests with mobile assertions.
12
12
  * @module tests/e2e
13
13
  * @author Scott Lopez
14
- * @updated 2025-09-17
14
+ * @updated 2025-10-21
15
15
  */
16
16
 
17
17
  import { expect, test } from '@playwright/test';
@@ -19,6 +19,8 @@ import { getFooter, getVisibleNav, setMobileView } from './shared/helpers.js';
19
19
 
20
20
  // Mobile viewport smoke tests for the root route
21
21
  test.describe('Mobile Tests', () => {
22
+ test.setTimeout(90_000); // increase timeout for all desktop tests
23
+
22
24
  test('should display the main description text on mobile', async ({
23
25
  page,
24
26
  browserName,
@@ -57,13 +59,20 @@ test.describe('Mobile Tests', () => {
57
59
 
58
60
  await setMobileView(page);
59
61
  await page.goto('/');
62
+ await page.waitForLoadState('domcontentloaded', { timeout: 60000 });
60
63
 
61
64
  const nav = await getVisibleNav(page);
62
65
  const aboutLink = nav.getByRole('link', { name: 'about' });
63
66
  await expect(aboutLink).toBeVisible();
64
67
 
65
- await aboutLink.click();
66
- await expect(page).toHaveURL(/\/about/, { timeout: 60000 });
68
+ // combine click + wait in a Promise.all to ensure navigation completes
69
+ await Promise.all([
70
+ page.waitForLoadState('load'),
71
+ page.waitForURL('**/about', { timeout: 60000 }),
72
+ aboutLink.click(),
73
+ ]);
74
+
75
+ await expect(page).toHaveURL(/\/about/);
67
76
  });
68
77
 
69
78
  test('should display the footer on /about (mobile)', async ({
package/vite.config.js CHANGED
@@ -7,13 +7,24 @@ This file is part of Network Pro.
7
7
  ========================================================================= */
8
8
 
9
9
  import { sveltekit } from '@sveltejs/kit/vite';
10
+ import { resolve } from 'node:path';
11
+ import { fileURLToPath } from 'node:url';
10
12
  import { defineConfig } from 'vite';
13
+ import devtoolsJson from 'vite-plugin-devtools-json';
11
14
  import lightningcssPlugin from 'vite-plugin-lightningcss';
12
15
  import tsconfigPaths from 'vite-tsconfig-paths'; // NEW: tsconfig/jsconfig alias support
13
16
 
17
+ // Compute absolute project root
18
+ const projectRoot = fileURLToPath(new URL('.', import.meta.url));
19
+
14
20
  export default defineConfig({
15
21
  plugins: [
16
22
  tsconfigPaths(), // Insert before sveltekit()
23
+ devtoolsJson({
24
+ projectRoot: resolve(projectRoot), // Correct key name
25
+ normalizeForWindowsContainer: true, // optional, helps with path consistency on Windows or WSL
26
+ uuid: 'ad0db4f4-6172-4c1e-ae17-26b1bee53764',
27
+ }),
17
28
  sveltekit(),
18
29
  lightningcssPlugin({
19
30
  minify: process.env.NODE_ENV === 'production',
@@ -39,5 +39,14 @@ export default defineConfig({
39
39
  reporter: ['html'],
40
40
  reportsDirectory: './reports/client/coverage',
41
41
  },
42
+
43
+ // Svelte 5 / Runes compatibility (Vitest 4.x+)
44
+ optimizeDeps: {
45
+ include: [/svelte/], // Ensures .svelte files are pre-bundled with rune support
46
+ },
47
+
48
+ // Optional: quiet down noisy vite logs
49
+ logHeapUsage: false,
50
+ isolate: true,
42
51
  },
43
52
  });
@@ -1,173 +0,0 @@
1
- <!-- =========================================================================
2
- CODE_OF_CONDUCT.md
3
-
4
- Copyright © 2025 Network Pro Strategies (Network Pro™)
5
- SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
6
- This file is part of Network Pro.
7
- ========================================================================== -->
8
-
9
- <a name="top"></a>
10
-
11
- [SPDX-License-Identifier](https://spdx.dev/learn/handling-license-info/):
12
- `CC-BY-4.0 OR GPL-3.0-or-later`
13
-
14
- # Contributor Covenant Code of Conduct
15
-
16
- **Network Pro Strategies**
17
- **Effective Date:** March 21, 2025
18
-
19
- &nbsp;
20
-
21
- ## Contents
22
-
23
- - [Our Pledge](#pledge)
24
- - [Our Standards](#standards)
25
- - [Responsibilities](#response)
26
- - [Scope](#scope)
27
- - [Enforcement](#enforce)
28
- - [Attribution](#attribute)
29
-
30
- ---
31
-
32
- <section id="pledge">
33
-
34
- ## Our Pledge
35
-
36
- We as members, contributors, and leaders pledge to make participation in our
37
- community a harassment-free experience for everyone, regardless of age, body
38
- size, visible or invisible disability, ethnicity, sex characteristics, gender
39
- identity and expression, level of experience, education, socio-economic status,
40
- nationality, personal appearance, race, caste, color, religion, or sexual
41
- identity and orientation.
42
-
43
- We pledge to act and interact in ways that contribute to an open, welcoming,
44
- diverse, inclusive, and healthy community.
45
-
46
- </section>
47
-
48
- <section id="standards">
49
-
50
- ## Our Standards
51
-
52
- Examples of behavior that contributes to a positive environment for our
53
- community include:
54
-
55
- - Demonstrating empathy and kindness toward other people
56
- - Being respectful of differing opinions, viewpoints, and experiences
57
- - Giving and gracefully accepting constructive feedback
58
- - Accepting responsibility and apologizing to those affected by our mistakes,
59
- and learning from the experience
60
- - Focusing on what is best not just for us as individuals, but for the overall
61
- community
62
-
63
- Examples of unacceptable behavior include:
64
-
65
- - The use of sexualized language or imagery, and sexual attention or advances of
66
- any kind
67
- - Trolling, insulting or derogatory comments, and personal or political attacks
68
- - Public or private harassment
69
- - Publishing others' private information, such as a physical or email address,
70
- without their explicit permission
71
- - Other conduct which could reasonably be considered inappropriate in a
72
- professional setting
73
-
74
- <sub>[Back to top](#top)</sub>
75
-
76
- </section>
77
-
78
- <section id="response">
79
-
80
- ## Responsibilities
81
-
82
- Company and community leaders are responsible for clarifying and enforcing our standards of
83
- acceptable behavior and will take appropriate and fair corrective action in
84
- response to any behavior that they deem inappropriate, threatening, offensive,
85
- or harmful.
86
-
87
- Company and community leaders have the right and responsibility to remove, edit, or reject
88
- comments, commits, code, wiki edits, issues, and other contributions that are
89
- not aligned to this Code of Conduct, and will communicate reasons for moderation
90
- decisions when appropriate.
91
-
92
- Network Pro Strategies reserves the right, at its sole discretion, to remove, edit, or reject any contributions that are contrary to or detrimental to its business interests.
93
-
94
- <sub>[Back to top](#top)</sub>
95
-
96
- </section>
97
-
98
- <section id="scope">
99
-
100
- ## Scope
101
-
102
- This Code of Conduct applies within all community spaces, and also applies when
103
- an individual is officially representing the company or community in public spaces.
104
- Examples of representing our company or community include using an official email address,
105
- posting via an official social media account, or acting as an appointed
106
- representative at an online or offline event.
107
-
108
- <sub>[Back to top](#top)</sub>
109
-
110
- </section>
111
-
112
- <section id="enforce">
113
-
114
- ## Enforcement
115
-
116
- Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the abuse team at [abuse@neteng.pro](mailto:abuse@neteng.pro). All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances.
117
-
118
- The abuse team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
119
-
120
- Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project’s leadership.
121
-
122
- <sub>[Back to top](#top)</sub>
123
-
124
- </section>
125
-
126
- <section id="attribute">
127
-
128
- ## Attribution
129
-
130
- This Code of Conduct is adapted from the [Contributor Covenant][homepage],
131
- version 2.1, available at
132
- [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
133
-
134
- The **Enforcement** section is adapted from the
135
- [Contributor Covenant][homepage],
136
- version 1.4, available at
137
- [https://www.contributor-covenant.org/version/1/4/code-of-conduct/][v1.4].
138
-
139
- For answers to common questions about this code of conduct, see the FAQ at
140
- [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
141
- [https://www.contributor-covenant.org/translations][translations].
142
-
143
- [homepage]: https://www.contributor-covenant.org
144
- [v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
145
- [v1.4]: https://www.contributor-covenant.org/version/1/4/code-of-conduct/
146
- [FAQ]: https://www.contributor-covenant.org/faq
147
- [translations]: https://www.contributor-covenant.org/translations
148
-
149
- <sub>[Back to top](#top)</sub>
150
-
151
- </section>
152
-
153
- ---
154
-
155
- <div style="font-size: 12px; font-weight: bold; text-align: center;">
156
-
157
- [Home](https://netwk.pro) &nbsp; | &nbsp; [Terms of Use](https://netwk.pro/terms-of-use)
158
- [Privacy Policy](https://netwk.pro/privacy) &nbsp; | &nbsp; [Legal](https://netwk.pro/license)
159
-
160
- </div>
161
-
162
- &nbsp;
163
-
164
- <span style="font-size: 12px; text-align: center;">
165
-
166
- Copyright &copy; 2025
167
- **[Network Pro Strategies](https://netwk.pro/)** (Network Pro&trade;)
168
-
169
- Network Pro&trade;, the shield logo, and the "Locking Down Networks...&trade;" slogan are [trademarks](https://netwk.pro/license#trademark) of Network Pro Strategies.
170
-
171
- Licensed under **[CC BY 4.0](https://netwk.pro/license#cc-by)** and the **[GNU GPL](https://netwk.pro/license#gnu-gpl)**, as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
172
-
173
- </span>
package/CONTRIBUTING.md DELETED
@@ -1,214 +0,0 @@
1
- <!-- =========================================================================
2
- CONTRIBUTING.md
3
-
4
- Copyright © 2025 Network Pro Strategies (Network Pro™)
5
- SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
6
- This file is part of Network Pro.
7
- ========================================================================== -->
8
-
9
- <a name="top"></a>
10
-
11
- [SPDX-License-Identifier](https://spdx.dev/learn/handling-license-info/):
12
- `CC-BY-4.0 OR GPL-3.0-or-later`
13
-
14
- # 🤝 Contributing to Network Pro Strategies
15
-
16
- **Network Pro Strategies**
17
- **Effective Date:** July 31, 2025
18
-
19
- &nbsp;
20
-
21
- Thanks for your interest in improving **Network Pro Strategies** (Network Pro™)! We're always looking for collaborators and contributors of all skill levels. This guide will help you get started quickly and effectively.
22
-
23
- Following these guidelines helps us all work together efficiently and respectfully. 🙌
24
-
25
- ---
26
-
27
- ## 🐛 Using the Issue Tracker
28
-
29
- Use the [issue tracker](https://github.com/netwk-pro/netwk-pro.github.io/issues) for:
30
-
31
- - Reporting [bugs](#bug-reports)
32
- - Submitting [feature requests](#feature-requests)
33
- - Proposing [pull requests](#pull-requests)
34
-
35
- 🚫 Please do **not** use issues for general support — instead, head to:
36
-
37
- - [Stack Overflow Teams](https://stack.neteng.pro/)
38
- - [GitHub Discussions](https://discuss.neteng.pro)
39
- - [Discord](https://discord.neteng.pro)
40
-
41
- ---
42
-
43
- <section id="bug-reports">
44
-
45
- ## 🐞 Bug Reports
46
-
47
- A bug is a clear, reproducible issue in the code. High-quality reports help us fix problems faster.
48
-
49
- ### ✅ A good bug report includes
50
-
51
- - A **descriptive title**
52
- - Steps to reproduce
53
- - Your environment (OS, browser, version)
54
- - Expected vs actual behavior
55
- - Links to a minimal reproducible case (if possible)
56
-
57
- _Example_:
58
-
59
- <!-- markdownlint-disable MD042 -->
60
-
61
- > **Title**: Checkbox toggle fails on Safari 17
62
- > Steps:
63
- >
64
- > 1. Visit page X
65
- > 2. Click toggle
66
- > 3. Observe that...
67
- > Expected: ...
68
- > Actual: ...
69
- > [Live example](#)
70
-
71
- <!-- markdownlint-enable MD042 -->
72
-
73
- </section>
74
-
75
- &nbsp;
76
-
77
- <sub>[Back to top](#top)</sub>
78
-
79
- ---
80
-
81
- <section id="feature-requests">
82
-
83
- ## ✨ Feature Requests
84
-
85
- Feature requests are welcome — just make sure it aligns with the project’s goals.
86
-
87
- Before posting:
88
-
89
- - Search for similar requests
90
- - Clearly describe the problem it solves
91
- - Explain the use case and who benefits
92
-
93
- Strong proposals help us prioritize.
94
-
95
- </section>
96
-
97
- &nbsp;
98
-
99
- <sub>[Back to top](#top)</sub>
100
-
101
- ---
102
-
103
- <section id="pull-requests">
104
-
105
- ## 🔁 Pull Requests
106
-
107
- Well-scoped, well-documented pull requests are the lifeblood of open-source.
108
-
109
- ### ⚠️ Ask First
110
-
111
- Before large PRs (new features, refactors, dependency upgrades), please check with maintainers first.
112
-
113
- ### 📋 Steps
114
-
115
- 1. **Fork the repo & set remotes**:
116
-
117
- ```bash
118
- git clone https://github.com/<your-username>/netwk-pro.github.io.git
119
- cd netwk-pro.github.io
120
- git remote add upstream https://github.com/netwk-pro/netwk-pro.github.io.git
121
- ```
122
-
123
- 2. **Stay Updated**
124
-
125
- ```bash
126
- git checkout master
127
- git pull upstream master
128
- ```
129
-
130
- 3. **Create a topic branch:**
131
-
132
- ```bash
133
- git checkout -b my-feature
134
- ```
135
-
136
- 4. **Install & test locally:**
137
-
138
- ```bash
139
- npm install
140
- npm run checkout
141
- ```
142
-
143
- 5. **Make your changes**
144
-
145
- (and commit them in logical chunks with good commit messages).
146
-
147
- 6. **Build:**
148
-
149
- ```bash
150
- npm run build
151
- git add build/
152
- git commit -m "Build: update assets"
153
- ```
154
-
155
- 7. **Push and open a PR:**
156
-
157
- ```bash
158
- git push origin my-feature
159
- ```
160
-
161
- Open your PR with a clear title, description, and reference the related issue (if any).
162
-
163
- </section>
164
-
165
- &nbsp;
166
-
167
- <sub>[Back to top](#top)</sub>
168
-
169
- ---
170
-
171
- ## ✅ Coding & Style Notes
172
-
173
- - Use the defined code style (Prettier, ESLint, Stylelint, markdownlint)
174
- - Avoid unrelated changes in the same PR
175
- - Keep PRs focused and test-covered when appropriate
176
-
177
- &nbsp;
178
-
179
- ## 🔐 Legal Notice
180
-
181
- By submitting a pull request, you agree to license your contributions under:
182
-
183
- - [CC BY 4.0](https://netwk.pro/license#cc-by)
184
- - [GNU GPL 3.0 or later](https://netwk.pro/license#gnu-gpl)
185
-
186
- &nbsp;
187
-
188
- <sub>[Back to top](#top)</sub>
189
-
190
- &nbsp;
191
-
192
- _Thanks again for your contribution and for being part of the Network Pro&trade; community!_
193
-
194
- ---
195
-
196
- <div style="font-size: 12px; font-weight: bold; text-align: center;">
197
-
198
- [Home](https://netwk.pro) &nbsp; | &nbsp; [Terms of Use](https://netwk.pro/terms-of-use)
199
- [Privacy Policy](https://netwk.pro/privacy) &nbsp; | &nbsp; [Legal](https://netwk.pro/license)
200
-
201
- </div>
202
-
203
- &nbsp;
204
-
205
- <span style="font-size: 12px; text-align: center;">
206
-
207
- Copyright &copy; 2025
208
- **[Network Pro Strategies](https://netwk.pro/)** (Network Pro&trade;)
209
-
210
- Network Pro&trade;, the shield logo, and the "Locking Down Networks...&trade;" slogan are [trademarks](https://netwk.pro/license#trademark) of Network Pro Strategies.
211
-
212
- Licensed under **[CC BY 4.0](https://netwk.pro/license#cc-by)** and the **[GNU GPL](https://netwk.pro/license#gnu-gpl)**, as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
213
-
214
- </span>