@networkpro/web 1.21.1 → 1.22.1

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 (44) hide show
  1. package/CHANGELOG.md +102 -2
  2. package/README.md +3 -10
  3. package/package.json +8 -8
  4. package/src/app.html +1 -12
  5. package/src/lib/components/Logo.svelte +2 -7
  6. package/src/lib/components/layout/HeaderDefault.svelte +2 -3
  7. package/src/lib/data/fossData.js +8 -0
  8. package/src/lib/data/pgpKeys.js +82 -0
  9. package/src/lib/images.js +46 -17
  10. package/src/lib/index.js +8 -2
  11. package/src/lib/pages/AboutContent.svelte +107 -111
  12. package/src/lib/pages/FossContent.svelte +1 -1
  13. package/src/lib/pages/HomeContent.svelte +11 -8
  14. package/src/lib/pages/LicenseContent.svelte +1 -1
  15. package/src/lib/pages/PGPContent.svelte +19 -40
  16. package/src/lib/pages/PrivacyContent.svelte +6 -3
  17. package/src/lib/pages/PrivacyDashboard.svelte +5 -2
  18. package/src/lib/pages/ServicesContent.svelte +7 -4
  19. package/src/lib/pages/TermsConditionsContent.svelte +1 -1
  20. package/src/lib/pages/TermsUseContent.svelte +3 -3
  21. package/src/lib/styles/css/default.css +1 -1
  22. package/src/lib/styles/global.min.css +1 -1
  23. package/src/lib/types/appConstants.js +6 -3
  24. package/src/service-worker.js +3 -11
  25. package/static/icon-about.png +0 -0
  26. package/static/manifest.json +17 -4
  27. package/static/pgp/support@netwk.pro.asc +77 -0
  28. package/static/sitemap.xml +5 -5
  29. package/tests/e2e/app.spec.js +8 -3
  30. package/tests/e2e/mobile.spec.js +12 -3
  31. package/src/lib/img/qr/pgp-github.png +0 -0
  32. package/src/lib/img/qr/pgp-github.webp +0 -0
  33. package/static/pgp/pgp-contact.png +0 -0
  34. package/static/pgp/pgp-contact.webp +0 -0
  35. package/static/pgp/pgp-github.png +0 -0
  36. package/static/pgp/pgp-github.webp +0 -0
  37. package/static/pgp/pgp-security.png +0 -0
  38. package/static/pgp/pgp-security.webp +0 -0
  39. package/static/pgp/pgp-support.png +0 -0
  40. package/static/pgp/pgp-support.webp +0 -0
  41. package/static/pgp/support@neteng.pro.asc +0 -47
  42. package/static/pgp/vcard.png +0 -0
  43. package/static/pgp/vcard.webp +0 -0
  44. /package/{static → src/lib}/img/powered-by-proton.svg +0 -0
@@ -7,16 +7,8 @@ This file is part of Network Pro.
7
7
  ========================================================================== -->
8
8
 
9
9
  <script>
10
- import {
11
- pgpContactPng,
12
- pgpContactWbp,
13
- pgpSupportPng,
14
- pgpSupportWbp,
15
- vcfPng,
16
- vcfWbp,
17
- } from '$lib';
10
+ import { CONSTANTS, getQR, PGP_KEYS } from '$lib';
18
11
  import { base } from '$app/paths';
19
- import { CONSTANTS } from '$lib';
20
12
 
21
13
  // Log the base path to verify its value
22
14
  //console.log("Base path:", base);
@@ -24,6 +16,9 @@ This file is part of Network Pro.
24
16
  //console.log(CONSTANTS.COMPANY_INFO.APP_NAME);
25
17
 
26
18
  const { COMPANY_INFO, CONTACT, PAGE } = CONSTANTS;
19
+ const pgpKeys = PGP_KEYS.filter(
20
+ (k) => k.id === 'pgp-support' || k.id === 'pgp-contact',
21
+ );
27
22
 
28
23
  /**
29
24
  * URL to the Contact Form route, using the base path
@@ -37,6 +32,12 @@ This file is part of Network Pro.
37
32
  */
38
33
  const consultLink = `${base}/consultation`;
39
34
 
35
+ /**
36
+ * URL to the Services route, using the base path
37
+ * @type {string}
38
+ */
39
+ const servLink = `${base}/services`;
40
+
40
41
  /**
41
42
  * URL to the PGP route, using the base path
42
43
  * @type {string}
@@ -72,62 +73,37 @@ This file is part of Network Pro.
72
73
  */
73
74
  const navLinks = [
74
75
  {
75
- label: 'SPDX License Identifier',
76
+ label: 'SPDX-License-Identifier',
76
77
  href: 'https://spdx.dev/learn/handling-license-info',
77
- target: '_blank',
78
+ target: PAGE.BLANK,
78
79
  text: 'CC-BY-4.0 OR GPL-3.0-or-later',
79
80
  },
80
81
  {
81
82
  label: 'Docs',
82
83
  href: 'https://docs.netwk.pro',
83
- target: '_self',
84
- },
85
- ];
86
-
87
- /**
88
- * PGP key information for contact emails
89
- * @type {Array<{
90
- * label: string,
91
- * qrSrc: string,
92
- * qrWbp: string,
93
- * keySearch: string,
94
- * fingerprint: string[]
95
- * }>}
96
- */
97
- const pgpKeys = [
98
- {
99
- label: 'support@neteng.pro',
100
- qrSrc: pgpSupportPng,
101
- qrWbp: pgpSupportWbp,
102
- keySearch: 'https://keys.openpgp.org/search?q=support%40neteng.pro',
103
- fingerprint: ['6590B992E2E3EFF12738', '7BCE2AF093E9DEC61BA0'],
104
- },
105
- {
106
- label: 'contact@s.neteng.pro',
107
- qrSrc: pgpContactPng,
108
- qrWbp: pgpContactWbp,
109
- keySearch: 'https://keys.openpgp.org/search?q=contact%40s.neteng.pro',
110
- fingerprint: ['DF118BAA6C2D9DCDEBDC', '2DDCF99373499495F957'],
84
+ target: PAGE.SELF,
111
85
  },
112
86
  ];
113
87
 
114
88
  /**
115
89
  * @typedef {Object} ContactAssets
116
- * @property {string} vcf
117
- * @property {string} qrSrc
118
- * @property {string} qrWbp
119
- * @property {string} supportAsc
120
- * @property {string} contactAsc
90
+ * @property {string} vcf - Path to the downloadable vCard file.
91
+ * @property {string} [png] - PNG version of the vCard QR code.
92
+ * @property {string} [webp] - WebP version of the vCard QR code.
93
+ * @property {string} supportAsc - Path to the general support PGP key.
94
+ * @property {string} contactAsc - Path to the secure contact PGP key.
121
95
  */
122
96
 
123
97
  /** @type {ContactAssets} */
124
98
  const contactAssets = {
125
99
  vcf: '/bin/contact.vcf',
126
- qrSrc: vcfPng,
127
- qrWbp: vcfWbp,
128
- supportAsc: '/pgp/support@neteng.pro.asc',
100
+ ...getQR('vcard'),
101
+ supportAsc: '/pgp/support@netwk.pro.asc',
129
102
  contactAsc: '/pgp/contact@s.neteng.pro.asc',
130
103
  };
104
+
105
+ $: supportFp = pgpKeys[0]?.fingerprint?.split(' ') ?? [];
106
+ $: contactFp = pgpKeys[1]?.fingerprint?.split(' ') ?? [];
131
107
  </script>
132
108
 
133
109
  <!-- BEGIN TITLE -->
@@ -144,11 +120,11 @@ This file is part of Network Pro.
144
120
  <p>
145
121
  <strong>{COMPANY_INFO.NAME} ({COMPANY_INFO.APP_NAME}&trade;)</strong>
146
122
  <br />
147
- <em>Networking, Security, Privacy</em>
123
+ <em>Security, Networking, Privacy</em>
148
124
  </p>
149
125
  </section>
150
126
 
151
- &nbsp;
127
+ <div class="spacer"></div>
152
128
 
153
129
  <section id="subhead">
154
130
  <h2>Security That Respects You</h2>
@@ -168,11 +144,10 @@ This file is part of Network Pro.
168
144
 
169
145
  <p>
170
146
  At <strong>{COMPANY_INFO.NAME} ({COMPANY_INFO.APP_NAME}&trade;)</strong>, we
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.
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.
176
151
  </p>
177
152
 
178
153
  <p>
@@ -211,10 +186,11 @@ This file is part of Network Pro.
211
186
  <div class="spacer"></div>
212
187
 
213
188
  <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:
189
+ Additionally, {COMPANY_INFO.APP_NAME}&trade; provides
190
+ <a href={servLink} target={PAGE.SELF}>on-site services</a>
191
+ in the Greater Phoenix Metropolitan Area (Maricopa County, AZ). Our
192
+ <a href={servLink} target={PAGE.SELF}>on-site services</a> are available to both
193
+ consumers and businesses. In addition to consulting, we offer the following services:
218
194
  </p>
219
195
 
220
196
  <ul>
@@ -227,14 +203,14 @@ This file is part of Network Pro.
227
203
  <li><strong>Add or Configure a Printer</strong></li>
228
204
  </ul>
229
205
 
206
+ <div class="spacer"></div>
207
+
230
208
  <p>
231
209
  We also believe education is a core pillar of real-world security. That's why
232
210
  we invest in raising awareness—across both technical and general audiences—on
233
211
  best practices in digital privacy, secure design, and threat mitigation.
234
212
  </p>
235
213
 
236
- <div class="spacer"></div>
237
-
238
214
  <p>
239
215
  At {COMPANY_INFO.APP_NAME}&trade;, we deliver robust, intentional solutions
240
216
  for individuals and organizations that prioritize integrity — without
@@ -246,15 +222,21 @@ This file is part of Network Pro.
246
222
  Ready to take the next step? <a href={contactLink} target={PAGE.BLANK}
247
223
  >Let's connect</a>
248
224
  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.
225
+ <a href={consultLink} target={PAGE.BLANK}
226
+ >Schedule a free, initial consultation</a> today and discover what's possible.
251
227
  </p>
252
228
 
253
229
  <p>
254
230
  <strong>{COMPANY_INFO.NAME}</strong><br />
255
231
  📞 Phone: {CONTACT.PHONE}<br />
256
- 📧 General Inquiries: {CONTACT.EMAIL}<br />
257
- 🔐 Secure Email: {CONTACT.SECURE}
232
+ 📧 General Inquiries:
233
+ <a href={`mailto:${CONTACT.EMAIL_LINK}`} target={PAGE.BLANK}>
234
+ {CONTACT.EMAIL_LINK}
235
+ </a><br />
236
+ 🔐 Secure Email:
237
+ <a href={`mailto:${CONTACT.SECURE_LINK}`} target={PAGE.BLANK}>
238
+ {CONTACT.SECURE_LINK}
239
+ </a>
258
240
  </p>
259
241
 
260
242
  <div class="spacer"></div>
@@ -275,74 +257,84 @@ This file is part of Network Pro.
275
257
  <div class="pgp-wrap">
276
258
  <table class="pgp">
277
259
  <tbody>
278
- <!-- Row 0 (First row) remains unchanged -->
260
+ <!-- Row 0 (Support) -->
279
261
  <tr>
280
262
  <td class="pgp-col1">
281
263
  <picture>
282
- <source srcset={pgpKeys[0].qrWbp} type="image/webp" />
264
+ <source srcset={pgpKeys[0].webp} type="image/webp" />
283
265
  <img
284
266
  {decoding}
285
267
  {loading}
286
- src={pgpKeys[0].qrSrc}
268
+ src={pgpKeys[0].png}
287
269
  class="pgp-image"
288
- alt={`PGP Key - ${pgpKeys[0].label}`} />
270
+ alt={`QR code for ${pgpKeys[0].email}`} />
289
271
  </picture>
290
272
  </td>
291
273
  <td class="pgp-col2">
292
- <a rel={PAGE.REL} href={pgpKeys[0].keySearch} target={PAGE.BLANK}>
293
- <strong>{pgpKeys[0].label}</strong>
294
- </a>
295
- <p
296
- ><strong
297
- ><a
298
- href={contactAssets.supportAsc}
299
- type="application/pgp-keys"
300
- download
301
- target={PAGE.BLANK}
302
- >asc &nbsp;<span class="fas fa-file-arrow-down"></span></a
303
- ></strong>
274
+ <p>
275
+ <strong
276
+ ><a rel={PAGE.REL} href={pgpKeys[0].opgp} target={PAGE.BLANK}>
277
+ {pgpKeys[0].email}
278
+ </a></strong>
279
+ </p>
280
+ <p>
281
+ <a
282
+ href={pgpKeys[0].file}
283
+ type="application/pgp-keys"
284
+ download
285
+ target={PAGE.BLANK}>
286
+ asc &nbsp;<span class="fas fa-file-arrow-down"></span>
287
+ </a>
304
288
  </p>
305
- <p
306
- >Fingerprint:<br />
307
- <span class="fingerprint">
308
- {pgpKeys[0].fingerprint.join('\n')}
309
- </span>
289
+ <p>
290
+ <strong>Fingerprint:</strong><br />
291
+ {#if supportFp.length}
292
+ <span class="fingerprint">
293
+ {supportFp.slice(0, supportFp.length / 2).join(' ')}<br />
294
+ {supportFp.slice(supportFp.length / 2).join(' ')}
295
+ </span>
296
+ {/if}
310
297
  </p>
311
298
  </td>
312
299
  </tr>
313
300
 
314
- <!-- Row 1 (Second row) has its columns swapped -->
301
+ <!-- Row 1 (Secure Contact) -->
315
302
  <tr>
316
303
  <td class="pgp-col1">
317
- <a rel={PAGE.REL} href={pgpKeys[1].keySearch} target={PAGE.BLANK}>
318
- <strong>{pgpKeys[1].label}</strong>
319
- </a>
320
304
  <p>
321
305
  <strong
322
- ><a
323
- href={contactAssets.contactAsc}
324
- type="application/pgp-keys"
325
- download
326
- target={PAGE.BLANK}
327
- >asc &nbsp;<span class="fas fa-file-arrow-down"></span></a
328
- ></strong>
306
+ ><a rel={PAGE.REL} href={pgpKeys[1].opgp} target={PAGE.BLANK}>
307
+ {pgpKeys[1].email}
308
+ </a></strong>
309
+ </p>
310
+ <p>
311
+ <a
312
+ href={pgpKeys[1].file}
313
+ type="application/pgp-keys"
314
+ download
315
+ target={PAGE.BLANK}>
316
+ asc &nbsp;<span class="fas fa-file-arrow-down"></span>
317
+ </a>
329
318
  </p>
330
- <p
331
- >Fingerprint:<br />
332
- <span class="fingerprint">
333
- {pgpKeys[1].fingerprint.join('\n')}
334
- </span>
319
+ <p>
320
+ <strong>Fingerprint:</strong><br />
321
+ {#if contactFp.length}
322
+ <span class="fingerprint">
323
+ {contactFp.slice(0, contactFp.length / 2).join(' ')}<br />
324
+ {contactFp.slice(contactFp.length / 2).join(' ')}
325
+ </span>
326
+ {/if}
335
327
  </p>
336
328
  </td>
337
329
  <td class="pgp-col2">
338
330
  <picture>
339
- <source srcset={pgpKeys[1].qrWbp} type="image/webp" />
331
+ <source srcset={pgpKeys[1].webp} type="image/webp" />
340
332
  <img
341
333
  {decoding}
342
334
  {loading}
343
- src={pgpKeys[1].qrSrc}
335
+ src={pgpKeys[1].png}
344
336
  class="pgp-image"
345
- alt={`PGP Key - ${pgpKeys[1].label}`} />
337
+ alt={`QR code for ${pgpKeys[1].email}`} />
346
338
  </picture>
347
339
  </td>
348
340
  </tr>
@@ -351,13 +343,17 @@ This file is part of Network Pro.
351
343
  <tr>
352
344
  <td class="pgp-col1">
353
345
  <picture>
354
- <source srcset={contactAssets.qrWbp} type="image/webp" />
355
- <img
356
- {decoding}
357
- {loading}
358
- src={contactAssets.qrSrc}
359
- class="pgp-image"
360
- alt="vCard" />
346
+ {#if contactAssets.webp}
347
+ <source srcset={contactAssets.webp} type="image/webp" />
348
+ {/if}
349
+ {#if contactAssets.png}
350
+ <img
351
+ {decoding}
352
+ {loading}
353
+ src={contactAssets.png}
354
+ class="pgp-image"
355
+ alt="vCard" />
356
+ {/if}
361
357
  </picture>
362
358
  </td>
363
359
  <td class="pgp-col2">
@@ -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>
@@ -46,17 +46,17 @@ This file is part of Network Pro.
46
46
  <h3 class={classIndex}>🔒 Practical Cybersecurity. Trusted Expertise.</h3>
47
47
 
48
48
  <p class={classCenter}>
49
- At <strong>{COMPANY_INFO.NAME}</strong>, we specialize in network security,
50
- cybersecurity, and digital privacy consulting that meets today's real-world
51
- demands. Our remote-first approach combines technical depth with practical
52
- solutions—leveraging a strategic mix of open source and proprietary
49
+ At <strong>{COMPANY_INFO.NAME}</strong>, we specialize in network engineering
50
+ and security, cybersecurity, and digital privacy consulting that meets today's
51
+ real-world demands. Our remote-first approach combines technical depth with
52
+ practical solutions—leveraging a strategic mix of open source and proprietary
53
53
  technologies based on performance, scalability, and trustworthiness.
54
54
  </p>
55
55
 
56
56
  <p class={classCenter}>
57
57
  From secure network design to cloud infrastructure and perimeter defense, we
58
- help organizations build stronger, smarter security postures—without
59
- compromising flexibility or transparency.
58
+ help individuals and organizations build stronger, smarter security
59
+ postures—without compromising flexibility or transparency.
60
60
  </p>
61
61
 
62
62
  <p class={classCenter}>
@@ -76,9 +76,12 @@ This file is part of Network Pro.
76
76
  📞 <strong>Phone:</strong>
77
77
  {CONTACT.PHONE}<br />
78
78
  📧 <strong>General Inquiries:</strong>
79
- {CONTACT.EMAIL}<br />
79
+ <a href={`mailto:${CONTACT.EMAIL_LINK}`} target={PAGE.BLANK}
80
+ >{CONTACT.EMAIL_LINK}</a
81
+ ><br />
80
82
  🔐 <strong>Secure Email:</strong>
81
- {CONTACT.SECURE}
83
+ <a href={`mailto:${CONTACT.SECURE_LINK}`} target={PAGE.BLANK}
84
+ >{CONTACT.SECURE_LINK}</a>
82
85
  </p>
83
86
 
84
87
  &nbsp;
@@ -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>
@@ -7,43 +7,16 @@ This file is part of Network Pro.
7
7
  ========================================================================== -->
8
8
 
9
9
  <script>
10
- import CodeBlock from '$lib/components/CodeBlock.svelte';
10
+ import { CONSTANTS, protonPower, getQR, PGP_KEYS as keys } from '$lib';
11
+ import { CodeBlock } from '$lib/components';
11
12
  import { base } from '$app/paths';
12
- import { CONSTANTS } from '$lib';
13
13
 
14
14
  // Log the base path to verify its value
15
15
  //console.log("Base path:", base);
16
16
 
17
17
  //console.log(CONSTANTS.COMPANY_INFO.APP_NAME);
18
18
 
19
- const { PAGE } = CONSTANTS;
20
-
21
- const keys = [
22
- {
23
- name: 'General Contact & Support',
24
- email: 'support (at) neteng.pro',
25
- fingerprint: '6590 B992 E2E3 EFF1 2738 7BCE 2AF0 93E9 DEC6 1BA0',
26
- opgp: 'https://keys.openpgp.org/search?q=support%40neteng.pro',
27
- file: '/pgp/support@neteng.pro.asc',
28
- img: 'pgp-support',
29
- },
30
- {
31
- name: 'Secure Email',
32
- email: 'contact (at) s.neteng.pro',
33
- fingerprint: 'DF11 8BAA 6C2D 9DCD EBDC 2DDC F993 7349 9495 F957',
34
- opgp: 'https://keys.openpgp.org/search?q=contact%40s.neteng.pro',
35
- file: '/pgp/contact@s.neteng.pro.asc',
36
- img: 'pgp-contact',
37
- },
38
- {
39
- name: 'Security Contact',
40
- email: 'security (at) s.neteng.pro',
41
- fingerprint: 'B7FE 1D4E 6CAB 3E71 4A9F DF6E 48CB 7290 C00D 0DA5',
42
- opgp: 'https://keys.openpgp.org/search?q=security%40s.neteng.pro',
43
- file: '/pgp/security@s.neteng.pro.asc',
44
- img: 'pgp-security',
45
- },
46
- ];
19
+ const { CONTACT, PAGE } = CONSTANTS;
47
20
 
48
21
  /**
49
22
  * Tracks which PGP key's fingerprint was last copied.
@@ -81,7 +54,7 @@ This file is part of Network Pro.
81
54
  </p>
82
55
  <p>
83
56
  <img
84
- src="/img/powered-by-proton.svg"
57
+ src={protonPower}
85
58
  alt="Powered by Proton"
86
59
  class="proton-img"
87
60
  loading="eager"
@@ -93,9 +66,9 @@ This file is part of Network Pro.
93
66
  </p>
94
67
 
95
68
  {#each keys as key, i}
96
- <section class="pgp-entry" aria-labelledby={`pgp-${key.img}`}>
69
+ <section class="pgp-entry" aria-labelledby={`pgp-${key.id}`}>
97
70
  <div class="pgp-text">
98
- <h2 id={`pgp-${key.img}`}>{key.name}</h2>
71
+ <h2 id={`pgp-${key.id}`}>{key.name}</h2>
99
72
  <h3>
100
73
  &lt;
101
74
  {#if key.opgp}
@@ -129,13 +102,19 @@ This file is part of Network Pro.
129
102
  </div>
130
103
  <div class="pgp-qr">
131
104
  <picture>
132
- <source srcset={`/pgp/${key.img}.webp`} type="image/webp" />
133
- <img
134
- src={`/pgp/${key.img}.png`}
135
- alt={`QR code for ${key.email}`}
136
- class="pgp-image"
137
- loading={i === 0 ? 'eager' : 'lazy'}
138
- decoding={i === 0 ? 'sync' : 'async'} />
105
+ {#if key.webp}
106
+ <source srcset={key.webp} type="image/webp" />
107
+ {/if}
108
+ {#if key.png}
109
+ <img
110
+ src={key.png}
111
+ alt={`QR code for ${key.email}`}
112
+ class="pgp-image"
113
+ loading={i === 0 ? 'eager' : 'lazy'}
114
+ decoding={i === 0 ? 'sync' : 'async'} />
115
+ {:else}
116
+ <p>QR image missing for {key.id}</p>
117
+ {/if}
139
118
  </picture>
140
119
  </div>
141
120
  </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 18, 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.
@@ -92,7 +92,10 @@ This file is part of Network Pro.
92
92
  <p>
93
93
  <strong>{COMPANY_INFO.NAME}</strong><br />
94
94
  📞 Phone: {CONTACT.PHONE}<br />
95
- 📧 General Inquiries: {CONTACT.EMAIL}<br />
95
+ 📧 General Inquiries:
96
+ <a href={`mailto:${CONTACT.EMAIL_LINK}`} target={PAGE.BLANK}
97
+ >{CONTACT.EMAIL_LINK}</a
98
+ ><br />
96
99
  </p>
97
100
 
98
101
  <div class="spacer"></div>
@@ -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).
@@ -552,7 +552,7 @@ footer .container {
552
552
 
553
553
  .fingerprint {
554
554
  display: block;
555
- font-weight: bold;
555
+ font-family: monospace;
556
556
  white-space: pre-line; /* Ensures newlines are respected for "\n" */
557
557
  }
558
558