@networkpro/web 1.22.1 → 1.23.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 (55) hide show
  1. package/.github/workflows/build-and-publish.yml +4 -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 +16 -16
  6. package/.github/workflows/templates/publish.template.yml +4 -4
  7. package/.ncurc.cjs +50 -0
  8. package/.node-version +1 -1
  9. package/.nvmrc +1 -1
  10. package/CHANGELOG.md +99 -2
  11. package/LICENSE.md +1 -1
  12. package/README.md +5 -5
  13. package/budget.json +1 -1
  14. package/cspell.json +1 -0
  15. package/package.json +19 -16
  16. package/src/app.html +4 -4
  17. package/src/lib/README.md +12 -9
  18. package/src/lib/components/Badges.svelte +2 -2
  19. package/src/lib/components/LegalNav.svelte +1 -1
  20. package/src/lib/components/MetaTags.svelte +42 -16
  21. package/src/lib/components/layout/Footer.svelte +7 -7
  22. package/src/lib/components/layout/HeaderDefault.svelte +1 -1
  23. package/src/lib/components/layout/HeaderHome.svelte +1 -1
  24. package/src/lib/index.js +2 -2
  25. package/src/lib/meta.js +24 -24
  26. package/src/lib/pages/AboutContent.svelte +9 -9
  27. package/src/lib/pages/HomeContent.svelte +1 -1
  28. package/src/lib/pages/LicenseContent.svelte +6 -7
  29. package/src/lib/pages/ServicesContent.svelte +1 -2
  30. package/src/lib/pages/TermsUseContent.svelte +1 -1
  31. package/src/lib/types/README.md +2 -2
  32. package/src/routes/+layout.js +2 -3
  33. package/src/routes/+layout.svelte +11 -3
  34. package/src/routes/+page.svelte +7 -26
  35. package/src/routes/about/+page.svelte +10 -21
  36. package/src/routes/{license → foss}/+page.server.js +2 -2
  37. package/src/routes/{foss-spotlight → foss}/+page.svelte +11 -22
  38. package/src/routes/{foss-spotlight → legal}/+page.server.js +2 -2
  39. package/src/routes/{license → legal}/+page.svelte +11 -22
  40. package/src/routes/pgp/+page.svelte +10 -21
  41. package/src/routes/privacy/+page.svelte +10 -21
  42. package/src/routes/privacy-dashboard/+page.svelte +10 -27
  43. package/src/routes/services/+page.svelte +3 -16
  44. package/src/routes/terms-conditions/+page.svelte +10 -21
  45. package/src/routes/terms-of-use/+page.svelte +10 -21
  46. package/static/sitemap.xml +13 -13
  47. package/tests/e2e/mobile.spec.js +36 -17
  48. package/tests/e2e/shared/helpers.js +39 -1
  49. package/tests/meta/meta.test.js +1 -1
  50. package/tests/unit/server/meta.test.js +1 -1
  51. package/vercel.json +8 -8
  52. package/vite.config.js +11 -0
  53. package/vitest.config.client.js +9 -0
  54. package/CODE_OF_CONDUCT.md +0 -173
  55. package/CONTRIBUTING.md +0 -214
@@ -9,6 +9,9 @@ This file is part of Network Pro.
9
9
  <script>
10
10
  export let title;
11
11
  export let description;
12
+ export let url = 'https://netwk.pro';
13
+ export let image = `${url}/img/banner-og-1200x630.png`;
14
+ export let pathname = '';
12
15
 
13
16
  import { CONSTANTS } from '$lib';
14
17
 
@@ -16,33 +19,56 @@ This file is part of Network Pro.
16
19
 
17
20
  const { COMPANY_INFO, LINKS } = CONSTANTS;
18
21
 
22
+ // Default fallbacks (for missing or undefined props)
23
+ const defaultTitle = 'Security, Networking, Privacy';
24
+ const defaultDescription = 'Locking Down Networks, Unlocking Confidence™';
25
+
26
+ // computed title/description with fallback
27
+ $: metaTitle = title
28
+ ? `${title}${title.includes(COMPANY_INFO.APP_NAME) ? '' : ` — ${COMPANY_INFO.APP_NAME}`}`
29
+ : defaultTitle;
30
+
31
+ $: metaDescription = description
32
+ ? `${description}${description.includes(COMPANY_INFO.NAME) ? '' : ` | Security, Networking, Privacy — ${COMPANY_INFO.NAME}`}`
33
+ : defaultDescription;
34
+
35
+ // Compute canonical URL
36
+ $: canonicalUrl = pathname
37
+ ? `${url.replace(/\/$/, '')}${pathname.startsWith('/') ? pathname : `/${pathname}`}`
38
+ : url;
39
+
19
40
  // Static shared values
20
- const ogUrl = LINKS.HOME;
21
- const ogImg = '/img/banner-og-1200x630.png';
22
- const companyName = COMPANY_INFO.NAME;
23
41
  const twitterAct = '@NetEng_Pro';
24
42
  </script>
25
43
 
26
44
  <svelte:head>
27
- <title>{title}</title>
28
- <meta name="description" content={description} />
45
+ <title>{metaTitle}</title>
46
+ <meta name="description" content={metaDescription} />
29
47
 
30
48
  <!-- OpenGraph -->
31
- <meta property="og:title" content={title} />
49
+ <meta property="og:title" content={metaTitle} />
50
+ <meta property="og:description" content={metaDescription} />
51
+ <meta property="og:url" content={url} />
32
52
  <meta property="og:type" content="website" />
33
- <meta property="og:url" content={ogUrl} />
34
- <meta property="og:image" content={ogImg} />
35
- <meta property="og:image:alt" content={companyName} />
36
- <meta property="og:description" content={description} />
53
+ <meta property="og:site_name" content={COMPANY_INFO.APP_NAME} />
54
+ <meta property="og:image" content={image} />
55
+ <meta property="og:image:alt" content={COMPANY_INFO.NAME} />
56
+ <meta property="og:locale" content="en_US" />
37
57
 
38
58
  <!-- Twitter -->
39
59
  <meta name="twitter:card" content="summary_large_image" />
60
+ <meta name="twitter:title" content={metaTitle} />
61
+ <meta name="twitter:description" content={metaDescription} />
40
62
  <meta name="twitter:site" content={twitterAct} />
41
63
  <meta name="twitter:creator" content={twitterAct} />
42
- <meta property="twitter:domain" content={ogUrl} />
43
- <meta property="twitter:url" content={ogUrl} />
44
- <meta name="twitter:title" content={title} />
45
- <meta name="twitter:description" content={description} />
46
- <meta name="twitter:image" content={ogImg} />
47
- <meta name="twitter:image:alt" content={companyName} />
64
+ <meta property="twitter:domain" content={url} />
65
+ <meta property="twitter:url" content={url} />
66
+ <meta name="twitter:image" content={image} />
67
+ <meta name="twitter:image:alt" content={COMPANY_INFO.NAME} />
68
+
69
+ <!-- Canonical URL -->
70
+ <link rel="canonical" href={canonicalUrl} />
71
+
72
+ <!-- Basic SEO -->
73
+ <meta name="author" content="Scott Lopez" />
48
74
  </svelte:head>
@@ -6,8 +6,6 @@ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
6
6
  This file is part of Network Pro.
7
7
  ========================================================================== -->
8
8
 
9
- <!-- cspell:ignore ccby gnugpl -->
10
-
11
9
  <script>
12
10
  import { base } from '$app/paths';
13
11
  // Import icons for licenses
@@ -22,9 +20,9 @@ This file is part of Network Pro.
22
20
  const { COMPANY_INFO, CONTACT, PAGE, NAV } = CONSTANTS;
23
21
 
24
22
  // Dynamic links for licensing and trademark
25
- const ccbyLink = `${base}/license#cc-by`;
26
- const gnugplLink = `${base}/license#gnu-gpl`;
27
- const trademarkLink = `${base}/license#trademark`;
23
+ const ccbyLink = `${base}/legal#cc-by`;
24
+ const gnugplLink = `${base}/legal#gnu-gpl`;
25
+ const trademarkLink = `${base}/legal#trademark`;
28
26
 
29
27
  /** @type {string} */
30
28
  const creatorUrl = 'https://netwk.pro';
@@ -101,12 +99,12 @@ This file is part of Network Pro.
101
99
  target={PAGE.BLANK}>
102
100
  <strong>{COMPANY_INFO.NAME}</strong>
103
101
  </a>
104
- ({COMPANY_INFO.APP_NAME}&trade;)
102
+ ({COMPANY_INFO.APP_NAME})
105
103
  </p>
106
104
 
107
105
  <!-- Trademark Section -->
108
106
  <p>
109
- {COMPANY_INFO.APP_NAME}&trade;, the shield logo, and the "{creatorSlogan}&trade;"
107
+ {COMPANY_INFO.APP_NAME}, the shield logo, and the "{creatorSlogan}&trade;"
110
108
  slogan are
111
109
  <a href={trademarkLink} target={PAGE.SELF}>trademarks</a>
112
110
  of {COMPANY_INFO.NAME}.
@@ -146,3 +144,5 @@ This file is part of Network Pro.
146
144
  </p>
147
145
  </div>
148
146
  <!-- END FOOTER -->
147
+
148
+ <!-- cspell:ignore ccby gnugpl -->
@@ -21,7 +21,7 @@ This file is part of Network Pro.
21
21
  const aboutLink = `${base}/about`;
22
22
  const servLink = `${base}/services`;
23
23
  const lhubLink = `${base}/links`;
24
- const fossLink = `${base}/foss-spotlight`;
24
+ const fossLink = `${base}/foss`;
25
25
  const discussLink =
26
26
  'https://github.com/netwk-pro/netwk-pro.github.io/discussions';
27
27
 
@@ -18,7 +18,7 @@ This file is part of Network Pro.
18
18
  const { PAGE, LINKS } = CONSTANTS;
19
19
 
20
20
  const aboutLink = `${base}/about`;
21
- const fossLink = `${base}/foss-spotlight`;
21
+ const fossLink = `${base}/foss`;
22
22
  const servLink = `${base}/services`;
23
23
  const lhubLink = `${base}/links`;
24
24
  const discussLink =
package/src/lib/index.js CHANGED
@@ -16,7 +16,7 @@ This file is part of Network Pro.
16
16
  * and re-exported here for flat `$lib` imports.
17
17
  * @module src/lib
18
18
  * @author Scott Lopez
19
- * @updated 2025-10-20
19
+ * @updated 2025-10-30
20
20
  */
21
21
 
22
22
  // Re-export all images so they can be imported directly from `$lib`
@@ -52,7 +52,7 @@ export { PGP_KEYS } from '$lib/data/pgpKeys.js';
52
52
  export const CONSTANTS = {
53
53
  COMPANY_INFO: {
54
54
  NAME: 'Network Pro Strategies',
55
- APP_NAME: 'Network Pro',
55
+ APP_NAME: 'Network Pro',
56
56
  YEAR: '2025',
57
57
  },
58
58
  CONTACT: {
package/src/lib/meta.js CHANGED
@@ -18,62 +18,62 @@ This file is part of Network Pro.
18
18
  const meta = {
19
19
  '/': {
20
20
  title:
21
- 'Security, Networking, Privacy — Network Pro Strategies',
21
+ 'Security, Networking, Privacy',
22
22
  description:
23
- 'Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro Strategies',
23
+ 'Locking Down Networks, Unlocking Confidence™',
24
24
  },
25
25
  '/about': {
26
- title: 'About Us — Network Pro™',
27
- description: 'About Us | Security, Networking, Privacy — Network Pro Strategies',
26
+ title: 'About Us',
27
+ description: 'About Us',
28
28
  },
29
29
  '/privacy': {
30
- title: 'Privacy Policy — Network Pro™',
30
+ title: 'Privacy Policy',
31
31
  description:
32
- 'Privacy Policy | Security, Networking, Privacy — Network Pro Strategies',
32
+ 'Privacy Policy',
33
33
  },
34
34
  '/terms-of-use': {
35
- title: 'Website Terms of Use — Network Pro™',
35
+ title: 'Website Terms of Use',
36
36
  description:
37
- 'Website Terms of Use | Security, Networking, Privacy — Network Pro Strategies',
37
+ 'Website Terms of Use',
38
38
  },
39
- '/license': {
40
- title: 'Legal, Copyright, and Licensing — Network Pro™',
39
+ '/legal': {
40
+ title: 'Legal, Copyright, and Licensing',
41
41
  description:
42
- 'Legal, Copyright, and Licensing | Security, Networking, Privacy — Network Pro Strategies',
42
+ 'Legal, Copyright, and Licensing',
43
43
  },
44
44
  '/terms-conditions': {
45
- title: 'Consulting Terms and Conditions — Network Pro™',
45
+ title: 'Consulting Terms and Conditions',
46
46
  description:
47
- 'Terms and Conditions | Security, Networking, Privacy — Network Pro Strategies',
47
+ 'Terms and Conditions',
48
48
  },
49
- '/foss-spotlight': {
50
- title: 'FOSS Spotlight — Network Pro™',
49
+ '/foss': {
50
+ title: 'FOSS Spotlight',
51
51
  description:
52
- 'FOSS Spotlight | Security, Networking, Privacy — Network Pro Strategies',
52
+ 'FOSS Spotlight',
53
53
  },
54
54
  '/privacy-dashboard': {
55
- title: 'Privacy Dashboard — Network Pro™',
55
+ title: 'Privacy Dashboard',
56
56
  description:
57
- 'Privacy Dashboard | Security, Networking, Privacy — Network Pro Strategies',
57
+ 'Privacy Dashboard',
58
58
  },
59
59
  '/pgp': {
60
- title: 'Public PGP Keys — Network Pro™',
60
+ title: 'Public PGP Keys',
61
61
  description:
62
- 'Public encryption keys for secure communication | Security, Networking, Privacy — Network Pro Strategies',
62
+ 'Public encryption keys for secure communication',
63
63
  },
64
64
  '/services': {
65
- title: "On-Site Services - Network Pro™",
65
+ title: "On-Site Services",
66
66
  description:
67
- 'On-Site Services | Security, Networking, Privacy — Network Pro Strategies'
67
+ 'On-Site Services'
68
68
  },
69
69
  // Excludes redirect-only routes like /contact, /consultation, /privacy-rights
70
70
  };
71
71
 
72
72
  /** @type {MetaData} */
73
73
  const defaultMeta = {
74
- title: 'Loading... | Network Pro™',
74
+ title: 'Loading...',
75
75
  description:
76
- 'Please wait while the content loads... | Security, Networking, Privacy — Network Pro™',
76
+ 'Please wait while the content loads...',
77
77
  };
78
78
 
79
79
  // Export values
@@ -116,9 +116,9 @@ This file is part of Network Pro.
116
116
  </section>
117
117
 
118
118
  <section id="page-title">
119
- <h1>About {COMPANY_INFO.APP_NAME}&trade;</h1>
119
+ <h1>About {COMPANY_INFO.APP_NAME}</h1>
120
120
  <p>
121
- <strong>{COMPANY_INFO.NAME} ({COMPANY_INFO.APP_NAME}&trade;)</strong>
121
+ <strong>{COMPANY_INFO.NAME} ({COMPANY_INFO.APP_NAME})</strong>
122
122
  <br />
123
123
  <em>Security, Networking, Privacy</em>
124
124
  </p>
@@ -143,8 +143,8 @@ This file is part of Network Pro.
143
143
  </p>
144
144
 
145
145
  <p>
146
- At <strong>{COMPANY_INFO.NAME} ({COMPANY_INFO.APP_NAME}&trade;)</strong>, we
147
- deliver network security and engineering, cybersecurity, and digital privacy
146
+ At <strong>{COMPANY_INFO.NAME} ({COMPANY_INFO.APP_NAME})</strong>, we deliver
147
+ network security and engineering, cybersecurity, and digital privacy
148
148
  consulting with clarity, credibility, and care. We believe that real security
149
149
  doesn't have to come at the cost of user autonomy, and that privacy-minded
150
150
  solutions can be both practical and powerful.
@@ -186,7 +186,7 @@ This file is part of Network Pro.
186
186
  <div class="spacer"></div>
187
187
 
188
188
  <p>
189
- Additionally, {COMPANY_INFO.APP_NAME}&trade; provides
189
+ Additionally, {COMPANY_INFO.APP_NAME} provides
190
190
  <a href={servLink} target={PAGE.SELF}>on-site services</a>
191
191
  in the Greater Phoenix Metropolitan Area (Maricopa County, AZ). Our
192
192
  <a href={servLink} target={PAGE.SELF}>on-site services</a> are available to both
@@ -212,10 +212,10 @@ This file is part of Network Pro.
212
212
  </p>
213
213
 
214
214
  <p>
215
- At {COMPANY_INFO.APP_NAME}&trade;, we deliver robust, intentional solutions
216
- for individuals and organizations that prioritize integrity — without
217
- compromising agility or trust. We don't just protect infrastructure. We
218
- protect peace of mind.
215
+ At {COMPANY_INFO.APP_NAME}, we deliver robust, intentional solutions for
216
+ individuals and organizations that prioritize integrity — without compromising
217
+ agility or trust. We don't just protect infrastructure. We protect peace of
218
+ mind.
219
219
  </p>
220
220
 
221
221
  <p>
@@ -21,7 +21,7 @@ This file is part of Network Pro.
21
21
  * URL to the FOSS Spotlight page, using the base path
22
22
  * @type {string}
23
23
  */
24
- const spotlightLink = `${base}/foss-spotlight`;
24
+ const spotlightLink = `${base}/foss`;
25
25
 
26
26
  /**
27
27
  * CSS class for the index headings.
@@ -126,7 +126,7 @@ This file is part of Network Pro.
126
126
  <p>
127
127
  All content—including text, software, logos, graphics, documentation,
128
128
  and other materials—provided by
129
- <strong>{COMPANY_INFO.NAME}</strong> ("{COMPANY_INFO.APP_NAME}&trade;",
129
+ <strong>{COMPANY_INFO.NAME}</strong> ("{COMPANY_INFO.APP_NAME}",
130
130
  "Company", "Licensor") is protected by U.S. and international copyright
131
131
  laws.
132
132
  </p>
@@ -135,12 +135,12 @@ This file is part of Network Pro.
135
135
  <strong>
136
136
  <a href={homeLink} target={PAGE.BLANK}> {COMPANY_INFO.NAME} </a>
137
137
  </strong>
138
- ({COMPANY_INFO.APP_NAME}&trade;)
138
+ ({COMPANY_INFO.APP_NAME})
139
139
  </p>
140
140
  {:else if link.id === 'trademark'}
141
141
  <p>The following trademarks are the exclusive property of the Company:</p>
142
142
  <ul>
143
- <li><strong>Brand Name:</strong> {COMPANY_INFO.APP_NAME}&trade;</li>
143
+ <li><strong>Brand Name:</strong> {COMPANY_INFO.APP_NAME}</li>
144
144
  <li><strong>Domain Names:</strong> netwk.pro, neteng.pro, neteng.cc</li>
145
145
  <li
146
146
  ><strong>Logo:</strong> The shield logo displayed on our homepage</li>
@@ -233,8 +233,7 @@ This file is part of Network Pro.
233
233
  </p>
234
234
 
235
235
  <p>
236
- {COMPANY_INFO.APP_NAME}&trade; (the "Licensed Material") is licensed
237
- under
236
+ {COMPANY_INFO.APP_NAME} (the "Licensed Material") is licensed under
238
237
  <strong>Creative Commons Attribution 4.0 International</strong> (CC BY
239
238
  4.0)
240
239
  <a
@@ -314,8 +313,8 @@ This file is part of Network Pro.
314
313
  </p>
315
314
 
316
315
  <p>
317
- {COMPANY_INFO.APP_NAME}&trade; is free software: you can redistribute it
318
- and/or modify it under the terms of the
316
+ {COMPANY_INFO.APP_NAME} is free software: you can redistribute it and/or
317
+ modify it under the terms of the
319
318
  <strong>GNU General Public License</strong> (GNU GPL) as published by
320
319
  the
321
320
  <a rel={PAGE.REL} href="https://fsf.org" target={PAGE.BLANK}
@@ -85,8 +85,7 @@ This file is part of Network Pro.
85
85
  well. Simply <a href={consultLink} target={PAGE.BLANK}
86
86
  >schedule a free, initial consultation</a>
87
87
  or <a href={contactLink} target={PAGE.BLANK}>contact us directly</a> — we'd be
88
- happy to discuss how {COMPANY_INFO.APP_NAME}&trade; can support your business
89
- on-site.
88
+ happy to discuss how {COMPANY_INFO.APP_NAME} can support your business on-site.
90
89
  </p>
91
90
 
92
91
  <p>
@@ -35,7 +35,7 @@ This file is part of Network Pro.
35
35
  * URL to License page, using the base path
36
36
  * @type {string}
37
37
  */
38
- const licenseLink = `${base}/license`;
38
+ const licenseLink = `${base}/legal`;
39
39
 
40
40
  /**
41
41
  * Markdown version of the Terms of Use document
@@ -43,8 +43,8 @@ TypeScript build requirement.
43
43
  Copyright &copy; 2025
44
44
  **[Network Pro Strategies](https://netwk.pro) (Network Pro&trade;)**
45
45
 
46
- Network Pro&trade;, the shield logo, and the "Locking Down Networks...&trade;" slogan are [trademarks](https://netwk.pro/license#trademark) of Network Pro Strategies.
46
+ Network Pro&trade;, the shield logo, and the "Locking Down Networks...&trade;" slogan are [trademarks](https://netwk.pro/legal#trademark) of Network Pro Strategies.
47
47
 
48
- 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.
48
+ Licensed under **[CC BY 4.0](https://netwk.pro/legal#cc-by)** and the **[GNU GPL](https://netwk.pro/legal#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.
49
49
 
50
50
  </span>
@@ -19,9 +19,8 @@ import { meta as routeMeta } from '$lib/meta.js'; // Import meta from $lib/meta.
19
19
  * Actual meta content is provided per-route via +page.server.js.
20
20
  */
21
21
  const fallbackMeta = {
22
- title: 'Security, Networking, Privacy — Network Pro™',
23
- description:
24
- 'Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro Strategies',
22
+ title: 'Security, Networking, Privacy',
23
+ description: 'Locking Down Networks, Unlocking Confidence™',
25
24
  };
26
25
 
27
26
  export const prerender = 'auto';
@@ -8,11 +8,14 @@ This file is part of Network Pro.
8
8
 
9
9
  <script>
10
10
  export let data;
11
-
12
11
  import { onMount } from 'svelte';
13
12
  import { initAnalytics } from '$lib/utils/initAnalytics';
14
13
  import { showReminder } from '$lib/stores/posthog';
15
- import { ContainerSection, PWAInstallButton } from '$lib/components';
14
+ import {
15
+ ContainerSection,
16
+ MetaTags,
17
+ PWAInstallButton,
18
+ } from '$lib/components';
16
19
  import { Footer, HeaderDefault, HeaderHome } from '$lib/components/layout';
17
20
  import { appleTouchIcon, faviconSvg, logoPng, logoWbp } from '$lib';
18
21
 
@@ -34,6 +37,12 @@ This file is part of Network Pro.
34
37
  'Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro Strategies';
35
38
  </script>
36
39
 
40
+ <!-- Injects proper <title> and <meta> tags -->
41
+ <MetaTags
42
+ title={metaTitle}
43
+ description={metaDescription}
44
+ pathname={data.pathname} />
45
+
37
46
  <svelte:head>
38
47
  <!-- Dynamic preloads only, meta moved to $lib/components/MetaTags.svelte -->
39
48
  <link rel="preload" href={logoWbp} as="image" type="image/webp" />
@@ -45,7 +54,6 @@ This file is part of Network Pro.
45
54
  <link rel="apple-touch-icon" href={appleTouchIcon} />
46
55
 
47
56
  <!-- Static moved to app.html 2025-05-21 -->
48
- <meta name="theme-color" content="#ffc627" />
49
57
  </svelte:head>
50
58
 
51
59
  <!-- BEGIN HEADER -->
@@ -13,29 +13,10 @@ This file is part of Network Pro.
13
13
  LegalNav,
14
14
  Logo,
15
15
  SocialMedia,
16
- MetaTags,
17
16
  } from '$lib/components';
18
17
  import { HomeContent } from '$lib/pages';
19
-
20
- /**
21
- * @type {string}
22
- * Style class for the horizontal rule element.
23
- */
24
- const hrStyle = 'hr-styled';
25
-
26
- /**
27
- * @type {string}
28
- * Style class for the div element.
29
- */
30
- const spaceStyle = 'spacer';
31
-
32
- export let data;
33
18
  </script>
34
19
 
35
- <MetaTags title={data.meta.title} description={data.meta.description} />
36
-
37
- <link rel="canonical" href="https://netwk.pro" />
38
-
39
20
  <section id="home-page" data-testid="home-page">
40
21
  <FullWidthSection>
41
22
  <!-- BEGIN TITLE -->
@@ -44,11 +25,11 @@ This file is part of Network Pro.
44
25
  </section>
45
26
  <!-- END TITLE -->
46
27
 
47
- <div class={spaceStyle}></div>
28
+ <div class="spacer"></div>
48
29
 
49
- <hr class={hrStyle} />
30
+ <hr class="hr-styled" />
50
31
 
51
- <div class={spaceStyle}></div>
32
+ <div class="spacer"></div>
52
33
 
53
34
  <!-- BEGIN MAIN CONTENT -->
54
35
  <section id="main-content">
@@ -56,7 +37,7 @@ This file is part of Network Pro.
56
37
  </section>
57
38
  <!-- END MAIN CONTENT -->
58
39
 
59
- <div class={spaceStyle}></div>
40
+ <div class="spacer"></div>
60
41
 
61
42
  <!-- BEGIN SOCIAL MEDIA -->
62
43
  <section id="social-media">
@@ -64,9 +45,9 @@ This file is part of Network Pro.
64
45
  </section>
65
46
  <!-- END SOCIAL MEDIA -->
66
47
 
67
- <hr class={hrStyle} />
48
+ <hr class="hr-styled" />
68
49
 
69
- <div class={spaceStyle}></div>
50
+ <div class="spacer"></div>
70
51
 
71
52
  <!-- BEGIN LEGAL -->
72
53
  <section id="legal-nav">
@@ -74,7 +55,7 @@ This file is part of Network Pro.
74
55
  </section>
75
56
  <!-- END LEGAL -->
76
57
 
77
- <div class={spaceStyle}></div>
58
+ <div class="spacer"></div>
78
59
 
79
60
  <!-- BEGIN BADGES -->
80
61
  <section id="badges">
@@ -7,26 +7,15 @@ This file is part of Network Pro.
7
7
  ========================================================================== -->
8
8
 
9
9
  <script>
10
- import AboutContent from '$lib/pages/AboutContent.svelte';
11
- import Badges from '$lib/components/Badges.svelte';
12
- import FullWidthSection from '$lib/components/FullWidthSection.svelte';
13
- import LegalNav from '$lib/components/LegalNav.svelte';
14
- import SocialMedia from '$lib/components/SocialMedia.svelte';
15
- import MetaTags from '$lib/components/MetaTags.svelte';
16
-
17
- /**
18
- * @type {string}
19
- * Style class for the div element.
20
- */
21
- const spaceStyle = 'spacer';
22
-
23
- export let data;
10
+ import {
11
+ Badges,
12
+ FullWidthSection,
13
+ LegalNav,
14
+ SocialMedia,
15
+ } from '$lib/components';
16
+ import { AboutContent } from '$lib/pages';
24
17
  </script>
25
18
 
26
- <MetaTags title={data.meta.title} description={data.meta.description} />
27
-
28
- <link rel="canonical" href="https://netwk.pro/about" />
29
-
30
19
  <section id="about">
31
20
  <FullWidthSection>
32
21
  <!-- BEGIN MAIN CONTENT -->
@@ -35,7 +24,7 @@ This file is part of Network Pro.
35
24
  </section>
36
25
  <!-- END MAIN CONTENT -->
37
26
 
38
- <div class={spaceStyle}></div>
27
+ <div class="spacer"></div>
39
28
 
40
29
  <!-- SOCIAL MEDIA -->
41
30
  <section id="social-media">
@@ -44,14 +33,14 @@ This file is part of Network Pro.
44
33
 
45
34
  <hr />
46
35
 
47
- <div class={spaceStyle}></div>
36
+ <div class="spacer"></div>
48
37
 
49
38
  <!-- LEGAL NAVIGATION -->
50
39
  <section id="legal-nav">
51
40
  <LegalNav />
52
41
  </section>
53
42
 
54
- <div class={spaceStyle}></div>
43
+ <div class="spacer"></div>
55
44
 
56
45
  <!-- BADGES -->
57
46
  <section id="badges">
@@ -1,5 +1,5 @@
1
1
  /* ==========================================================================
2
- src/routes/license/+page.server.js
2
+ src/routes/foss/+page.server.js
3
3
 
4
4
  Copyright © 2025 Network Pro Strategies (Network Pro™)
5
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
@@ -13,6 +13,6 @@ export const prerender = false;
13
13
  /** @type {import('./$types').PageServerLoad} */
14
14
  export function load() {
15
15
  return {
16
- meta: meta['/license'] || defaultMeta,
16
+ meta: meta['/foss'] || defaultMeta,
17
17
  };
18
18
  }
@@ -1,5 +1,5 @@
1
1
  <!-- ==========================================================================
2
- src/lib/pages/FossSpotlightContent.svelte
2
+ src/routes/foss/+page.svelte
3
3
 
4
4
  Copyright © 2025 Network Pro Strategies (Network Pro™)
5
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
@@ -7,26 +7,15 @@ This file is part of Network Pro.
7
7
  ========================================================================== -->
8
8
 
9
9
  <script>
10
- import Badges from '$lib/components/Badges.svelte';
11
- import FullWidthSection from '$lib/components/FullWidthSection.svelte';
12
- import FossContent from '$lib/pages/FossContent.svelte';
13
- import LegalNav from '$lib/components/LegalNav.svelte';
14
- import SocialMedia from '$lib/components/SocialMedia.svelte';
15
- import MetaTags from '$lib/components/MetaTags.svelte';
16
-
17
- /**
18
- * @type {string}
19
- * Style class for the div element.
20
- */
21
- const spaceStyle = 'spacer';
22
-
23
- export let data;
10
+ import {
11
+ Badges,
12
+ FullWidthSection,
13
+ LegalNav,
14
+ SocialMedia,
15
+ } from '$lib/components';
16
+ import { FossContent } from '$lib/pages';
24
17
  </script>
25
18
 
26
- <MetaTags title={data.meta.title} description={data.meta.description} />
27
-
28
- <link rel="canonical" href="https://netwk.pro/foss-spotlight" />
29
-
30
19
  <section id="license">
31
20
  <FullWidthSection>
32
21
  <!-- BEGIN FOSS SPOTLIGHT -->
@@ -35,7 +24,7 @@ This file is part of Network Pro.
35
24
  </section>
36
25
  <!-- END FOSS SPOTLIGHT -->
37
26
 
38
- <div class={spaceStyle}></div>
27
+ <div class="spacer"></div>
39
28
 
40
29
  <!-- BEGIN SOCIAL MEDIA -->
41
30
  <section id="social-media">
@@ -45,7 +34,7 @@ This file is part of Network Pro.
45
34
 
46
35
  <hr />
47
36
 
48
- <div class={spaceStyle}></div>
37
+ <div class="spacer"></div>
49
38
 
50
39
  <!-- BEGIN LEGAL -->
51
40
  <section id="legal-nav">
@@ -53,7 +42,7 @@ This file is part of Network Pro.
53
42
  </section>
54
43
  <!-- END LEGAL -->
55
44
 
56
- <div class={spaceStyle}></div>
45
+ <div class="spacer"></div>
57
46
 
58
47
  <!-- BEGIN BADGES -->
59
48
  <section id="badges">