@networkpro/web 1.0.0 → 1.1.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.
- package/README.md +7 -7
- package/_headers +9 -0
- package/netlify.toml +0 -10
- package/package.json +8 -3
- package/src/app.html +16 -14
- package/src/lib/components/MetaTags.svelte +41 -0
- package/src/lib/meta.js +73 -0
- package/src/lib/pages/TermsConditionsContent.svelte +1 -1
- package/src/routes/+layout.js +6 -62
- package/src/routes/+layout.svelte +27 -24
- package/src/routes/+page.server.js +27 -0
- package/src/routes/+page.svelte +5 -0
- package/src/routes/about/+page.server.js +17 -0
- package/src/routes/about/+page.svelte +5 -0
- package/src/routes/foss-spotlight/+page.server.js +17 -0
- package/src/routes/foss-spotlight/+page.svelte +5 -0
- package/src/routes/license/+page.server.js +17 -0
- package/src/routes/license/+page.svelte +5 -0
- package/src/routes/page.svelte.test.js +13 -2
- package/src/routes/privacy-policy/+page.server.js +17 -0
- package/src/routes/privacy-policy/+page.svelte +5 -0
- package/src/routes/terms-conditions/+page.server.js +17 -0
- package/src/routes/terms-conditions/+page.svelte +5 -0
- package/src/routes/terms-of-use/+page.server.js +17 -0
- package/src/routes/terms-of-use/+page.svelte +5 -0
- package/static/img/banner-1280x640.png +0 -0
- package/static/img/banner-og-1200x630.png +0 -0
- package/static/img/qr/pgp-contact.png +0 -0
- package/static/img/qr/pgp-github.png +0 -0
- package/static/img/qr/pgp-support.png +0 -0
- package/static/img/qr/vcard.png +0 -0
- package/static/sitemap.xml +8 -8
- package/tests/app.spec.js +2 -2
- package/tests/mobile.spec.js +6 -6
package/README.md
CHANGED
|
@@ -52,7 +52,7 @@ Web: <https://bio.neteng.pro>
|
|
|
52
52
|
|
|
53
53
|
</section>
|
|
54
54
|
|
|
55
|
-
[](https://app.netlify.com/projects/networkpro-web/deploys) [](https://www.npmjs.com/package/@networkpro/web) [](https://github.com/netwk-pro/netwk-pro.github.io/actions/workflows/build-and-publish.yml)
|
|
56
56
|
[](https://github.com/prettier/prettier) [](https://stylelint.io/)
|
|
57
57
|
[](https://github.com/netwk-pro/netwk-pro.github.io/blob/master/CODE_OF_CONDUCT.md)
|
|
58
58
|
|
|
@@ -80,16 +80,16 @@ We also believe education is a core pillar of real-world security. That’s why
|
|
|
80
80
|
|
|
81
81
|
|
|
82
82
|
|
|
83
|
-
🔹 [Let’s connect](https://
|
|
83
|
+
🔹 [Let’s connect](https://netwk.pro/contact) to discuss how we can help secure and strengthen your business today.
|
|
84
84
|
|
|
85
85
|
---
|
|
86
86
|
|
|
87
87
|
You can find our PGP keys and a vCard containing our contact information for your convenience below.
|
|
88
88
|
|
|
89
|
-
|
|
|
89
|
+
| <img decoding="sync" loading="eager" src="https://netwk.pro/img/qr/pgp-support.png" width="125px" height="125px" alt="PGP Key - support@neteng.pro"> | **[support@neteng.pro](https://keys.openpgp.org/search?q=support%40neteng.pro)**<br />**PGP Key (ed25519)**<br /> <br /><a href="https://raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master/assets/bin/support@neteng.pro.aexpk" download type="application/pgp-keys">**aexpk**</a> **/** <a href="https://raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master/assets/bin/support@neteng.pro.asc" download type="application/pgp-keys">**asc**</a><br /> <br />6590b992e2e3eff12738<br />7bce2af093e9dec61ba0 |
|
|
90
90
|
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
91
|
-
| **[contact@s.neteng.pro](https://keys.openpgp.org/search?q=contact%40s.neteng.pro)**<br />**PGP Key (ed25519)**<br /> <br /><a href="https://raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master/assets/bin/contact@s.neteng.pro.aexpk" download type="application/pgp-keys">**aexpk**</a> **/** <a href="https://raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master/assets/bin/contact@s.neteng.pro.asc" download type="application/pgp-keys">**asc**</a><br /> <br />**df118baa6c2d9dcdebdc**<br />**2ddcf99373499495f957** | <img decoding="async" loading="lazy" src="https://
|
|
92
|
-
|
|
|
91
|
+
| **[contact@s.neteng.pro](https://keys.openpgp.org/search?q=contact%40s.neteng.pro)**<br />**PGP Key (ed25519)**<br /> <br /><a href="https://raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master/assets/bin/contact@s.neteng.pro.aexpk" download type="application/pgp-keys">**aexpk**</a> **/** <a href="https://raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master/assets/bin/contact@s.neteng.pro.asc" download type="application/pgp-keys">**asc**</a><br /> <br />**df118baa6c2d9dcdebdc**<br />**2ddcf99373499495f957** | <img decoding="async" loading="lazy" src="https://netwk.pro/img/qr/pgp-contact.png" width="125px" height="125px" alt="PGP Key - contact@s.neteng.pro"> |
|
|
92
|
+
| <img decoding="async" loading="lazy" src="https://netwk.pro/img/qr/vcard.png" width="125px" height="125px" alt="vCard"> | **vCard**<br /> <br /><a href="https://raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master/assets/bin/contact.vcf" download type="text/vcard">**vcf**</a> |
|
|
93
93
|
|
|
94
94
|
<sub>[Back to top](#top)</sub>
|
|
95
95
|
|
|
@@ -109,8 +109,8 @@ You can find our PGP keys and a vCard containing our contact information for you
|
|
|
109
109
|
Copyright © 2025
|
|
110
110
|
**[Network Pro Strategies](https://netwk.pro/)** (Network Pro™)
|
|
111
111
|
|
|
112
|
-
Network Pro™, the shield logo, and the "Locking Down Networks™" slogan are [trademarks](https://netwk.pro/
|
|
112
|
+
Network Pro™, the shield logo, and the "Locking Down Networks™" slogan are [trademarks](https://netwk.pro/license#trademark) of Network Pro Strategies.
|
|
113
113
|
|
|
114
|
-
Licensed under **[CC BY 4.0](https://
|
|
114
|
+
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://fsf.org), either version 3 of the License, or (at your option) any later version.
|
|
115
115
|
|
|
116
116
|
</span>
|
package/_headers
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' https://snap.licdn.com; img-src 'self' https://px.ads.linkedin.com; connect-src 'self' https://px.ads.linkedin.com https://snap.licdn.com; style-src 'self' 'unsafe-inline'; form-action 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'none'; upgrade-insecure-requests;
|
|
3
|
+
X-Content-Type-Options: nosniff
|
|
4
|
+
X-Frame-Options: DENY
|
|
5
|
+
Referrer-Policy: strict-origin-when-cross-origin
|
|
6
|
+
Permissions-Policy: geolocation=(), camera=(), microphone=()
|
|
7
|
+
Cross-Origin-Embedder-Policy: require-corp
|
|
8
|
+
Cross-Origin-Opener-Policy: same-origin
|
|
9
|
+
Cross-Origin-Resource-Policy: same-origin
|
package/netlify.toml
CHANGED
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@networkpro/web",
|
|
3
3
|
"private": false,
|
|
4
4
|
"sideEffects": false,
|
|
5
|
-
"version": "1.
|
|
5
|
+
"version": "1.1.2",
|
|
6
6
|
"description": "Locking Down Networks, Unlocking Confidence | Security, Networking, Privacy — Network Pro Strategies",
|
|
7
7
|
"keywords": [
|
|
8
8
|
"security",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
},
|
|
21
21
|
"repository": {
|
|
22
22
|
"type": "git",
|
|
23
|
-
"url": "git+https://github.com/netwk-pro/
|
|
23
|
+
"url": "git+https://github.com/netwk-pro/netwk-pro.github.io.git"
|
|
24
24
|
},
|
|
25
25
|
"license": "CC-BY-4.0 OR GPL-3.0-or-later",
|
|
26
26
|
"author": {
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"@netlify/plugin-sitemap": "^0.8.1",
|
|
67
67
|
"@playwright/test": "^1.52.0",
|
|
68
68
|
"@sveltejs/adapter-netlify": "^5.0.2",
|
|
69
|
-
"@sveltejs/kit": "^2.21.
|
|
69
|
+
"@sveltejs/kit": "^2.21.1",
|
|
70
70
|
"@sveltejs/vite-plugin-svelte": "^5.0.3",
|
|
71
71
|
"@testing-library/jest-dom": "^6.6.3",
|
|
72
72
|
"@testing-library/svelte": "^5.2.7",
|
|
@@ -101,5 +101,10 @@
|
|
|
101
101
|
"vite": "^6.3.5",
|
|
102
102
|
"vite-plugin-lightningcss": "^0.0.5",
|
|
103
103
|
"vitest": "^3.1.3"
|
|
104
|
+
},
|
|
105
|
+
"overrides": {
|
|
106
|
+
"@sveltejs/kit": {
|
|
107
|
+
"cookie": "^0.7.0"
|
|
108
|
+
}
|
|
104
109
|
}
|
|
105
110
|
}
|
package/src/app.html
CHANGED
|
@@ -2,39 +2,41 @@
|
|
|
2
2
|
<html lang="en">
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
5
6
|
|
|
6
7
|
<!-- =====================================================================
|
|
7
8
|
SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
|
|
8
9
|
This file is part of Network Pro.
|
|
9
|
-
|
|
10
|
+
====================================================================== -->
|
|
10
11
|
|
|
11
12
|
<title>%sveltekit.title%</title>
|
|
12
13
|
<meta name="description" content="%sveltekit.description%" />
|
|
14
|
+
<meta
|
|
15
|
+
name="robots"
|
|
16
|
+
content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1" />
|
|
17
|
+
<meta name="author" content="Network Pro Strategies" />
|
|
13
18
|
|
|
14
|
-
<!--
|
|
15
|
-
<
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
<!-- FontAwesome is self-hosted, so its preconnect has been removed -->
|
|
19
|
+
<!-- Optional CSP for Dev -->
|
|
20
|
+
<meta
|
|
21
|
+
http-equiv="Content-Security-Policy"
|
|
22
|
+
content="default-src 'self'; script-src 'self' 'unsafe-inline' https://snap.licdn.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https://px.ads.linkedin.com; connect-src 'self' https://px.ads.linkedin.com;" />
|
|
19
23
|
|
|
20
|
-
<!-- Keep only
|
|
24
|
+
<!-- Favicon: Keep only ICO for max compatibility -->
|
|
21
25
|
<link
|
|
22
26
|
rel="icon"
|
|
23
27
|
href="%sveltekit.assets%/favicon.ico"
|
|
24
28
|
sizes="any"
|
|
25
29
|
type="image/x-icon" />
|
|
26
30
|
|
|
27
|
-
<!--
|
|
31
|
+
<!-- Preconnects (placed early to optimize connection time) -->
|
|
32
|
+
<link rel="preconnect" href="https://snap.licdn.com" crossorigin />
|
|
33
|
+
<link rel="preconnect" href="https://px.ads.linkedin.com" crossorigin />
|
|
28
34
|
|
|
35
|
+
<!-- Manifest + theme color -->
|
|
29
36
|
<link rel="manifest" href="manifest.json" />
|
|
30
37
|
<meta name="theme-color" content="#ffc627" />
|
|
31
38
|
|
|
32
|
-
<meta name="
|
|
33
|
-
|
|
34
|
-
<meta name="author" content="Network Pro Strategies" />
|
|
35
|
-
<meta
|
|
36
|
-
name="robots"
|
|
37
|
-
content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1" />
|
|
39
|
+
<meta name="generator" content="SvelteKit 2.21.1" />
|
|
38
40
|
|
|
39
41
|
%sveltekit.head%
|
|
40
42
|
</head>
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<!-- ==========================================================================
|
|
2
|
+
src/lib/components/MetaTags.svelte
|
|
3
|
+
|
|
4
|
+
SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
|
|
5
|
+
This file is part of Network Pro.
|
|
6
|
+
========================================================================== -->
|
|
7
|
+
|
|
8
|
+
<script>
|
|
9
|
+
export let title;
|
|
10
|
+
export let description;
|
|
11
|
+
|
|
12
|
+
// Static shared values
|
|
13
|
+
const ogUrl = "https://netwk.pro";
|
|
14
|
+
const ogImg = "/img/banner-og-1200x630.png";
|
|
15
|
+
const companyName = "Network Pro Strategies";
|
|
16
|
+
const twitterAct = "@NetEng_Pro";
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<svelte:head>
|
|
20
|
+
<title>{title}</title>
|
|
21
|
+
<meta name="description" content={description} />
|
|
22
|
+
|
|
23
|
+
<!-- OpenGraph -->
|
|
24
|
+
<meta property="og:title" content={title} />
|
|
25
|
+
<meta property="og:type" content="website" />
|
|
26
|
+
<meta property="og:url" content={ogUrl} />
|
|
27
|
+
<meta property="og:image" content={ogImg} />
|
|
28
|
+
<meta property="og:image:alt" content={companyName} />
|
|
29
|
+
<meta property="og:description" content={description} />
|
|
30
|
+
|
|
31
|
+
<!-- Twitter -->
|
|
32
|
+
<meta name="twitter:card" content="summary_large_image" />
|
|
33
|
+
<meta name="twitter:site" content={twitterAct} />
|
|
34
|
+
<meta name="twitter:creator" content={twitterAct} />
|
|
35
|
+
<meta property="twitter:domain" content={ogUrl} />
|
|
36
|
+
<meta property="twitter:url" content={ogUrl} />
|
|
37
|
+
<meta name="twitter:title" content={title} />
|
|
38
|
+
<meta name="twitter:description" content={description} />
|
|
39
|
+
<meta name="twitter:image" content={ogImg} />
|
|
40
|
+
<meta name="twitter:image:alt" content={companyName} />
|
|
41
|
+
</svelte:head>
|
package/src/lib/meta.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
src/lib/meta.js
|
|
3
|
+
|
|
4
|
+
SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
|
|
5
|
+
This file is part of Network Pro.
|
|
6
|
+
========================================================================== */
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @typedef {object} MetaData
|
|
10
|
+
* @property {string} title - The title of the page
|
|
11
|
+
* @property {string} description - The description of the page
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @type {Record<string, MetaData>}
|
|
16
|
+
*/
|
|
17
|
+
const meta = {
|
|
18
|
+
"/": {
|
|
19
|
+
title:
|
|
20
|
+
"Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro™",
|
|
21
|
+
description:
|
|
22
|
+
"Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro™",
|
|
23
|
+
},
|
|
24
|
+
"/about": {
|
|
25
|
+
title: "About Us — Network Pro™",
|
|
26
|
+
description: "About Us | Security, Networking, Privacy — Network Pro™",
|
|
27
|
+
},
|
|
28
|
+
"/privacy-policy": {
|
|
29
|
+
title: "Privacy Policy — Network Pro™",
|
|
30
|
+
description:
|
|
31
|
+
"Privacy Policy | Security, Networking, Privacy — Network Pro™",
|
|
32
|
+
},
|
|
33
|
+
"/terms-of-use": {
|
|
34
|
+
title: "Website Terms of Use — Network Pro™",
|
|
35
|
+
description:
|
|
36
|
+
"Website Terms of Use | Security, Networking, Privacy — Network Pro™",
|
|
37
|
+
},
|
|
38
|
+
"/license": {
|
|
39
|
+
title: "Legal, Copyright, and Licensing — Network Pro™",
|
|
40
|
+
description:
|
|
41
|
+
"Legal, Copyright, and Licensing | Security, Networking, Privacy — Network Pro™",
|
|
42
|
+
},
|
|
43
|
+
"/terms-conditions": {
|
|
44
|
+
title: "Consulting Terms and Conditions — Network Pro™",
|
|
45
|
+
description:
|
|
46
|
+
"Terms and Conditions | Security, Networking, Privacy — Network Pro™",
|
|
47
|
+
},
|
|
48
|
+
"/foss-spotlight": {
|
|
49
|
+
title: "FOSS Spotlight — Network Pro™",
|
|
50
|
+
description:
|
|
51
|
+
"FOSS Spotlight | Security, Networking, Privacy — Network Pro™",
|
|
52
|
+
},
|
|
53
|
+
"/contact": {
|
|
54
|
+
title: "Contact Form — Network Pro™",
|
|
55
|
+
description: "Contact Form | Security, Networking, Privacy — Network Pro™",
|
|
56
|
+
},
|
|
57
|
+
"/privacy-rights": {
|
|
58
|
+
title: "Privacy Rights Request Form — Network Pro™",
|
|
59
|
+
description:
|
|
60
|
+
"Privacy Rights Request Form | Security, Networking, Privacy — Network Pro™",
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
/** @type {MetaData} */
|
|
65
|
+
const defaultMeta = {
|
|
66
|
+
title: "Loading... | Network Pro™",
|
|
67
|
+
description:
|
|
68
|
+
"Please wait while the content loads... | Security, Networking, Privacy — Network Pro™",
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
// Export values
|
|
72
|
+
export { defaultMeta, meta };
|
|
73
|
+
|
|
@@ -113,7 +113,7 @@ This file is part of Network Pro.
|
|
|
113
113
|
|
|
|
114
114
|
<a
|
|
115
115
|
rel={constants.rel}
|
|
116
|
-
href="https://raw.githubusercontent.com/netwk-pro/netwk-pro
|
|
116
|
+
href="https://raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master/assets/consulting-terms.pdf"
|
|
117
117
|
target={constants.targetBlank}>
|
|
118
118
|
PDF <span class="fas fa-file-arrow-down"></span>
|
|
119
119
|
</a>
|
package/src/routes/+layout.js
CHANGED
|
@@ -12,62 +12,13 @@ This file is part of Network Pro.
|
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* and the value is an object containing the title and description for the route.
|
|
15
|
+
* Fallback metadata to satisfy typing in +layout.svelte and +page.svelte.
|
|
16
|
+
* Actual meta content is provided per-route via +page.server.js.
|
|
18
17
|
*/
|
|
19
|
-
const
|
|
20
|
-
"
|
|
21
|
-
title:
|
|
22
|
-
"Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro™",
|
|
23
|
-
description:
|
|
24
|
-
"Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro™",
|
|
25
|
-
},
|
|
26
|
-
"/about": {
|
|
27
|
-
title: "About Us — Network Pro™",
|
|
28
|
-
description: "About Us | Security, Networking, Privacy — Network Pro™",
|
|
29
|
-
},
|
|
30
|
-
"/privacy-policy": {
|
|
31
|
-
title: "Privacy Policy — Network Pro™",
|
|
32
|
-
description:
|
|
33
|
-
"Privacy Policy | Security, Networking, Privacy — Network Pro™",
|
|
34
|
-
},
|
|
35
|
-
"/terms-of-use": {
|
|
36
|
-
title: "Website Terms of Use — Network Pro™",
|
|
37
|
-
description:
|
|
38
|
-
"Website Terms of Use | Security, Networking, Privacy — Network Pro™",
|
|
39
|
-
},
|
|
40
|
-
"/license": {
|
|
41
|
-
title: "Legal, Copyright, and Licensing — Network Pro™",
|
|
42
|
-
description:
|
|
43
|
-
"Legal, Copyright, and Licensing | Security, Networking, Privacy — Network Pro™",
|
|
44
|
-
},
|
|
45
|
-
"/terms-conditions": {
|
|
46
|
-
title: "Consulting Terms and Conditions — Network Pro™",
|
|
47
|
-
description:
|
|
48
|
-
"Terms and Conditions | Security, Networking, Privacy — Network Pro™",
|
|
49
|
-
},
|
|
50
|
-
"/foss-spotlight": {
|
|
51
|
-
title: "FOSS Spotlight — Network Pro™",
|
|
52
|
-
description:
|
|
53
|
-
"FOSS Spotlight | Security, Networking, Privacy — Network Pro™",
|
|
54
|
-
},
|
|
55
|
-
"/contact": {
|
|
56
|
-
title: "Contact Form — Network Pro™",
|
|
57
|
-
description: "Contact Form | Security, Networking, Privacy — Network Pro™",
|
|
58
|
-
},
|
|
59
|
-
"/privacy-rights": {
|
|
60
|
-
title: "Privacy Rights Request Form — Network Pro™",
|
|
61
|
-
description:
|
|
62
|
-
"Privacy Rights Request Form | Security, Networking, Privacy — Network Pro™",
|
|
63
|
-
},
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
// Fallback metadata for all routes
|
|
67
|
-
const defaultMeta = {
|
|
68
|
-
title: "Loading... | Network Pro™",
|
|
18
|
+
const fallbackMeta = {
|
|
19
|
+
title: "Security, Networking, Privacy — Network Pro™",
|
|
69
20
|
description:
|
|
70
|
-
"
|
|
21
|
+
"Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro™",
|
|
71
22
|
};
|
|
72
23
|
|
|
73
24
|
export const prerender = "auto";
|
|
@@ -76,19 +27,12 @@ export const trailingSlash = "never";
|
|
|
76
27
|
/**
|
|
77
28
|
* @param {{ url: URL }} param0
|
|
78
29
|
* @returns {{ pathname: string, meta: MetaData }}
|
|
79
|
-
* The load function returns the current pathname and the appropriate metadata
|
|
80
|
-
* for the route, ensuring that default metadata is used if no specific route is defined.
|
|
81
30
|
*/
|
|
82
31
|
export function load({ url }) {
|
|
83
|
-
// Normalize the pathname to remove trailing slashes
|
|
84
32
|
const normalizedPathname = url.pathname.replace(/\/+$/, "") || "/";
|
|
85
33
|
|
|
86
|
-
// Determine metadata based on static routes, fallback to defaultMeta
|
|
87
|
-
const currentMeta = meta[normalizedPathname] || defaultMeta;
|
|
88
|
-
|
|
89
|
-
// Return the metadata and pathname to the layout
|
|
90
34
|
return {
|
|
91
35
|
pathname: normalizedPathname,
|
|
92
|
-
meta:
|
|
36
|
+
meta: fallbackMeta, // Required to ensure meta always exists for typing
|
|
93
37
|
};
|
|
94
38
|
}
|
|
@@ -6,6 +6,8 @@ This file is part of Network Pro.
|
|
|
6
6
|
========================================================================== -->
|
|
7
7
|
|
|
8
8
|
<script>
|
|
9
|
+
export let data;
|
|
10
|
+
|
|
9
11
|
import ContainerSection from "$lib/components/ContainerSection.svelte";
|
|
10
12
|
import Footer from "$lib/components/layout/Footer.svelte";
|
|
11
13
|
import HeaderDefault from "$lib/components/layout/HeaderDefault.svelte";
|
|
@@ -13,8 +15,9 @@ This file is part of Network Pro.
|
|
|
13
15
|
import { browser } from "$app/environment";
|
|
14
16
|
// TODO: Testing in progress
|
|
15
17
|
import { registerServiceWorker } from "$lib/registerServiceWorker.js";
|
|
18
|
+
import "$lib/styles";
|
|
16
19
|
|
|
17
|
-
// Import
|
|
20
|
+
// Import favicon images
|
|
18
21
|
import logoPng from "$lib/img/logo-web.png";
|
|
19
22
|
import logoWbp from "$lib/img/logo-web.webp";
|
|
20
23
|
import faviconSvg from "$lib/img/favicon.svg";
|
|
@@ -23,8 +26,14 @@ This file is part of Network Pro.
|
|
|
23
26
|
/**
|
|
24
27
|
* @type {string}
|
|
25
28
|
* Style class for the mobile-web-app-capable meta tag.
|
|
29
|
+
* OpenGraph URL for the website.
|
|
30
|
+
* Company name for the website.
|
|
31
|
+
* Twitter account for the website.
|
|
26
32
|
*/
|
|
27
33
|
const webApp = "mobile-web-app-capable";
|
|
34
|
+
const ogUrl = "https://netwk.pro";
|
|
35
|
+
const companyName = "Network Pro Strategies";
|
|
36
|
+
const twitterAct = "@NetEng_Pro";
|
|
28
37
|
|
|
29
38
|
if (browser) {
|
|
30
39
|
// Preload logo images
|
|
@@ -34,10 +43,8 @@ This file is part of Network Pro.
|
|
|
34
43
|
});
|
|
35
44
|
|
|
36
45
|
// Preload favicon SVG
|
|
37
|
-
fetch(faviconSvg).then((response) => response.text());
|
|
38
|
-
|
|
39
|
-
// Preload Apple Touch icon
|
|
40
46
|
const touchImg = new Image();
|
|
47
|
+
// Preload Apple Touch icon
|
|
41
48
|
touchImg.src = appleTouchIcon;
|
|
42
49
|
|
|
43
50
|
// TODO: Testing in progress
|
|
@@ -45,35 +52,27 @@ This file is part of Network Pro.
|
|
|
45
52
|
registerServiceWorker();
|
|
46
53
|
}
|
|
47
54
|
|
|
48
|
-
//
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
55
|
+
// fallback values if data.meta not set
|
|
56
|
+
const metaTitle =
|
|
57
|
+
data?.meta?.title || "Security, Networking, Privacy — Network Pro™";
|
|
58
|
+
const metaDescription =
|
|
59
|
+
data?.meta?.description ||
|
|
60
|
+
"Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro™";
|
|
52
61
|
|
|
53
62
|
// Pathname normalization takes place in +layout.js
|
|
54
63
|
</script>
|
|
55
64
|
|
|
56
|
-
<!-- Update the document's metadata dynamically -->
|
|
57
65
|
<svelte:head>
|
|
58
|
-
|
|
59
|
-
<
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
66
|
+
<!-- Static only, dynamic content moved to $lib/components/MetaTags.svelte -->
|
|
67
|
+
<link rel="preload" href={logoWbp} as="image" type="image/webp" />
|
|
68
|
+
<link rel="preload" href={logoPng} as="image" type="image/png" />
|
|
69
|
+
<link rel="preload" href={faviconSvg} as="image" type="image/svg+xml" />
|
|
70
|
+
<link rel="preload" href={appleTouchIcon} as="image" type="image/png" />
|
|
63
71
|
|
|
64
|
-
<!-- Standard favicon and Apple Touch icon references -->
|
|
65
72
|
<link rel="icon" href={faviconSvg} type="image/svg+xml" />
|
|
66
73
|
<link rel="apple-touch-icon" href={appleTouchIcon} />
|
|
67
74
|
|
|
68
|
-
<!--
|
|
69
|
-
{#if browser}
|
|
70
|
-
<link rel="preload" href={logoWbp} as="image" type="image/webp" />
|
|
71
|
-
<link rel="preload" href={logoPng} as="image" type="image/png" />
|
|
72
|
-
<link rel="preload" href={faviconSvg} as="image" type="image/svg+xml" />
|
|
73
|
-
<link rel="preload" href={appleTouchIcon} as="image" type="image/png" />
|
|
74
|
-
{/if}
|
|
75
|
-
|
|
76
|
-
<!-- PWA-specific meta tags -->
|
|
75
|
+
<!-- PWA -->
|
|
77
76
|
<link rel="manifest" href="/manifest.json" />
|
|
78
77
|
<meta name={webApp} content="yes" />
|
|
79
78
|
<meta name={"apple-" + webApp} content="yes" />
|
|
@@ -81,6 +80,10 @@ This file is part of Network Pro.
|
|
|
81
80
|
name="apple-mobile-web-app-status-bar-style"
|
|
82
81
|
content="black-translucent" />
|
|
83
82
|
<meta name="theme-color" content="#ffc627" />
|
|
83
|
+
|
|
84
|
+
<meta
|
|
85
|
+
name="facebook-domain-verification"
|
|
86
|
+
content="bx4ham0zkpvzztzu213bhpt76m9siq" />
|
|
84
87
|
</svelte:head>
|
|
85
88
|
|
|
86
89
|
<!-- BEGIN HEADER -->
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
src/routes/+page.server.js
|
|
3
|
+
|
|
4
|
+
SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
|
|
5
|
+
This file is part of Network Pro.
|
|
6
|
+
========================================================================== */
|
|
7
|
+
|
|
8
|
+
import { defaultMeta, meta } from "$lib/meta.js";
|
|
9
|
+
|
|
10
|
+
export const prerender = false;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @typedef {object} MetaData
|
|
14
|
+
* @property {string} title - The title of the page
|
|
15
|
+
* @property {string} description - The description of the page
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Load metadata for the root route.
|
|
20
|
+
*
|
|
21
|
+
* @returns {{ meta: MetaData }}
|
|
22
|
+
*/
|
|
23
|
+
export function load() {
|
|
24
|
+
return {
|
|
25
|
+
meta: meta["/"] || defaultMeta,
|
|
26
|
+
};
|
|
27
|
+
}
|
package/src/routes/+page.svelte
CHANGED
|
@@ -12,6 +12,7 @@ This file is part of Network Pro.
|
|
|
12
12
|
import LegalNav from "$lib/components/LegalNav.svelte";
|
|
13
13
|
import Logo from "$lib/components/Logo.svelte";
|
|
14
14
|
import SocialMedia from "$lib/components/SocialMedia.svelte";
|
|
15
|
+
import MetaTags from "$lib/components/MetaTags.svelte";
|
|
15
16
|
|
|
16
17
|
/**
|
|
17
18
|
* @type {string}
|
|
@@ -24,8 +25,12 @@ This file is part of Network Pro.
|
|
|
24
25
|
* Style class for the div element.
|
|
25
26
|
*/
|
|
26
27
|
const spaceStyle = "spacer";
|
|
28
|
+
|
|
29
|
+
export let data;
|
|
27
30
|
</script>
|
|
28
31
|
|
|
32
|
+
<MetaTags title={data.meta.title} description={data.meta.description} />
|
|
33
|
+
|
|
29
34
|
<link rel="canonical" href="https://netwk.pro" />
|
|
30
35
|
|
|
31
36
|
<section id="home-page" data-testid="home-page">
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
src/routes/about/+page.server.js
|
|
3
|
+
|
|
4
|
+
SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
|
|
5
|
+
This file is part of Network Pro.
|
|
6
|
+
========================================================================== */
|
|
7
|
+
|
|
8
|
+
import { defaultMeta, meta } from "$lib/meta.js";
|
|
9
|
+
|
|
10
|
+
export const prerender = false;
|
|
11
|
+
|
|
12
|
+
/** @type {import('./$types').PageServerLoad} */
|
|
13
|
+
export function load() {
|
|
14
|
+
return {
|
|
15
|
+
meta: meta["/about"] || defaultMeta,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
@@ -11,6 +11,7 @@ This file is part of Network Pro.
|
|
|
11
11
|
import FullWidthSection from "$lib/components/FullWidthSection.svelte";
|
|
12
12
|
import LegalNav from "$lib/components/LegalNav.svelte";
|
|
13
13
|
import SocialMedia from "$lib/components/SocialMedia.svelte";
|
|
14
|
+
import MetaTags from "$lib/components/MetaTags.svelte";
|
|
14
15
|
|
|
15
16
|
/**
|
|
16
17
|
* @type {string}
|
|
@@ -23,8 +24,12 @@ This file is part of Network Pro.
|
|
|
23
24
|
* Style class for the div element.
|
|
24
25
|
*/
|
|
25
26
|
const spaceStyle = "spacer";
|
|
27
|
+
|
|
28
|
+
export let data;
|
|
26
29
|
</script>
|
|
27
30
|
|
|
31
|
+
<MetaTags title={data.meta.title} description={data.meta.description} />
|
|
32
|
+
|
|
28
33
|
<link rel="canonical" href="https://netwk.pro/about" />
|
|
29
34
|
|
|
30
35
|
<section id="about">
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
src/routes/foss-spotlight/+page.server.js
|
|
3
|
+
|
|
4
|
+
SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
|
|
5
|
+
This file is part of Network Pro.
|
|
6
|
+
========================================================================== */
|
|
7
|
+
|
|
8
|
+
import { defaultMeta, meta } from "$lib/meta.js";
|
|
9
|
+
|
|
10
|
+
export const prerender = false;
|
|
11
|
+
|
|
12
|
+
/** @type {import('./$types').PageServerLoad} */
|
|
13
|
+
export function load() {
|
|
14
|
+
return {
|
|
15
|
+
meta: meta["/foss-spotlight"] || defaultMeta,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
@@ -11,6 +11,7 @@ This file is part of Network Pro.
|
|
|
11
11
|
import FossContent from "$lib/pages/FossContent.svelte";
|
|
12
12
|
import LegalNav from "$lib/components/LegalNav.svelte";
|
|
13
13
|
import SocialMedia from "$lib/components/SocialMedia.svelte";
|
|
14
|
+
import MetaTags from "$lib/components/MetaTags.svelte";
|
|
14
15
|
|
|
15
16
|
/**
|
|
16
17
|
* @type {string}
|
|
@@ -23,8 +24,12 @@ This file is part of Network Pro.
|
|
|
23
24
|
* Style class for the div element.
|
|
24
25
|
*/
|
|
25
26
|
const spaceStyle = "spacer";
|
|
27
|
+
|
|
28
|
+
export let data;
|
|
26
29
|
</script>
|
|
27
30
|
|
|
31
|
+
<MetaTags title={data.meta.title} description={data.meta.description} />
|
|
32
|
+
|
|
28
33
|
<link rel="canonical" href="https://netwk.pro/foss-spotlight" />
|
|
29
34
|
|
|
30
35
|
<section id="license">
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
src/routes/license/+page.server.js
|
|
3
|
+
|
|
4
|
+
SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
|
|
5
|
+
This file is part of Network Pro.
|
|
6
|
+
========================================================================== */
|
|
7
|
+
|
|
8
|
+
import { defaultMeta, meta } from "$lib/meta.js";
|
|
9
|
+
|
|
10
|
+
export const prerender = false;
|
|
11
|
+
|
|
12
|
+
/** @type {import('./$types').PageServerLoad} */
|
|
13
|
+
export function load() {
|
|
14
|
+
return {
|
|
15
|
+
meta: meta["/license"] || defaultMeta,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
@@ -11,6 +11,7 @@ This file is part of Network Pro.
|
|
|
11
11
|
import LicenseContent from "$lib/pages/LicenseContent.svelte";
|
|
12
12
|
import LegalNav from "$lib/components/LegalNav.svelte";
|
|
13
13
|
import SocialMedia from "$lib/components/SocialMedia.svelte";
|
|
14
|
+
import MetaTags from "$lib/components/MetaTags.svelte";
|
|
14
15
|
|
|
15
16
|
/**
|
|
16
17
|
* @type {string}
|
|
@@ -23,8 +24,12 @@ This file is part of Network Pro.
|
|
|
23
24
|
* Style class for the div element.
|
|
24
25
|
*/
|
|
25
26
|
const spaceStyle = "spacer";
|
|
27
|
+
|
|
28
|
+
export let data;
|
|
26
29
|
</script>
|
|
27
30
|
|
|
31
|
+
<MetaTags title={data.meta.title} description={data.meta.description} />
|
|
32
|
+
|
|
28
33
|
<link rel="canonical" href="https://netwk.pro/license" />
|
|
29
34
|
|
|
30
35
|
<section id="license">
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* ==========================================================================
|
|
2
|
-
src/
|
|
2
|
+
src/routes/page.svelte.test.js
|
|
3
3
|
|
|
4
4
|
SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
|
|
5
5
|
This file is part of Network Pro.
|
|
@@ -12,7 +12,18 @@ import Page from "./+page.svelte";
|
|
|
12
12
|
|
|
13
13
|
describe("/+page.svelte", () => {
|
|
14
14
|
test("should render the home page section", () => {
|
|
15
|
-
|
|
15
|
+
const mockData = {
|
|
16
|
+
pathname: "/", // Required because layout uses it
|
|
17
|
+
meta: {
|
|
18
|
+
title:
|
|
19
|
+
"Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro™",
|
|
20
|
+
description:
|
|
21
|
+
"Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro™",
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
render(Page, { props: { data: mockData } });
|
|
26
|
+
|
|
16
27
|
expect(screen.getByTestId("home-page")).toBeInTheDocument();
|
|
17
28
|
});
|
|
18
29
|
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
src/routes/privacy-policy/+page.server.js
|
|
3
|
+
|
|
4
|
+
SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
|
|
5
|
+
This file is part of Network Pro.
|
|
6
|
+
========================================================================== */
|
|
7
|
+
|
|
8
|
+
import { defaultMeta, meta } from "$lib/meta.js";
|
|
9
|
+
|
|
10
|
+
export const prerender = false;
|
|
11
|
+
|
|
12
|
+
/** @type {import('./$types').PageServerLoad} */
|
|
13
|
+
export function load() {
|
|
14
|
+
return {
|
|
15
|
+
meta: meta["/privacy-policy"] || defaultMeta,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
@@ -11,6 +11,7 @@ This file is part of Network Pro.
|
|
|
11
11
|
import PrivacyContent from "$lib/pages/PrivacyContent.svelte";
|
|
12
12
|
import LegalNav from "$lib/components/LegalNav.svelte";
|
|
13
13
|
import SocialMedia from "$lib/components/SocialMedia.svelte";
|
|
14
|
+
import MetaTags from "$lib/components/MetaTags.svelte";
|
|
14
15
|
|
|
15
16
|
/**
|
|
16
17
|
* @type {string}
|
|
@@ -23,8 +24,12 @@ This file is part of Network Pro.
|
|
|
23
24
|
* Style class for the div element.
|
|
24
25
|
*/
|
|
25
26
|
const spaceStyle = "spacer";
|
|
27
|
+
|
|
28
|
+
export let data;
|
|
26
29
|
</script>
|
|
27
30
|
|
|
31
|
+
<MetaTags title={data.meta.title} description={data.meta.description} />
|
|
32
|
+
|
|
28
33
|
<link rel="canonical" href="https://netwk.pro/privacy-policy" />
|
|
29
34
|
|
|
30
35
|
<section id="privacy-policy">
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
src/routes/terms-conditions/+page.server.js
|
|
3
|
+
|
|
4
|
+
SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
|
|
5
|
+
This file is part of Network Pro.
|
|
6
|
+
========================================================================== */
|
|
7
|
+
|
|
8
|
+
import { defaultMeta, meta } from "$lib/meta.js";
|
|
9
|
+
|
|
10
|
+
export const prerender = false;
|
|
11
|
+
|
|
12
|
+
/** @type {import('./$types').PageServerLoad} */
|
|
13
|
+
export function load() {
|
|
14
|
+
return {
|
|
15
|
+
meta: meta["/terms-conditions"] || defaultMeta,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
@@ -11,6 +11,7 @@ This file is part of Network Pro.
|
|
|
11
11
|
import TermsConditionsContent from "$lib/pages/TermsConditionsContent.svelte";
|
|
12
12
|
import LegalNav from "$lib/components/LegalNav.svelte";
|
|
13
13
|
import SocialMedia from "$lib/components/SocialMedia.svelte";
|
|
14
|
+
import MetaTags from "$lib/components/MetaTags.svelte";
|
|
14
15
|
|
|
15
16
|
/**
|
|
16
17
|
* @type {string}
|
|
@@ -23,8 +24,12 @@ This file is part of Network Pro.
|
|
|
23
24
|
* Style class for the div element.
|
|
24
25
|
*/
|
|
25
26
|
const spaceStyle = "spacer";
|
|
27
|
+
|
|
28
|
+
export let data;
|
|
26
29
|
</script>
|
|
27
30
|
|
|
31
|
+
<MetaTags title={data.meta.title} description={data.meta.description} />
|
|
32
|
+
|
|
28
33
|
<link rel="canonical" href="https://netwk.pro/terms-conditions" />
|
|
29
34
|
|
|
30
35
|
<section id="terms-conditions">
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
src/routes/terms-of-use/+page.server.js
|
|
3
|
+
|
|
4
|
+
SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
|
|
5
|
+
This file is part of Network Pro.
|
|
6
|
+
========================================================================== */
|
|
7
|
+
|
|
8
|
+
import { defaultMeta, meta } from "$lib/meta.js";
|
|
9
|
+
|
|
10
|
+
export const prerender = false;
|
|
11
|
+
|
|
12
|
+
/** @type {import('./$types').PageServerLoad} */
|
|
13
|
+
export function load() {
|
|
14
|
+
return {
|
|
15
|
+
meta: meta["/terms-of-use"] || defaultMeta,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
@@ -11,6 +11,7 @@ This file is part of Network Pro.
|
|
|
11
11
|
import TermsUseContent from "$lib/pages/TermsUseContent.svelte";
|
|
12
12
|
import LegalNav from "$lib/components/LegalNav.svelte";
|
|
13
13
|
import SocialMedia from "$lib/components/SocialMedia.svelte";
|
|
14
|
+
import MetaTags from "$lib/components/MetaTags.svelte";
|
|
14
15
|
|
|
15
16
|
/**
|
|
16
17
|
* @type {string}
|
|
@@ -23,8 +24,12 @@ This file is part of Network Pro.
|
|
|
23
24
|
* Style class for the div element.
|
|
24
25
|
*/
|
|
25
26
|
const spaceStyle = "spacer";
|
|
27
|
+
|
|
28
|
+
export let data;
|
|
26
29
|
</script>
|
|
27
30
|
|
|
31
|
+
<MetaTags title={data.meta.title} description={data.meta.description} />
|
|
32
|
+
|
|
28
33
|
<link rel="canonical" href="https://netwk.pro/terms-of-use" />
|
|
29
34
|
|
|
30
35
|
<section id="terms-of-use">
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/static/sitemap.xml
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
<loc>https://netwk.pro</loc>
|
|
9
9
|
|
|
10
|
-
<lastmod>2025-05-
|
|
10
|
+
<lastmod>2025-05-18</lastmod>
|
|
11
11
|
|
|
12
12
|
<changefreq>weekly</changefreq>
|
|
13
13
|
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
<loc>https://netwk.pro/foss-spotlight</loc>
|
|
21
21
|
|
|
22
|
-
<lastmod>2025-05-
|
|
22
|
+
<lastmod>2025-05-18</lastmod>
|
|
23
23
|
|
|
24
24
|
<changefreq>weekly</changefreq>
|
|
25
25
|
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
|
|
32
32
|
<loc>https://netwk.pro/contact</loc>
|
|
33
33
|
|
|
34
|
-
<lastmod>2025-05-
|
|
34
|
+
<lastmod>2025-05-18</lastmod>
|
|
35
35
|
|
|
36
36
|
<changefreq>monthly</changefreq>
|
|
37
37
|
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
|
|
44
44
|
<loc>https://netwk.pro/privacy-rights</loc>
|
|
45
45
|
|
|
46
|
-
<lastmod>2025-05-
|
|
46
|
+
<lastmod>2025-05-18</lastmod>
|
|
47
47
|
|
|
48
48
|
<changefreq>monthly</changefreq>
|
|
49
49
|
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
|
|
56
56
|
<loc>https://netwk.pro/privacy-policy</loc>
|
|
57
57
|
|
|
58
|
-
<lastmod>2025-05-
|
|
58
|
+
<lastmod>2025-05-18</lastmod>
|
|
59
59
|
|
|
60
60
|
<changefreq>monthly</changefreq>
|
|
61
61
|
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
|
|
68
68
|
<loc>https://netwk.pro/license</loc>
|
|
69
69
|
|
|
70
|
-
<lastmod>2025-05-
|
|
70
|
+
<lastmod>2025-05-18</lastmod>
|
|
71
71
|
|
|
72
72
|
<changefreq>monthly</changefreq>
|
|
73
73
|
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
|
|
80
80
|
<loc>https://netwk.pro/terms-of-use</loc>
|
|
81
81
|
|
|
82
|
-
<lastmod>2025-05-
|
|
82
|
+
<lastmod>2025-05-18</lastmod>
|
|
83
83
|
|
|
84
84
|
<changefreq>monthly</changefreq>
|
|
85
85
|
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
|
|
92
92
|
<loc>https://netwk.pro/terms-conditions</loc>
|
|
93
93
|
|
|
94
|
-
<lastmod>2025-05-
|
|
94
|
+
<lastmod>2025-05-18</lastmod>
|
|
95
95
|
|
|
96
96
|
<changefreq>monthly</changefreq>
|
|
97
97
|
|
package/tests/app.spec.js
CHANGED
|
@@ -15,8 +15,8 @@ test.describe("Desktop Tests", () => {
|
|
|
15
15
|
await page.setViewportSize({ width: 1280, height: 720 });
|
|
16
16
|
await page.goto("/");
|
|
17
17
|
|
|
18
|
-
// Wait for the title to
|
|
19
|
-
await page.
|
|
18
|
+
// Wait for the correct title to appear (CSP-safe)
|
|
19
|
+
await expect(page).toHaveTitle(/Locking Down Networks/);
|
|
20
20
|
|
|
21
21
|
// Verify the page title contains the expected partial match
|
|
22
22
|
const title = await page.title();
|
package/tests/mobile.spec.js
CHANGED
|
@@ -14,8 +14,8 @@ test.describe("Mobile Responsiveness", () => {
|
|
|
14
14
|
await page.setViewportSize({ width: 375, height: 812 });
|
|
15
15
|
await page.goto("/");
|
|
16
16
|
|
|
17
|
-
// Wait for the title to
|
|
18
|
-
await page.
|
|
17
|
+
// Wait for the correct title to appear (CSP-safe)
|
|
18
|
+
await expect(page).toHaveTitle(/Locking Down Networks/);
|
|
19
19
|
|
|
20
20
|
// Verify the main heading is visible
|
|
21
21
|
const mainHeading = page.locator("h2");
|
|
@@ -30,8 +30,8 @@ test.describe("Mobile Responsiveness", () => {
|
|
|
30
30
|
await page.setViewportSize({ width: 375, height: 812 });
|
|
31
31
|
await page.goto("/");
|
|
32
32
|
|
|
33
|
-
// Wait for the title to
|
|
34
|
-
await page.
|
|
33
|
+
// Wait for the correct title to appear (CSP-safe)
|
|
34
|
+
await expect(page).toHaveTitle(/Locking Down Networks/);
|
|
35
35
|
|
|
36
36
|
// Check that there are no overlapping elements
|
|
37
37
|
const body = await page.locator("body").boundingBox();
|
|
@@ -46,8 +46,8 @@ test.describe("Mobile Responsiveness", () => {
|
|
|
46
46
|
await page.setViewportSize({ width: 375, height: 812 });
|
|
47
47
|
await page.goto("/");
|
|
48
48
|
|
|
49
|
-
// Wait for the title to
|
|
50
|
-
await page.
|
|
49
|
+
// Wait for the correct title to appear (CSP-safe)
|
|
50
|
+
await expect(page).toHaveTitle(/Locking Down Networks/);
|
|
51
51
|
|
|
52
52
|
// Check the "about" link is tappable and visible
|
|
53
53
|
const aboutLink = page.locator("a", { hasText: "about" });
|