@networkpro/web 1.18.5 → 1.20.0

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.
Files changed (68) hide show
  1. package/.github/workflows/build-and-publish.yml +5 -4
  2. package/.github/workflows/lighthouse.yml +1 -1
  3. package/.github/workflows/meta-check.yml +1 -1
  4. package/.github/workflows/playwright.yml +1 -1
  5. package/.github/workflows/publish-test.yml +5 -4
  6. package/.github/workflows/templates/publish.template.yml +5 -4
  7. package/CHANGELOG.md +116 -1
  8. package/cspell.json +3 -0
  9. package/package.json +16 -16
  10. package/scripts/auditScripts.js +1 -1
  11. package/scripts/bundleCss.js +1 -1
  12. package/scripts/checkEnv.js +1 -1
  13. package/scripts/checkNode.js +1 -1
  14. package/scripts/checkVersions.js +1 -1
  15. package/scripts/generateTest.js +1 -1
  16. package/scripts/openReport.js +1 -1
  17. package/src/app.html +3 -6
  18. package/src/hooks.server.js +10 -7
  19. package/src/lib/README.md +160 -0
  20. package/src/lib/components/FullWidthSection.svelte +0 -9
  21. package/src/lib/components/ServiceSummaryTable.svelte +113 -0
  22. package/src/lib/components/foss/index.js +21 -0
  23. package/src/lib/components/index.js +31 -0
  24. package/src/lib/components/layout/HeaderDefault.svelte +3 -1
  25. package/src/lib/components/layout/HeaderHome.svelte +6 -5
  26. package/src/lib/components/layout/index.js +21 -0
  27. package/src/lib/images.js +1 -1
  28. package/src/lib/index.js +15 -5
  29. package/src/lib/meta.js +14 -9
  30. package/src/lib/pages/AboutContent.svelte +51 -15
  31. package/src/lib/pages/HomeContent.svelte +11 -1
  32. package/src/lib/pages/LicenseContent.svelte +3 -3
  33. package/src/lib/pages/PrivacyContent.svelte +31 -1
  34. package/src/lib/pages/ServicesContent.svelte +545 -0
  35. package/src/lib/pages/index.js +28 -0
  36. package/src/lib/stores/posthog.js +2 -1
  37. package/src/lib/styles/css/default.css +95 -0
  38. package/src/lib/styles/global.min.css +1 -1
  39. package/src/lib/styles/index.js +0 -1
  40. package/src/lib/types/README.md +50 -0
  41. package/src/lib/types/appConstants.js +1 -1
  42. package/src/lib/types/fossTypes.js +1 -1
  43. package/src/lib/utils/getUTMParams.js +1 -1
  44. package/src/lib/utils/purify.js +1 -1
  45. package/src/lib/utils/redirect.js +1 -1
  46. package/src/lib/utils/utm.js +2 -2
  47. package/src/routes/+layout.svelte +3 -11
  48. package/src/routes/+page.svelte +9 -7
  49. package/src/routes/consultation/+page.svelte +1 -1
  50. package/src/routes/links/+page.svelte +3 -2
  51. package/src/routes/services/+page.server.js +18 -0
  52. package/src/routes/services/+page.svelte +65 -0
  53. package/src/routes/status/+page.server.js +1 -1
  54. package/src/service-worker.js +2 -2
  55. package/static/bin/contact.vcf +1 -2
  56. package/static/disableSw.js +1 -1
  57. package/static/sitemap.xml +17 -5
  58. package/tests/e2e/app.spec.js +1 -1
  59. package/tests/e2e/mobile.spec.js +1 -1
  60. package/tests/e2e/shared/helpers.js +1 -1
  61. package/tests/meta/meta.test.js +1 -1
  62. package/tests/unit/client/lib/PWAInstallButton.test.js +80 -0
  63. package/tests/unit/client/lib/utils/redirect.test.js +1 -1
  64. package/tests/unit/server/internal/auditCoverage.test.js +1 -1
  65. package/tests/unit/server/lib/utils/purify.test.js +1 -1
  66. package/tests/unit/server/meta.test.js +1 -1
  67. package/vercel.json +12 -0
  68. package/vitest-setup-client.js +9 -0
@@ -0,0 +1,160 @@
1
+ <!-- =====================================================================
2
+ src/lib/README.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
+ # `/src/lib` Overview
10
+
11
+ This directory contains all reusable **modules**, **assets**, and **constants** used across the app.
12
+ It acts as the project’s _internal library_.
13
+
14
+ ---
15
+
16
+ ## 📦 Importing from `$lib`
17
+
18
+ SvelteKit automatically aliases `$lib` → `src/lib/`, allowing you to import from this directory anywhere in the project:
19
+
20
+ ```js
21
+ import { something } from '$lib';
22
+ ```
23
+
24
+ > 💡 You don’t need to use relative paths like `../../../lib/...`; the `$lib` alias handles that automatically.
25
+
26
+ ---
27
+
28
+ ## 📁 Directory Structure
29
+
30
+ ```bash
31
+ src/lib/
32
+ ├── components/ # Svelte UI components
33
+ ├── img/ # Static image assets
34
+ ├── images.js # Imports and re-exports images from /img/
35
+ ├── index.js # Main export hub (images, constants, etc.)
36
+ └── README.md # You are here
37
+ ```
38
+
39
+ ---
40
+
41
+ ## 🖼️ Image Imports
42
+
43
+ All image assets are re-exported via `images.js` and then made available in `$lib/index.js`.
44
+
45
+ This allows images to be imported directly from `$lib`:
46
+
47
+ ```js
48
+ import { logoPng, faviconSvg } from '$lib';
49
+ ```
50
+
51
+ **Example (Svelte component):**
52
+
53
+ ```svelte
54
+ <script>
55
+ import { logoPng } from '$lib';
56
+ </script>
57
+
58
+ <img src={logoPng} alt="Network Pro Logo" />
59
+ ```
60
+
61
+ If you prefer, you can still import by full path:
62
+
63
+ ```js
64
+ import logoPng from '$lib/img/logo-web.png';
65
+ ```
66
+
67
+ Both are valid — the re-exports simply make imports cleaner and centralized.
68
+
69
+ ---
70
+
71
+ ## ⚙️ Constants and Utilities
72
+
73
+ `index.js` defines and exports a `CONSTANTS` object for consistent app-wide values.
74
+ These are grouped into logical categories for easy reference.
75
+
76
+ ```js
77
+ import { CONSTANTS } from '$lib';
78
+
79
+ console.log(CONSTANTS.COMPANY_INFO.APP_NAME); // "Network Pro"
80
+ ```
81
+
82
+ ### 🏢 COMPANY_INFO
83
+
84
+ | Key | Description | Example |
85
+ | ---------- | ---------------------------- | ------------------------ |
86
+ | `NAME` | Full company name | `Network Pro Strategies` |
87
+ | `APP_NAME` | Application or branding name | `Network Pro` |
88
+ | `YEAR` | Copyright / app year | `2025` |
89
+
90
+ ### 📬 CONTACT
91
+
92
+ | Key | Description | Example |
93
+ | --------- | ----------------------- | --------------------------- |
94
+ | `EMAIL` | General support email | `support (at) neteng.pro` |
95
+ | `SECURE` | Secure contact address | `contact (at) s.neteng.pro` |
96
+ | `PRIVACY` | Privacy-related contact | `privacy (at) netwk.pro` |
97
+ | `PHONE` | Company phone number | `(623) 252-4350` |
98
+
99
+ ### 🗂️ PAGE
100
+
101
+ | Key | Description | Example |
102
+ | ------- | --------------------- | --------------------- |
103
+ | `BLANK` | Opens a new tab | `_blank` |
104
+ | `REL` | Default rel attribute | `noopener noreferrer` |
105
+ | `SELF` | Opens in same tab | `_self` |
106
+
107
+ ### 🧭 NAV
108
+
109
+ | Key | Description | Example |
110
+ | --------- | ----------------------- | ------------- |
111
+ | `BACKTOP` | Label for “back to top” | `Back to top` |
112
+ | `HREFTOP` | Anchor link to top | `#top` |
113
+
114
+ ### 🌐 LINKS
115
+
116
+ | Key | Description | Example |
117
+ | ------ | ---------------- | ------------------------ |
118
+ | `HOME` | Company home URL | `https://netwk.pro` |
119
+ | `BLOG` | Company blog URL | `https://blog.netwk.pro` |
120
+
121
+ 🧠 Tip: If you add new global constants (e.g., API endpoints, metadata, etc.),
122
+ extend `CONSTANTS` here and update this table for quick reference.
123
+
124
+ ---
125
+
126
+ ## 🧩 Components (if applicable)
127
+
128
+ Reusable components can also be exported from this directory:
129
+
130
+ ```js
131
+ import { Logo } from '$lib';
132
+ ```
133
+
134
+ If you add more UI components later, re-export them from `index.js` for easy access.
135
+
136
+ ---
137
+
138
+ ## 🧠 Developer Notes
139
+
140
+ `$lib` is an alias — not a relative path.
141
+ It points directly to `src/lib/`.
142
+
143
+ `export * from './images.js';` re-exports all image imports so you can reference them easily.
144
+
145
+ Keep asset imports centralized in `images.js` to simplify maintenance.
146
+
147
+ No need to modify imports when adding new images — just add them to `images.js`.
148
+
149
+ ---
150
+
151
+ <span style="font-size: 12px; text-align: center;">
152
+
153
+ Copyright &copy; 2025
154
+ **[Network Pro Strategies](https://netwk.pro) (Network Pro&trade;)**
155
+
156
+ Network Pro&trade;, the shield logo, and the "Locking Down Networks...&trade;" slogan are [trademarks](https://netwk.pro/license#trademark) of Network Pro Strategies.
157
+
158
+ 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](https://www.fsf.org), either version 3 of the License, or (at your option) any later version.
159
+
160
+ </span>
@@ -31,12 +31,3 @@ This file is part of Network Pro.
31
31
  <slot></slot>
32
32
  </div>
33
33
  </div>
34
-
35
- <style>
36
- .full-width-section.centered {
37
- display: flex;
38
- justify-content: center;
39
- flex-direction: column;
40
- min-height: 80vh;
41
- }
42
- </style>
@@ -0,0 +1,113 @@
1
+ <!-- ==========================================================================
2
+ src/lib/components/ServiceSummaryTable.svelte
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
+ <script>
10
+ import { onMount } from 'svelte';
11
+
12
+ let activeService = '';
13
+
14
+ // Detect which hash (anchor) is active
15
+ onMount(() => {
16
+ // Set initial hash (e.g. when user loads /services#wifi)
17
+ activeService = window.location.hash.replace('#', '');
18
+
19
+ // Update on hash change
20
+ const handleHashChange = () => {
21
+ activeService = window.location.hash.replace('#', '');
22
+ };
23
+
24
+ window.addEventListener('hashchange', handleHashChange);
25
+ return () => window.removeEventListener('hashchange', handleHashChange);
26
+ });
27
+
28
+ // Keep only this services array (your actual data)
29
+ export let services = [
30
+ {
31
+ id: 'modem',
32
+ name: 'Home Modem Setup',
33
+ price: '$99.99',
34
+ duration: '45–60 min',
35
+ summary:
36
+ 'Activate and secure your modem, verify connectivity and speeds.',
37
+ },
38
+ {
39
+ id: 'basic',
40
+ name: 'Basic Router Setup',
41
+ price: '$99.99',
42
+ duration: '60–75 min',
43
+ summary: 'Configure wired routing, DHCP, and security for LAN devices.',
44
+ },
45
+ {
46
+ id: 'wifi',
47
+ name: 'Wi-Fi & Wireless Network Setup',
48
+ price: '$149.99',
49
+ duration: '75–90 min',
50
+ summary: 'Establish reliable Wi-Fi coverage and secure wireless access.',
51
+ },
52
+ {
53
+ id: 'tshoot',
54
+ name: 'Network Troubleshooting',
55
+ price: 'from $49.99',
56
+ duration: '30-min diagnostic + hourly',
57
+ summary: 'Identify and resolve connectivity or performance issues.',
58
+ },
59
+ {
60
+ id: 'security',
61
+ name: 'Network Security Review',
62
+ price: '$79.99',
63
+ duration: '60–75 min',
64
+ summary:
65
+ 'Harden router and Wi-Fi configurations, eliminate vulnerabilities.',
66
+ },
67
+ {
68
+ id: 'device',
69
+ name: 'Add a Wi-Fi Device',
70
+ price: '$34.99',
71
+ duration: '15–30 min',
72
+ summary: 'Connect and verify new wireless devices on your home network.',
73
+ },
74
+ {
75
+ id: 'print',
76
+ name: 'Add or Configure a Printer',
77
+ price: '$74.99',
78
+ duration: '45–60 min',
79
+ summary: 'Install and configure printers for network and device access.',
80
+ },
81
+ ];
82
+ </script>
83
+
84
+ <section id="service-summary">
85
+ <h2>Service Summary</h2>
86
+ <p>
87
+ Quickly compare our range of on-site services designed primarily for
88
+ individual consumers. Each offering is crafted for convenience, reliability,
89
+ and top-tier support.<br />
90
+ Each item links to a detailed description below.
91
+ </p>
92
+
93
+ <table class="service-table">
94
+ <thead>
95
+ <tr>
96
+ <th>Service</th>
97
+ <th>Price</th>
98
+ <th>Estimated Time</th>
99
+ <th>Description</th>
100
+ </tr>
101
+ </thead>
102
+ <tbody>
103
+ {#each services as svc}
104
+ <tr class:selected={svc.id === activeService}>
105
+ <td><a href={'#' + svc.id}>{svc.name}</a></td>
106
+ <td>{svc.price}</td>
107
+ <td>{svc.duration}</td>
108
+ <td>{svc.summary}</td>
109
+ </tr>
110
+ {/each}
111
+ </tbody>
112
+ </table>
113
+ </section>
@@ -0,0 +1,21 @@
1
+ /* ==========================================================================
2
+ src/lib/components/foss/index.js
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
+ * Library index file
11
+ *
12
+ * @file index.js
13
+ * @description Export point for FOSS library components
14
+ * @module src/lib/components/foss
15
+ * @author Scott Lopez
16
+ * @updated 2025-10-05
17
+ */
18
+
19
+ export { default as FossFeatures } from './FossFeatures.svelte';
20
+ export { default as FossItemContent } from './FossItemContent.svelte';
21
+ export { default as ObtainiumBlock } from './ObtainiumBlock.svelte';
@@ -0,0 +1,31 @@
1
+ /* ==========================================================================
2
+ src/lib/components/index.js
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
+ * Library index file
11
+ *
12
+ * @file index.js
13
+ * @description Export point for library components
14
+ * @module src/lib/components
15
+ * @author Scott Lopez
16
+ * @updated 2025-10-05
17
+ */
18
+
19
+ export { default as Badges } from './Badges.svelte';
20
+ export { default as CodeBlock } from './CodeBlock.svelte';
21
+ export { default as ContainerSection } from './ContainerSection.svelte';
22
+ export * from './foss/index.js';
23
+ export { default as FullWidthSection } from './FullWidthSection.svelte';
24
+ export * from './layout/index.js';
25
+ export { default as LegalNav } from './LegalNav.svelte';
26
+ export { default as Logo } from './Logo.svelte';
27
+ export { default as MetaTags } from './MetaTags.svelte';
28
+ export { default as PWAInstallButton } from './PWAInstallButton.svelte';
29
+ export { default as RedirectPage } from './RedirectPage.svelte';
30
+ export { default as ServiceSummaryTable } from './ServiceSummaryTable.svelte';
31
+ export { default as SocialMedia } from './SocialMedia.svelte';
@@ -19,6 +19,7 @@ This file is part of Network Pro.
19
19
 
20
20
  const homeLink = base || '/';
21
21
  const aboutLink = `${base}/about`;
22
+ const servLink = `${base}/services`;
22
23
  const lhubLink = `${base}/links`;
23
24
  const fossLink = `${base}/foss-spotlight`;
24
25
  const blogLink = 'https://blog.netwk.pro';
@@ -42,13 +43,14 @@ This file is part of Network Pro.
42
43
  const nav = [
43
44
  { label: 'home', href: homeLink, target: PAGE.SELF, external: false },
44
45
  { label: 'about', href: aboutLink, target: PAGE.SELF, external: false },
45
- { label: 'foss', href: fossLink, target: PAGE.SELF, external: false },
46
+ { label: 'services', href: servLink, target: PAGE.SELF, external: false },
46
47
  {
47
48
  label: 'blog',
48
49
  href: blogLink,
49
50
  target: PAGE.SELF,
50
51
  external: false,
51
52
  },
53
+ { label: 'foss', href: fossLink, target: PAGE.SELF, external: false },
52
54
  {
53
55
  label: 'discussions',
54
56
  href: discussLink,
@@ -15,12 +15,12 @@ This file is part of Network Pro.
15
15
 
16
16
  //console.log(CONSTANTS.COMPANY_INFO.APP_NAME);
17
17
 
18
- const { PAGE } = CONSTANTS;
18
+ const { PAGE, LINKS } = CONSTANTS;
19
19
 
20
20
  const aboutLink = `${base}/about`;
21
21
  const fossLink = `${base}/foss-spotlight`;
22
+ const servLink = `${base}/services`;
22
23
  const lhubLink = `${base}/links`;
23
- const blogLink = 'https://blog.netwk.pro';
24
24
  const discussLink =
25
25
  'https://github.com/netwk-pro/netwk-pro.github.io/discussions';
26
26
 
@@ -40,13 +40,14 @@ This file is part of Network Pro.
40
40
  */
41
41
  const nav = [
42
42
  { label: 'about', href: aboutLink, target: PAGE.SELF, external: false },
43
- { label: 'foss', href: fossLink, target: PAGE.SELF, external: false },
43
+ { label: 'services', href: servLink, target: PAGE.SELF, external: false },
44
44
  {
45
45
  label: 'blog',
46
- href: blogLink,
46
+ href: LINKS.BLOG,
47
47
  target: PAGE.SELF,
48
48
  external: false,
49
49
  },
50
+ { label: 'foss', href: fossLink, target: PAGE.SELF, external: false },
50
51
  {
51
52
  label: 'discussions',
52
53
  href: discussLink,
@@ -95,4 +96,4 @@ This file is part of Network Pro.
95
96
  </nav>
96
97
  <!-- END HOME HEADER -->
97
98
 
98
- <!-- cspell:ignore lhub -->
99
+ <!-- cspell:ignore lhub servLink -->
@@ -0,0 +1,21 @@
1
+ /* ==========================================================================
2
+ src/lib/components/layout/index.js
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
+ * Library index file
11
+ *
12
+ * @file index.js
13
+ * @description Export point for layout components
14
+ * @module src/lib/components/layout
15
+ * @author Scott Lopez
16
+ * @updated 2025-10-05
17
+ */
18
+
19
+ export { default as Footer } from './Footer.svelte';
20
+ export { default as HeaderDefault } from './HeaderDefault.svelte';
21
+ export { default as HeaderHome } from './HeaderHome.svelte';
package/src/lib/images.js CHANGED
@@ -12,7 +12,7 @@ This file is part of Network Pro.
12
12
  * @file images.js
13
13
  * @description Provides convenient access to images in the src/lib/img directory
14
14
  * @module src/lib
15
- * @author SunDevil311
15
+ * @author Scott Lopez
16
16
  * @updated 2025-06-16
17
17
  */
18
18
 
package/src/lib/index.js CHANGED
@@ -10,16 +10,26 @@ This file is part of Network Pro.
10
10
  * Library index file
11
11
  *
12
12
  * @file index.js
13
- * @description Main export point for library components, utilities, and assets
13
+ * @description Main export hub for $lib modules
14
+ *
15
+ * Components, images, and utilities are organized in submodules
16
+ * and re-exported here for flat `$lib` imports.
14
17
  * @module src/lib
15
- * @author SunDevil311
16
- * @updated 2025-06-03
18
+ * @author Scott Lopez
19
+ * @updated 2025-10-10
17
20
  */
18
21
 
19
- // Re-export images from dedicated images.js file
20
- // This maintains backward compatibility with existing imports
22
+ // Re-export all images so they can be imported directly from `$lib`
23
+ // Example usage:
24
+ // import { logoPng } from '$lib';
21
25
  export * from './images.js';
22
26
 
27
+ // Re-export all components so they can be imported directly from `$lib`
28
+ export * from './components/index.js';
29
+
30
+ // Re-export all pages so they can be imported directly from `$lib`
31
+ export * from './pages/index.js';
32
+
23
33
  // Export utility functions
24
34
  // Uncomment and adjust these as needed for your project
25
35
  // export * from './utils/formatting.js';
package/src/lib/meta.js CHANGED
@@ -20,46 +20,51 @@ const meta = {
20
20
  title:
21
21
  'Security, Networking, Privacy — Network Pro Strategies',
22
22
  description:
23
- 'Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro',
23
+ 'Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro Strategies',
24
24
  },
25
25
  '/about': {
26
26
  title: 'About Us — Network Pro™',
27
- description: 'About Us | Security, Networking, Privacy — Network Pro',
27
+ description: 'About Us | Security, Networking, Privacy — Network Pro Strategies',
28
28
  },
29
29
  '/privacy': {
30
30
  title: 'Privacy Policy — Network Pro™',
31
31
  description:
32
- 'Privacy Policy | Security, Networking, Privacy — Network Pro',
32
+ 'Privacy Policy | Security, Networking, Privacy — Network Pro Strategies',
33
33
  },
34
34
  '/terms-of-use': {
35
35
  title: 'Website Terms of Use — Network Pro™',
36
36
  description:
37
- 'Website Terms of Use | Security, Networking, Privacy — Network Pro',
37
+ 'Website Terms of Use | Security, Networking, Privacy — Network Pro Strategies',
38
38
  },
39
39
  '/license': {
40
40
  title: 'Legal, Copyright, and Licensing — Network Pro™',
41
41
  description:
42
- 'Legal, Copyright, and Licensing | Security, Networking, Privacy — Network Pro',
42
+ 'Legal, Copyright, and Licensing | Security, Networking, Privacy — Network Pro Strategies',
43
43
  },
44
44
  '/terms-conditions': {
45
45
  title: 'Consulting Terms and Conditions — Network Pro™',
46
46
  description:
47
- 'Terms and Conditions | Security, Networking, Privacy — Network Pro',
47
+ 'Terms and Conditions | Security, Networking, Privacy — Network Pro Strategies',
48
48
  },
49
49
  '/foss-spotlight': {
50
50
  title: 'FOSS Spotlight — Network Pro™',
51
51
  description:
52
- 'FOSS Spotlight | Security, Networking, Privacy — Network Pro',
52
+ 'FOSS Spotlight | Security, Networking, Privacy — Network Pro Strategies',
53
53
  },
54
54
  '/privacy-dashboard': {
55
55
  title: 'Privacy Dashboard — Network Pro™',
56
56
  description:
57
- 'Privacy Dashboard | Security, Networking, Privacy — Network Pro',
57
+ 'Privacy Dashboard | Security, Networking, Privacy — Network Pro Strategies',
58
58
  },
59
59
  '/pgp': {
60
60
  title: 'Public PGP Keys — Network Pro™',
61
61
  description:
62
- 'Public encryption keys for secure communication | Security, Networking, Privacy — Network Pro',
62
+ 'Public encryption keys for secure communication | Security, Networking, Privacy — Network Pro Strategies',
63
+ },
64
+ '/services': {
65
+ title: "On-Site Services - Network Pro™",
66
+ description:
67
+ 'On-Site Services | Security, Networking, Privacy — Network Pro Strategies'
63
68
  },
64
69
  // Excludes redirect-only routes like /contact, /consultation, /privacy-rights
65
70
  };
@@ -23,7 +23,7 @@ This file is part of Network Pro.
23
23
 
24
24
  //console.log(CONSTANTS.COMPANY_INFO.APP_NAME);
25
25
 
26
- const { COMPANY_INFO, PAGE } = CONSTANTS;
26
+ const { COMPANY_INFO, CONTACT, PAGE } = CONSTANTS;
27
27
 
28
28
  /**
29
29
  * URL to the Contact Form route, using the base path
@@ -31,6 +31,12 @@ This file is part of Network Pro.
31
31
  */
32
32
  const contactLink = `${base}/contact`;
33
33
 
34
+ /**
35
+ * URL to the Consultation route, using the base path
36
+ * @type {string}
37
+ */
38
+ const consultLink = `${base}/consultation`;
39
+
34
40
  /**
35
41
  * URL to the PGP route, using the base path
36
42
  * @type {string}
@@ -138,11 +144,11 @@ This file is part of Network Pro.
138
144
  <p>
139
145
  <strong>{COMPANY_INFO.NAME} ({COMPANY_INFO.APP_NAME}&trade;)</strong>
140
146
  <br />
141
- <em>Remote-First Cybersecurity & Privacy Consulting</em>
147
+ <em>Networking, Security, Privacy</em>
142
148
  </p>
143
149
  </section>
144
150
 
145
- <div class="spacer"></div>
151
+ &nbsp;
146
152
 
147
153
  <section id="subhead">
148
154
  <h2>Security That Respects You</h2>
@@ -162,10 +168,11 @@ This file is part of Network Pro.
162
168
 
163
169
  <p>
164
170
  At <strong>{COMPANY_INFO.NAME} ({COMPANY_INFO.APP_NAME}&trade;)</strong>, we
165
- deliver network security, cybersecurity, and digital privacy consulting with
166
- clarity, credibility, and care. We believe that real security doesn't have to
167
- come at the cost of user autonomy, and that privacy-minded solutions can be
168
- both practical and powerful.
171
+ deliver network security and engineering, information security (IS),
172
+ information technology (IT), cyber security, and digital privacy consulting
173
+ with clarity, credibility, and care. We believe that real security doesn't
174
+ have to come at the cost of user autonomy, and that privacy-minded solutions
175
+ can be both practical and powerful.
169
176
  </p>
170
177
 
171
178
  <p>
@@ -189,7 +196,7 @@ This file is part of Network Pro.
189
196
  <ul>
190
197
  <li><strong>Network Hardening & Perimeter Defense</strong></li>
191
198
  <li><strong>Firewall Architecture & Policy Optimization</strong></li>
192
- <li><strong>Cloud Security & Zero Trust Implementation</strong></li>
199
+ <li><strong>Zero Trust Implementation</strong></li>
193
200
  <li><strong>Secure Infrastructure Design & Implementation</strong></li>
194
201
  <li><strong>Risk Reduction & Security Posture Assessment</strong></li>
195
202
  </ul>
@@ -201,24 +208,53 @@ This file is part of Network Pro.
201
208
  clear value, with zero fluff.
202
209
  </p>
203
210
 
211
+ <div class="spacer"></div>
212
+
213
+ <p>
214
+ Additionally, {COMPANY_INFO.APP_NAME}&trade; provides on-site services in the
215
+ Greater Phoenix Metro Area (Maricopa County, AZ). Our on-site services are
216
+ available to both businesses and consumers. In addition to consulting, we
217
+ offer the following services:
218
+ </p>
219
+
220
+ <ul>
221
+ <li><strong>Home Modem Setup</strong></li>
222
+ <li><strong>Basic Router Setup</strong></li>
223
+ <li><strong>Wi-Fi and Wireless Networking Setup</strong></li>
224
+ <li><strong>Network Troubleshooting</strong></li>
225
+ <li><strong>Network Security Review</strong></li>
226
+ <li><strong>Add a Wi-Fi Device</strong></li>
227
+ <li><strong>Add or Configure a Printer</strong></li>
228
+ </ul>
229
+
204
230
  <p>
205
231
  We also believe education is a core pillar of real-world security. That's why
206
232
  we invest in raising awareness—across both technical and general audiences—on
207
233
  best practices in digital privacy, secure design, and threat mitigation.
208
234
  </p>
209
235
 
236
+ <div class="spacer"></div>
237
+
210
238
  <p>
211
- <strong
212
- >{COMPANY_INFO.APP_NAME}&trade; exists to bring strong, thoughtful security
213
- to organizations that value integrity—without sacrificing agility or trust.</strong>
214
- We don't just secure infrastructure. We secure confidence.
239
+ At {COMPANY_INFO.APP_NAME}&trade;, we deliver robust, intentional solutions
240
+ for individuals and organizations that prioritize integrity — without
241
+ compromising agility or trust. We don't just protect infrastructure. We
242
+ protect peace of mind.
215
243
  </p>
216
244
 
217
- <div class="spacer"></div>
245
+ <p>
246
+ Ready to take the next step? <a href={contactLink} target={PAGE.BLANK}
247
+ >Let's connect</a>
248
+ to explore how we can help fortify your home or business.
249
+ <a href={consultLink} target={PAGE.BLANK}>Schedule a consultation</a> today and
250
+ discover what's possible.
251
+ </p>
218
252
 
219
253
  <p>
220
- <a href={contactLink} target={PAGE.BLANK}>Let's connect</a>
221
- to discuss how we can help secure and strengthen your business today.
254
+ <strong>{COMPANY_INFO.NAME}</strong><br />
255
+ 📞 Phone: {CONTACT.PHONE}<br />
256
+ 📧 General Inquiries: {CONTACT.EMAIL}<br />
257
+ 🔐 Secure Email: {CONTACT.SECURE}
222
258
  </p>
223
259
 
224
260
  <div class="spacer"></div>
@@ -15,7 +15,7 @@ This file is part of Network Pro.
15
15
 
16
16
  //console.log(CONSTANTS.COMPANY_INFO.APP_NAME);
17
17
 
18
- const { COMPANY_INFO, LINKS, PAGE, NAV } = CONSTANTS;
18
+ const { COMPANY_INFO, CONTACT, LINKS, PAGE, NAV } = CONSTANTS;
19
19
 
20
20
  /**
21
21
  * URL to the FOSS Spotlight page, using the base path
@@ -69,6 +69,16 @@ This file is part of Network Pro.
69
69
  </em>
70
70
  </p>
71
71
 
72
+ <p class={classCenter}>
73
+ <strong>{COMPANY_INFO.NAME}</strong><br />
74
+ 📞 <strong>Phone:</strong>
75
+ {CONTACT.PHONE}<br />
76
+ 📧 <strong>General Inquiries:</strong>
77
+ {CONTACT.EMAIL}<br />
78
+ 🔐 <strong>Secure Email:</strong>
79
+ {CONTACT.SECURE}
80
+ </p>
81
+
72
82
  &nbsp;
73
83
 
74
84
  <h3 class="index4">Featured</h3>