@networkpro/web 0.13.2 → 1.0.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.
- package/CODE_OF_CONDUCT.md +172 -0
- package/LICENSE.md +4 -4
- package/README.md +11 -10
- package/assets/bin/contact.vcf +13 -0
- package/assets/bin/contact@s.neteng.pro.aexpk +17 -0
- package/assets/bin/contact@s.neteng.pro.asc +17 -0
- package/assets/bin/github@sl.neteng.cc.aexpk +29 -0
- package/assets/bin/github@sl.neteng.cc.asc +29 -0
- package/assets/bin/linksheet.json +8 -0
- package/assets/bin/support@neteng.pro.aexpk +47 -0
- package/assets/bin/support@neteng.pro.asc +47 -0
- package/assets/consulting-terms.pdf +0 -0
- package/eslint.config.mjs +112 -0
- package/jsconfig.json +28 -0
- package/netlify.toml +13 -0
- package/package.json +64 -61
- package/playwright.config.js +79 -0
- package/postcss.config.mjs +14 -0
- package/scripts/bundleCss.js +40 -0
- package/src/app.d.ts +15 -0
- package/src/app.html +81 -0
- package/src/demo.spec.js +14 -0
- package/src/lib/components/Badges.svelte +74 -0
- package/src/lib/components/ContainerSection.svelte +19 -0
- package/src/lib/components/FullWidthSection.svelte +13 -0
- package/src/lib/components/LegalNav.svelte +75 -0
- package/src/lib/components/Logo.svelte +110 -0
- package/src/lib/components/SocialMedia.svelte +70 -0
- package/src/lib/components/foss/FossFeatures.svelte +24 -0
- package/src/lib/components/foss/FossItemContent.svelte +153 -0
- package/src/lib/components/layout/Footer.svelte +188 -0
- package/src/lib/components/layout/HeaderDefault.svelte +86 -0
- package/src/lib/components/layout/HeaderHome.svelte +84 -0
- package/src/lib/data/fossData.js +233 -0
- package/src/lib/images.js +77 -0
- package/src/lib/img/badges/cc-by-badge.png +0 -0
- package/src/lib/img/badges/gpl-badge.svg +1 -0
- package/src/lib/img/by.svg +1 -0
- package/src/lib/img/cc.svg +1 -0
- package/src/lib/img/logo-web.png +0 -0
- package/src/lib/img/logo-web.webp +0 -0
- package/src/lib/img/obtainium.webp +0 -0
- package/src/lib/img/posts/acode.png +0 -0
- package/src/lib/img/posts/acode.webp +0 -0
- package/src/lib/img/posts/linksheet.png +0 -0
- package/src/lib/img/posts/linksheet.webp +0 -0
- package/src/lib/img/posts/pmx.png +0 -0
- package/src/lib/img/posts/pmx.webp +0 -0
- package/src/lib/img/posts/tosdr.png +0 -0
- package/src/lib/img/posts/tosdr.webp +0 -0
- package/src/lib/img/posts/urlcheck.png +0 -0
- package/src/lib/img/posts/urlcheck.webp +0 -0
- package/src/lib/index.js +43 -0
- package/src/lib/pages/AboutContent.svelte +294 -0
- package/src/lib/pages/FossContent.svelte +109 -0
- package/src/lib/pages/HomeContent.svelte +120 -0
- package/src/lib/pages/LicenseContent.svelte +486 -0
- package/src/lib/pages/PrivacyContent.svelte +249 -0
- package/src/lib/pages/TermsConditionsContent.svelte +240 -0
- package/src/lib/pages/TermsUseContent.svelte +236 -0
- package/src/lib/registerServiceWorker.js +65 -0
- package/src/lib/styles/css/brands.css +76 -0
- package/src/lib/styles/css/brands.min.css +6 -0
- package/src/lib/styles/css/default.css +454 -0
- package/src/lib/styles/css/fontawesome.min.css +9 -0
- package/src/lib/styles/css/global.css +10 -0
- package/src/lib/styles/css/normalize.css +349 -0
- package/src/lib/styles/css/offline.css +120 -0
- package/src/lib/styles/css/solid.min.css +6 -0
- package/src/lib/styles/css/style.css +310 -0
- package/src/lib/styles/fa-global.css +10 -0
- package/src/lib/styles/global.min.css +9 -0
- package/src/lib/styles/index.js +11 -0
- package/src/lib/styles/webfonts/fa-brands-400.ttf +0 -0
- package/src/lib/styles/webfonts/fa-brands-400.woff2 +0 -0
- package/src/lib/styles/webfonts/fa-solid-900.ttf +0 -0
- package/src/lib/styles/webfonts/fa-solid-900.woff2 +0 -0
- package/src/routes/+error.svelte +43 -0
- package/src/routes/+layout.js +94 -0
- package/src/routes/+layout.svelte +110 -0
- package/src/routes/+page.svelte +77 -0
- package/src/routes/about/+page.svelte +61 -0
- package/src/routes/contact/+page.server.js +24 -0
- package/src/routes/example.svx +9 -0
- package/src/routes/foss-spotlight/+page.svelte +63 -0
- package/src/routes/license/+page.svelte +63 -0
- package/src/routes/page.svelte.test.js +18 -0
- package/src/routes/privacy-policy/+page.svelte +63 -0
- package/src/routes/privacy-rights/+page.server.js +24 -0
- package/src/routes/terms-conditions/+page.svelte +63 -0
- package/src/routes/terms-of-use/+page.svelte +63 -0
- package/src/service-worker.d.ts +4 -0
- package/src/service-worker.js +90 -0
- package/static/icon-512x512-maskable.png +0 -0
- package/static/icon-contact.png +0 -0
- package/static/icon-services.png +0 -0
- package/static/img/svelte.png +0 -0
- package/static/manifest.json +64 -0
- package/static/offline.html +79 -0
- package/static/offline.min.css +7 -0
- package/{robots.txt → static/robots.txt} +0 -2
- package/static/sitemap.xml +102 -0
- package/stylelint.config.js +118 -0
- package/svelte.config.js +56 -0
- package/tests/app.spec.js +67 -0
- package/tests/mobile.spec.js +58 -0
- package/tests-examples/demo-todo-app.spec.js +504 -0
- package/tsconfig.custom.json +39 -0
- package/vite.config.js +19 -0
- package/vitest-setup-client.js +33 -0
- package/vitest.config.client.js +34 -0
- package/vitest.config.server.js +30 -0
- package/404.html +0 -84
- package/about.html +0 -334
- package/about.html.br +0 -0
- package/about.html.gz +0 -0
- package/css/default.css +0 -1
- package/css/normalize.css +0 -1
- package/css/style.css +0 -1
- package/docs/404.html +0 -1187
- package/docs/assets/external/avatars.githubusercontent.com/u/170266279.png +0 -0
- package/docs/assets/external/img.shields.io/badge/GitHub_Package_Registry-white.ed8def48.svg +0 -1
- package/docs/assets/external/img.shields.io/badge/npmjs-white.681714c1.svg +0 -1
- package/docs/assets/external/mirrors.creativecommons.org/presskit/icons/by.svg +0 -20
- package/docs/assets/external/mirrors.creativecommons.org/presskit/icons/cc.svg +0 -27
- package/docs/assets/external/unpkg.com/mermaid@11/dist/mermaid.min.js +0 -2607
- package/docs/assets/images/favicon.png +0 -0
- package/docs/assets/javascripts/bundle.c8b220af.min.js +0 -16
- package/docs/assets/javascripts/bundle.c8b220af.min.js.map +0 -7
- package/docs/assets/javascripts/lunr/min/lunr.ar.min.js +0 -1
- package/docs/assets/javascripts/lunr/min/lunr.da.min.js +0 -18
- package/docs/assets/javascripts/lunr/min/lunr.de.min.js +0 -18
- package/docs/assets/javascripts/lunr/min/lunr.du.min.js +0 -18
- package/docs/assets/javascripts/lunr/min/lunr.el.min.js +0 -1
- package/docs/assets/javascripts/lunr/min/lunr.es.min.js +0 -18
- package/docs/assets/javascripts/lunr/min/lunr.fi.min.js +0 -18
- package/docs/assets/javascripts/lunr/min/lunr.fr.min.js +0 -18
- package/docs/assets/javascripts/lunr/min/lunr.he.min.js +0 -1
- package/docs/assets/javascripts/lunr/min/lunr.hi.min.js +0 -1
- package/docs/assets/javascripts/lunr/min/lunr.hu.min.js +0 -18
- package/docs/assets/javascripts/lunr/min/lunr.hy.min.js +0 -1
- package/docs/assets/javascripts/lunr/min/lunr.it.min.js +0 -18
- package/docs/assets/javascripts/lunr/min/lunr.ja.min.js +0 -1
- package/docs/assets/javascripts/lunr/min/lunr.jp.min.js +0 -1
- package/docs/assets/javascripts/lunr/min/lunr.kn.min.js +0 -1
- package/docs/assets/javascripts/lunr/min/lunr.ko.min.js +0 -1
- package/docs/assets/javascripts/lunr/min/lunr.multi.min.js +0 -1
- package/docs/assets/javascripts/lunr/min/lunr.nl.min.js +0 -18
- package/docs/assets/javascripts/lunr/min/lunr.no.min.js +0 -18
- package/docs/assets/javascripts/lunr/min/lunr.pt.min.js +0 -18
- package/docs/assets/javascripts/lunr/min/lunr.ro.min.js +0 -18
- package/docs/assets/javascripts/lunr/min/lunr.ru.min.js +0 -18
- package/docs/assets/javascripts/lunr/min/lunr.sa.min.js +0 -1
- package/docs/assets/javascripts/lunr/min/lunr.stemmer.support.min.js +0 -1
- package/docs/assets/javascripts/lunr/min/lunr.sv.min.js +0 -18
- package/docs/assets/javascripts/lunr/min/lunr.ta.min.js +0 -1
- package/docs/assets/javascripts/lunr/min/lunr.te.min.js +0 -1
- package/docs/assets/javascripts/lunr/min/lunr.th.min.js +0 -1
- package/docs/assets/javascripts/lunr/min/lunr.tr.min.js +0 -18
- package/docs/assets/javascripts/lunr/min/lunr.vi.min.js +0 -1
- package/docs/assets/javascripts/lunr/min/lunr.zh.min.js +0 -1
- package/docs/assets/javascripts/lunr/tinyseg.js +0 -206
- package/docs/assets/javascripts/lunr/wordcut.js +0 -6708
- package/docs/assets/javascripts/workers/search.f8cc74c7.min.js +0 -42
- package/docs/assets/javascripts/workers/search.f8cc74c7.min.js.map +0 -7
- package/docs/assets/stylesheets/main.2afb09e1.min.css +0 -1
- package/docs/assets/stylesheets/main.2afb09e1.min.css.map +0 -1
- package/docs/assets/stylesheets/palette.06af60db.min.css +0 -1
- package/docs/assets/stylesheets/palette.06af60db.min.css.map +0 -1
- package/docs/blog/2015/01/04/secure-secure-shell/index.html +0 -1771
- package/docs/blog/2025/04/30/our-blog-is-live/index.html +0 -1436
- package/docs/blog/archive/2015/index.html +0 -1303
- package/docs/blog/archive/2025/index.html +0 -1291
- package/docs/blog/category/security/index.html +0 -1303
- package/docs/blog/index.html +0 -1350
- package/docs/conduct/index.html +0 -1509
- package/docs/feed_json_created.json +0 -1
- package/docs/feed_json_updated.json +0 -1
- package/docs/feed_rss_created.xml +0 -1
- package/docs/feed_rss_updated.xml +0 -1
- package/docs/fontawesome/LICENSE.txt +0 -165
- package/docs/fontawesome/brands/facebook.svg +0 -1
- package/docs/fontawesome/brands/instagram.svg +0 -1
- package/docs/fontawesome/brands/linkedin.svg +0 -1
- package/docs/fontawesome/brands/mastodon.svg +0 -1
- package/docs/fontawesome/solid/at.svg +0 -1
- package/docs/index.html +0 -1395
- package/docs/legal/index.html +0 -1740
- package/docs/privacy/index.html +0 -1615
- package/docs/search/search_index.json +0 -1
- package/docs/sitemap.xml +0 -55
- package/docs/sitemap.xml.gz +0 -0
- package/docs/tags/index.html +0 -2084
- package/docs/terms-conditions/index.html +0 -1655
- package/docs/terms-use/index.html +0 -1584
- package/favicon-192.png +0 -0
- package/favicon-512.png +0 -0
- package/favicon.svg.br +0 -0
- package/favicon.svg.gz +0 -0
- package/html/spotlight.html +0 -516
- package/html/spotlight.html.br +0 -0
- package/html/spotlight.html.gz +0 -0
- package/img/banner-1280x640.png +0 -0
- package/img/banner-1440.png +0 -0
- package/img/banner-og-1200x630.png +0 -0
- package/img/favicon-template.png +0 -0
- package/img/fb-cover.png +0 -0
- package/img/fb-cover2.png +0 -0
- package/img/fsf-member.png +0 -0
- package/img/gh-logo.png +0 -0
- package/img/gpl3-small.png +0 -0
- package/img/gpl3.png +0 -0
- package/img/linkedin-banner-new.png +0 -0
- package/img/linkedin-banner.png +0 -0
- package/img/linkedin-banner2.png +0 -0
- package/img/logo-1024x1024.png +0 -0
- package/img/logo-alt.png +0 -0
- package/img/logo-elevated.png +0 -0
- package/img/logo-light-elevated.png +0 -0
- package/img/logo-light-slogan.png +0 -0
- package/img/logo-light.png +0 -0
- package/img/logo-slogan.png +0 -0
- package/img/logo-transparent-black-small.png +0 -0
- package/img/logo-transparent-black.png +0 -0
- package/img/logo-transparent-elevated.png +0 -0
- package/img/logo-transparent-slogan.png +0 -0
- package/img/mastodon-banner.png +0 -0
- package/img/netpro-logo-transparent.png +0 -0
- package/img/posts/acode.png +0 -0
- package/img/posts/linksheet.png +0 -0
- package/img/posts/pmx.png +0 -0
- package/img/posts/tosdr.png +0 -0
- package/img/posts/urlcheck.png +0 -0
- package/img/qr/pgp-contact.png +0 -0
- package/img/qr/pgp-support.png +0 -0
- package/img/qr/vcard.png +0 -0
- package/img/sd311.png +0 -0
- package/img/shield.png +0 -0
- package/img/shield.svg +0 -1
- package/img/shield.svg.br +0 -0
- package/img/shield.svg.gz +0 -0
- package/img/shield2.png +0 -0
- package/img/shield3-2000x2000.png +0 -0
- package/img/shield3-black-1024x1024.png +0 -0
- package/img/shield3-black.png +0 -0
- package/img/shield3-white.png +0 -0
- package/img/trademark.jpg +0 -0
- package/index.html +0 -268
- package/index.html.br +0 -0
- package/index.html.gz +0 -0
- package/js/app.d544156ea2ba85a7d486.mjs +0 -1
- package/js/runtime.52b1ac291305b90de3df.mjs +0 -1
- package/js/vendor/.gitkeep +0 -0
- package/legal.html +0 -535
- package/legal.html.br +0 -0
- package/legal.html.gz +0 -0
- package/privacy.html +0 -404
- package/privacy.html.br +0 -0
- package/privacy.html.gz +0 -0
- package/site.webmanifest +0 -25
- package/sitemap.xml +0 -177
- package/terms-and-conditions.html +0 -409
- package/terms-and-conditions.html.br +0 -0
- package/terms-and-conditions.html.gz +0 -0
- package/terms-of-use.html +0 -380
- package/terms-of-use.html.br +0 -0
- package/terms-of-use.html.gz +0 -0
- /package/{docs/assets/external/raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master/assets → assets}/nsa-happy-dance.png +0 -0
- /package/{favicon.svg → src/lib/img/favicon.svg} +0 -0
- /package/{favicon-180.png → src/lib/img/icon-180x180.png} +0 -0
- /package/{img/badge_obtainium.png → src/lib/img/obtainium.png} +0 -0
- /package/{docs/assets/external/raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master → src/lib}/img/qr/pgp-contact.png +0 -0
- /package/{img → src/lib/img}/qr/pgp-github.png +0 -0
- /package/{docs/assets/external/raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master → src/lib}/img/qr/pgp-support.png +0 -0
- /package/{docs/assets/external/raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master → src/lib}/img/qr/vcard.png +0 -0
- /package/{CNAME → static/CNAME} +0 -0
- /package/{favicon.ico → static/favicon.ico} +0 -0
- /package/{docs/img/favicon.png → static/icon-192x192.png} +0 -0
- /package/{docs/img/logo.png → static/icon-512x512.png} +0 -0
- /package/{favicon-splash.png → static/icon-splash.png} +0 -0
- /package/{img → static/img}/logo-transparent.png +0 -0
- /package/{img → static/img}/logo.png +0 -0
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
<!-- ==========================================================================
|
|
2
|
+
src/lib/pages/AboutContent.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
|
+
import { pgpContact, pgpSupport, vcfSrc } from "$lib";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Security attribute for external links
|
|
13
|
+
* @type {string}
|
|
14
|
+
*/
|
|
15
|
+
const rel = "noopener noreferrer";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* HTML attribute for async image decoding
|
|
19
|
+
* @type {"async" | "sync" | "auto"}
|
|
20
|
+
*/
|
|
21
|
+
const decoding = "async";
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* HTML attribute for lazy loading images
|
|
25
|
+
* @type {"lazy" | "eager"}
|
|
26
|
+
*/
|
|
27
|
+
const loading = "lazy";
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* CSS class for styled horizontal rule
|
|
31
|
+
* @type {string}
|
|
32
|
+
*/
|
|
33
|
+
const hrStyle = "hr-styled";
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Target attribute for opening links in new tab
|
|
37
|
+
* @type {string}
|
|
38
|
+
*/
|
|
39
|
+
const tgtBlank = "_blank";
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Navigation links for the page
|
|
43
|
+
* @type {Array<{
|
|
44
|
+
* label: string,
|
|
45
|
+
* href: string,
|
|
46
|
+
* target: string,
|
|
47
|
+
* text?: string
|
|
48
|
+
* }>}
|
|
49
|
+
*/
|
|
50
|
+
const navLinks = [
|
|
51
|
+
{
|
|
52
|
+
label: "SPDX License Identifier",
|
|
53
|
+
href: "https://spdx.dev/learn/handling-license-info",
|
|
54
|
+
target: "_blank",
|
|
55
|
+
text: "CC-BY-4.0 OR GPL-3.0-or-later",
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
label: "Markdown",
|
|
59
|
+
href: "https://netwk.pro/docs",
|
|
60
|
+
target: "_self",
|
|
61
|
+
},
|
|
62
|
+
];
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* PGP key information for contact emails
|
|
66
|
+
* @type {Array<{
|
|
67
|
+
* label: string,
|
|
68
|
+
* qrSrc: string,
|
|
69
|
+
* keySearch: string,
|
|
70
|
+
* fingerprint: string[]
|
|
71
|
+
* }>}
|
|
72
|
+
*/
|
|
73
|
+
const pgpKeys = [
|
|
74
|
+
{
|
|
75
|
+
label: "support@neteng.pro",
|
|
76
|
+
qrSrc: pgpSupport,
|
|
77
|
+
keySearch: "https://keys.openpgp.org/search?q=support%40neteng.pro",
|
|
78
|
+
fingerprint: ["6590b992e2e3eff12738", "7bce2af093e9dec61ba0"],
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
label: "contact@s.neteng.pro",
|
|
82
|
+
qrSrc: pgpContact,
|
|
83
|
+
keySearch: "https://keys.openpgp.org/search?q=contact%40s.neteng.pro",
|
|
84
|
+
fingerprint: ["df118baa6c2d9dcdebdc", "2ddcf99373499495f957"],
|
|
85
|
+
},
|
|
86
|
+
];
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* vCard information for contact details
|
|
90
|
+
* @type {{
|
|
91
|
+
* qrSrc: string,
|
|
92
|
+
* vcf: string
|
|
93
|
+
* }}
|
|
94
|
+
*/
|
|
95
|
+
const vCard = {
|
|
96
|
+
qrSrc: vcfSrc,
|
|
97
|
+
vcf: "https://raw.githubusercontent.com/netwk-pro/netwk-pro.github.io/refs/heads/master/assets/bin/contact.vcf",
|
|
98
|
+
};
|
|
99
|
+
</script>
|
|
100
|
+
|
|
101
|
+
<!-- BEGIN TITLE -->
|
|
102
|
+
<section id="top">
|
|
103
|
+
<span class="small-text">
|
|
104
|
+
<a {rel} href={navLinks[0].href} target={navLinks[0].target}>
|
|
105
|
+
{navLinks[0].label}
|
|
106
|
+
</a>
|
|
107
|
+
: <code>{navLinks[0].text}</code>
|
|
108
|
+
</span>
|
|
109
|
+
</section>
|
|
110
|
+
|
|
111
|
+
<section id="page-title">
|
|
112
|
+
<h1>About Network Pro™</h1>
|
|
113
|
+
<p>
|
|
114
|
+
<strong>Network Pro Strategies (Network Pro™)</strong>
|
|
115
|
+
<br />
|
|
116
|
+
<em>Remote-First Cybersecurity & Privacy Consulting</em>
|
|
117
|
+
</p>
|
|
118
|
+
</section>
|
|
119
|
+
|
|
120
|
+
<div class="spacer"></div>
|
|
121
|
+
|
|
122
|
+
<section id="subhead">
|
|
123
|
+
<h2>Security That Respects You</h2>
|
|
124
|
+
</section>
|
|
125
|
+
<!-- END TITLE -->
|
|
126
|
+
|
|
127
|
+
<hr />
|
|
128
|
+
|
|
129
|
+
<!-- BEGIN ABOUT US -->
|
|
130
|
+
<p>
|
|
131
|
+
<sup>
|
|
132
|
+
<strong>Formats:</strong>
|
|
133
|
+
<span class="visited">HTML</span> |
|
|
134
|
+
<a href={navLinks[1].href} target={tgtBlank}>{navLinks[1].label}</a>
|
|
135
|
+
</sup>
|
|
136
|
+
</p>
|
|
137
|
+
|
|
138
|
+
<p>
|
|
139
|
+
At <strong>Network Pro Strategies (Network Pro™)</strong>, we deliver
|
|
140
|
+
network security, cybersecurity, and digital privacy consulting with clarity,
|
|
141
|
+
credibility, and care. We believe that real security doesn't have to come at
|
|
142
|
+
the cost of user autonomy, and that privacy-minded solutions can be both
|
|
143
|
+
practical and powerful.
|
|
144
|
+
</p>
|
|
145
|
+
|
|
146
|
+
<p>
|
|
147
|
+
Our approach is built on a simple principle:
|
|
148
|
+
<strong>the best security is the one that fits.</strong> That means we don't
|
|
149
|
+
push ideologies—we apply what works. We advocate for and implement
|
|
150
|
+
<strong>free and open source solutions</strong>
|
|
151
|
+
where they offer competitive functionality, control, and visibility. When proprietary
|
|
152
|
+
platforms are better suited, we deploy them responsibly and securely—ensuring every
|
|
153
|
+
recommendation is grounded in
|
|
154
|
+
<strong>technical merit</strong>, <strong>scalability</strong>, and
|
|
155
|
+
<strong>client goals</strong>.
|
|
156
|
+
</p>
|
|
157
|
+
|
|
158
|
+
<h3>What We Do</h3>
|
|
159
|
+
<p>
|
|
160
|
+
As a remote-first consultancy, we support clients across industries and
|
|
161
|
+
geographies with a focus on:
|
|
162
|
+
</p>
|
|
163
|
+
|
|
164
|
+
<ul>
|
|
165
|
+
<li><strong>Network Hardening & Perimeter Defense</strong></li>
|
|
166
|
+
<li><strong>Firewall Architecture & Policy Optimization</strong></li>
|
|
167
|
+
<li><strong>Cloud Security & Zero Trust Implementation</strong></li>
|
|
168
|
+
<li><strong>Secure Infrastructure Design & Implementation</strong></li>
|
|
169
|
+
<li><strong>Risk Reduction & Security Posture Assessment</strong></li>
|
|
170
|
+
</ul>
|
|
171
|
+
|
|
172
|
+
<p>
|
|
173
|
+
Our consulting engagements range from tactical one-off solutions to strategic,
|
|
174
|
+
long-term partnerships. Whether it's helping a business segment its internal
|
|
175
|
+
network, lock down its cloud footprint, or plan scalable defenses—we deliver
|
|
176
|
+
clear value, with zero fluff.
|
|
177
|
+
</p>
|
|
178
|
+
|
|
179
|
+
<p>
|
|
180
|
+
We also believe education is a core pillar of real-world security. That's why
|
|
181
|
+
we invest in raising awareness—across both technical and general audiences—on
|
|
182
|
+
best practices in digital privacy, secure design, and threat mitigation.
|
|
183
|
+
</p>
|
|
184
|
+
|
|
185
|
+
<p>
|
|
186
|
+
<strong
|
|
187
|
+
>Network Pro™ exists to bring strong, thoughtful security to
|
|
188
|
+
organizations that value integrity—without sacrificing agility or trust.</strong>
|
|
189
|
+
We don't just secure infrastructure. We secure confidence.
|
|
190
|
+
</p>
|
|
191
|
+
|
|
192
|
+
<div class="spacer"></div>
|
|
193
|
+
|
|
194
|
+
<p>
|
|
195
|
+
<a {rel} href="https://contact.neteng.pro" target="_blank">Let's connect</a>
|
|
196
|
+
to discuss how we can help secure and strengthen your business today.
|
|
197
|
+
</p>
|
|
198
|
+
|
|
199
|
+
<div class="spacer"></div>
|
|
200
|
+
|
|
201
|
+
<hr class={hrStyle} />
|
|
202
|
+
|
|
203
|
+
<div class="spacer"></div>
|
|
204
|
+
|
|
205
|
+
<p>
|
|
206
|
+
You can find our PGP keys and a vCard containing our contact information
|
|
207
|
+
below.
|
|
208
|
+
</p>
|
|
209
|
+
|
|
210
|
+
<!-- BEGIN PGP KEYS -->
|
|
211
|
+
<div class="pgp-wrap">
|
|
212
|
+
<table class="pgp">
|
|
213
|
+
<tbody>
|
|
214
|
+
<!-- Row 0 (First row) remains unchanged -->
|
|
215
|
+
<tr>
|
|
216
|
+
<td class="pgp-col1">
|
|
217
|
+
<img
|
|
218
|
+
{decoding}
|
|
219
|
+
{loading}
|
|
220
|
+
src={pgpKeys[0].qrSrc}
|
|
221
|
+
class="pgp-image"
|
|
222
|
+
alt={`PGP Key - ${pgpKeys[0].label}`} />
|
|
223
|
+
</td>
|
|
224
|
+
<td class="pgp-col2">
|
|
225
|
+
<a
|
|
226
|
+
{rel}
|
|
227
|
+
href={pgpKeys[0].keySearch}
|
|
228
|
+
download
|
|
229
|
+
type="application/pgp-keys"
|
|
230
|
+
target={tgtBlank}>
|
|
231
|
+
<strong>{pgpKeys[0].label}</strong>
|
|
232
|
+
</a>
|
|
233
|
+
<p>Fingerprint:</p>
|
|
234
|
+
<p class="fingerprint">
|
|
235
|
+
{pgpKeys[0].fingerprint.join("\n")}
|
|
236
|
+
</p>
|
|
237
|
+
</td>
|
|
238
|
+
</tr>
|
|
239
|
+
|
|
240
|
+
<!-- Row 1 (Second row) has its columns swapped -->
|
|
241
|
+
<tr>
|
|
242
|
+
<td class="pgp-col1">
|
|
243
|
+
<a
|
|
244
|
+
{rel}
|
|
245
|
+
href={pgpKeys[1].keySearch}
|
|
246
|
+
download
|
|
247
|
+
type="application/pgp-keys"
|
|
248
|
+
target={tgtBlank}>
|
|
249
|
+
<strong>{pgpKeys[1].label}</strong>
|
|
250
|
+
</a>
|
|
251
|
+
<p>Fingerprint:</p>
|
|
252
|
+
<p class="fingerprint">
|
|
253
|
+
{pgpKeys[1].fingerprint.join("\n")}
|
|
254
|
+
</p>
|
|
255
|
+
</td>
|
|
256
|
+
<td class="pgp-col2">
|
|
257
|
+
<img
|
|
258
|
+
{decoding}
|
|
259
|
+
{loading}
|
|
260
|
+
src={pgpKeys[1].qrSrc}
|
|
261
|
+
class="pgp-image"
|
|
262
|
+
alt={`PGP Key - ${pgpKeys[1].label}`} />
|
|
263
|
+
</td>
|
|
264
|
+
</tr>
|
|
265
|
+
|
|
266
|
+
<!-- Row 2 (Third row) remains unchanged -->
|
|
267
|
+
<tr>
|
|
268
|
+
<td class="pgp-col1">
|
|
269
|
+
<img
|
|
270
|
+
{decoding}
|
|
271
|
+
{loading}
|
|
272
|
+
src={vCard.qrSrc}
|
|
273
|
+
class="pgp-image"
|
|
274
|
+
alt="vCard" />
|
|
275
|
+
</td>
|
|
276
|
+
<td class="pgp-col2">
|
|
277
|
+
<strong>vCard</strong>
|
|
278
|
+
<p>
|
|
279
|
+
<a
|
|
280
|
+
{rel}
|
|
281
|
+
href={vCard.vcf}
|
|
282
|
+
download
|
|
283
|
+
type="text/vcard"
|
|
284
|
+
target={tgtBlank}>
|
|
285
|
+
<strong>vcf</strong>
|
|
286
|
+
</a>
|
|
287
|
+
</p>
|
|
288
|
+
</td>
|
|
289
|
+
</tr>
|
|
290
|
+
</tbody>
|
|
291
|
+
</table>
|
|
292
|
+
</div>
|
|
293
|
+
<!-- END PGP KEYS -->
|
|
294
|
+
<!-- END ABOUT US -->
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
<!-- ==========================================================================
|
|
2
|
+
src/lib/pages/FossContent.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
|
+
import { fossData } from "$lib/data/fossData.js";
|
|
10
|
+
import FossItemContent from "$lib/components/foss/FossItemContent.svelte";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Process the FOSS data
|
|
14
|
+
* @type {any[]}
|
|
15
|
+
*/
|
|
16
|
+
const processedFossData = fossData.map((item) => {
|
|
17
|
+
// Create a new object to avoid modifying the original
|
|
18
|
+
const processedItem = { ...item };
|
|
19
|
+
|
|
20
|
+
// Process the links to ensure all have required properties
|
|
21
|
+
if (item.links) {
|
|
22
|
+
processedItem.links = item.links.map((link) => {
|
|
23
|
+
// Use a type assertion to tell TypeScript this is any object
|
|
24
|
+
/** @type {any} */
|
|
25
|
+
const typedLink = link;
|
|
26
|
+
|
|
27
|
+
// Now create a new object with all default values
|
|
28
|
+
return {
|
|
29
|
+
label: typedLink.label || "Download",
|
|
30
|
+
href: typedLink.href || "#",
|
|
31
|
+
imgSrc: typedLink.imgSrc || "",
|
|
32
|
+
imgAlt: typedLink.imgAlt || "",
|
|
33
|
+
downloadText: typedLink.downloadText || "",
|
|
34
|
+
downloadHref: typedLink.downloadHref || "",
|
|
35
|
+
};
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return processedItem;
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Page information containing title and last updated date
|
|
44
|
+
* @type {{title: string, lastUpdated: string}}
|
|
45
|
+
*/
|
|
46
|
+
const pageInfo = {
|
|
47
|
+
title: "FOSS Spotlight",
|
|
48
|
+
lastUpdated: "May 14, 2025",
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
/** @type {any} */
|
|
52
|
+
const constants = {
|
|
53
|
+
classSmall: "small-text",
|
|
54
|
+
rel: "noopener noreferrer",
|
|
55
|
+
backTop: "Back to top",
|
|
56
|
+
hrefTop: "#top",
|
|
57
|
+
targetSelf: "_self",
|
|
58
|
+
targetBlank: "_blank",
|
|
59
|
+
};
|
|
60
|
+
</script>
|
|
61
|
+
|
|
62
|
+
<section id="top">
|
|
63
|
+
<span class={constants.classSmall}>
|
|
64
|
+
<a
|
|
65
|
+
rel={constants.rel}
|
|
66
|
+
href="https://spdx.dev/learn/handling-license-info"
|
|
67
|
+
target={constants.targetBlank}>
|
|
68
|
+
SPDX License Identifier
|
|
69
|
+
</a>
|
|
70
|
+
: <code>CC-BY-4.0 OR GPL-3.0-or-later</code>
|
|
71
|
+
</span>
|
|
72
|
+
</section>
|
|
73
|
+
|
|
74
|
+
<section id="page-title">
|
|
75
|
+
<h1>{pageInfo.title}</h1>
|
|
76
|
+
<p>
|
|
77
|
+
<strong
|
|
78
|
+
>Highlights of Exceptional Free and Open Source Software (FOSS)</strong
|
|
79
|
+
><br />
|
|
80
|
+
<strong>Last Updated:</strong>
|
|
81
|
+
{pageInfo.lastUpdated}
|
|
82
|
+
</p>
|
|
83
|
+
</section>
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
<nav id="toc">
|
|
88
|
+
<h2>Table of Contents</h2>
|
|
89
|
+
<ul>
|
|
90
|
+
{#each processedFossData as { id, title }}
|
|
91
|
+
<li><a href={"#" + id}>{title}</a></li>
|
|
92
|
+
{/each}
|
|
93
|
+
</ul>
|
|
94
|
+
</nav>
|
|
95
|
+
|
|
96
|
+
<div class="spacer"></div>
|
|
97
|
+
|
|
98
|
+
<hr />
|
|
99
|
+
|
|
100
|
+
{#each processedFossData as fossItem, index (fossItem.id)}
|
|
101
|
+
<FossItemContent {fossItem} isFirst={index === 0} />
|
|
102
|
+
{#if index !== processedFossData.length - 1}
|
|
103
|
+
<div class="spacer"></div>
|
|
104
|
+
|
|
105
|
+
<hr class="hr-styled" />
|
|
106
|
+
|
|
107
|
+
<div class="spacer"></div>
|
|
108
|
+
{/if}
|
|
109
|
+
{/each}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
<!-- ==========================================================================
|
|
2
|
+
src/lib/pages/HomeContent.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
|
+
import { base } from "$app/paths";
|
|
10
|
+
|
|
11
|
+
// Log the base path to verify its value
|
|
12
|
+
//console.log("Base path:", base);
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* URL to the FOSS Spotlight page, using the base path
|
|
16
|
+
* @type {string}
|
|
17
|
+
*/
|
|
18
|
+
const spotlightLink = `${base}/foss-spotlight`;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* URL to the external blog
|
|
22
|
+
* @type {string}
|
|
23
|
+
*/
|
|
24
|
+
const blogLink = "https://blog.netwk.pro";
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* CSS class for the index headings.
|
|
28
|
+
* @type {string}
|
|
29
|
+
*/
|
|
30
|
+
const classIndex = "index3";
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* CSS class for centered text.
|
|
34
|
+
* @type {string}
|
|
35
|
+
*/
|
|
36
|
+
const classCenter = "center-text";
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* CSS class for large centered text.
|
|
40
|
+
* @type {string}
|
|
41
|
+
*/
|
|
42
|
+
const classLarge = "large-text-center";
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Relation attribute for external links.
|
|
46
|
+
* @type {string}
|
|
47
|
+
*/
|
|
48
|
+
const rel = "noopener noreferrer";
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Target attribute to open links in a new tab.
|
|
52
|
+
* @type {string}
|
|
53
|
+
*/
|
|
54
|
+
const targetBlank = "_blank";
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Target attribute to open links in the same tab.
|
|
58
|
+
* @type {string}
|
|
59
|
+
*/
|
|
60
|
+
const targetSelf = "_self";
|
|
61
|
+
</script>
|
|
62
|
+
|
|
63
|
+
<!-- BEGIN HOME CONTENT -->
|
|
64
|
+
<h3 class={classIndex}>🔒 Practical Cybersecurity. Trusted Expertise.</h3>
|
|
65
|
+
|
|
66
|
+
<p class={classCenter}>
|
|
67
|
+
At <strong>Network Pro™</strong>, we specialize in network security,
|
|
68
|
+
cybersecurity, and digital privacy consulting that meets today's real-world
|
|
69
|
+
demands. Our remote-first approach combines technical depth with practical
|
|
70
|
+
solutions—leveraging a strategic mix of open source and proprietary
|
|
71
|
+
technologies based on performance, scalability, and trustworthiness.
|
|
72
|
+
</p>
|
|
73
|
+
|
|
74
|
+
<p class={classCenter}>
|
|
75
|
+
From secure network design to cloud infrastructure and perimeter defense, we
|
|
76
|
+
help organizations build stronger, smarter security postures—without
|
|
77
|
+
compromising flexibility or transparency.
|
|
78
|
+
</p>
|
|
79
|
+
|
|
80
|
+
<p class={classCenter}>
|
|
81
|
+
📡
|
|
82
|
+
<em>
|
|
83
|
+
<strong>Stay informed:</strong> Follow our
|
|
84
|
+
<a href={blogLink} target={targetSelf}>blog</a>
|
|
85
|
+
and social channels for actionable insights, implementation guides, and the latest
|
|
86
|
+
cybersecurity developments.
|
|
87
|
+
</em>
|
|
88
|
+
</p>
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
<h3 class={classIndex}>Featured</h3>
|
|
93
|
+
|
|
94
|
+
<p class={classLarge}>
|
|
95
|
+
<strong>
|
|
96
|
+
<a href={blogLink} target={targetSelf}>Network Pro Blog</a>
|
|
97
|
+
</strong>
|
|
98
|
+
</p>
|
|
99
|
+
|
|
100
|
+
<p class={classLarge}>
|
|
101
|
+
<strong>
|
|
102
|
+
<a href={spotlightLink} target={targetSelf}>FOSS Spotlight</a>
|
|
103
|
+
</strong>
|
|
104
|
+
</p>
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
<p class={classCenter}>
|
|
109
|
+
<em>
|
|
110
|
+
Join us on
|
|
111
|
+
<a {rel} href="https://discord.neteng.pro" target={targetBlank}>Discord</a>
|
|
112
|
+
or in
|
|
113
|
+
<a
|
|
114
|
+
{rel}
|
|
115
|
+
href="https://github.com/netwk-pro/netwk-pro.github.io/discussions"
|
|
116
|
+
target={targetBlank}>GitHub Discussions</a
|
|
117
|
+
>!
|
|
118
|
+
</em>
|
|
119
|
+
</p>
|
|
120
|
+
<!-- END HOME CONTENT -->
|