Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 39 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,42 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en

---

## [1.22.1] - 2025-10-21

### Documentation

- Updated directory structure and **static/pgp** section of `README.md`.

### Changed

- Bumped project version to `v1.22.1`.
- Updated the text and layout of `AboutContent.svelte`.
- Added a link to the privacy email address in `PrivacyContent.svelte` and `PrivacyDashboard.svelte` for easier access.
- Updated the text of `ServicesContent.svelte`.
- Increased default Playwright test timeouts for navigation-sensitive suites (Desktop and Mobile) to improve stability under CI latency conditions.
- Implemented `Promise.all()` pattern for combined click and navigation waits, reducing flakiness in route transition tests.
- Updated the `'about' link'\*\* navigation tests in both Desktop and Mobile scenarios to include:
- Explicit `page.waitForLoadState('domcontentloaded')` calls before assertions.
- Extended per-suite timeouts (`90s`) using `test.setTimeout(90000)` for reliability on slower environments.
- Added fallback `waitForURL('\*\*/about', { timeout: 60000 })` to ensure deterministic routing checks.
- Adjusted test structure for consistency across device profiles and browsers.
- Verified local runs remain performant while increasing tolerance for **CI network latency**.

### Fixed

- Corrected `TermsUseContent.svelte` to reflect hosting by Vercel, not Netlify.
- Corrected license identifier syntax on the following pages:
- `AboutContent.svelte`
- `FossContent.svelte`
- `LicenseContent.svelte`
- `PrivacyContent.svelte`
- `PrivacyDashboard.svelte`
- `ServicesContent.svelte`
- `TermsConditionsContent.svelte`
- `TermsUseContent.svelte`

---

## [1.22.0] - 2025-10-20

### Added
Expand Down Expand Up @@ -1231,7 +1267,8 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en

<!-- Link references -->

[Unreleased]: https://github.com/netwk-pro/netwk-pro.github.io/compare/v1.22.0...HEAD
[Unreleased]: https://github.com/netwk-pro/netwk-pro.github.io/compare/v1.22.1...HEAD
[1.22.1]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.22.1
[1.22.0]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.22.0
[1.21.1]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.21.1
[1.21.0]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.21.0
Expand Down Expand Up @@ -1273,4 +1310,4 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
[1.12.3]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.12.3
[1.12.1]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.12.1

<!-- cspell:ignore qrcode cryptom otphelp -->
<!-- cspell:ignore qrcode cryptom otphelp domcontentloaded -->
13 changes: 3 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ This project follows the principles of [Keep a Changelog](https://keepachangelog
│ ├── hooks.server.js # Injects CSP headers and permissions policy
│ └── service-worker.js # Custom PWA service worker
├── static/ # Public assets served at site root
│ ├── pgp/ # PGP keys and QR code images
│ ├── pgp/ # PGP keys
│ ├── disableSw.js # Service worker bypass (via ?nosw param)
│ ├── manifest.json # PWA metadata
│ ├── robots.txt # SEO: allow/disallow crawlers
Expand All @@ -106,26 +106,19 @@ This project follows the principles of [Keep a Changelog](https://keepachangelog

### 🔐 `static/pgp/` Directory Structure

This directory contains public PGP key files and their corresponding QR codes.
This directory contains public PGP key files. Their corresponding QR code images are now loaded dynamically from `src/lib/img/qr`. A dynamic QR code import utility in `src/lib/images.js` allows these files to be imported directly from `$lib`.

```bash
static/
├── pgp/
│ ├── contact@s.neteng.pro.asc # Public key for secure email
│ ├── pgp-contact.png # QR code (PNG) for secure email key
│ ├── pgp-contact.webp # Optimized WebP version of the QR code
│ ├── pgp-security.png # QR code (PNG) for security contact key
│ ├── pgp-security.webp # WebP version of the security QR code
│ ├── pgp-support.png # QR code (PNG) for support key
│ ├── pgp-support.webp # WebP version of the support QR code
│ ├── security@s.neteng.pro.asc # Public key for security contact
│ ├── support@neteng.pro.asc # Public key for general support
└── ...
```

- `.asc` files are **excluded from service worker precaching** but served directly via the `/pgp/[key]` route.
- QR code images are **served statically** by the `/pgp` route using `<picture>` elements.
- **WebP versions** are also used in the `/pgp` route, while the `/about` route imports **dynamic equivalents** from `src/lib/img/qr`.
- QR code images—including WebP and PNG versions—are **served dynamically** from `src/lib/img/qr` using `<picture>` elements.
- This route does **not use fallback rendering**; only explicitly defined files are available and expected to resolve.
- A dynamic `[key]/+server.js` handler under `src/routes/pgp/` serves the `.asc` files with appropriate `Content-Type` and download headers.

Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@networkpro/web",
"private": false,
"version": "1.22.0",
"version": "1.22.1",
"description": "Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro Strategies",
"keywords": [
"advisory",
Expand Down
23 changes: 11 additions & 12 deletions src/lib/pages/AboutContent.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ This file is part of Network Pro.
*/
const navLinks = [
{
label: 'SPDX License Identifier',
label: 'SPDX-License-Identifier',
href: 'https://spdx.dev/learn/handling-license-info',
target: PAGE.BLANK,
text: 'CC-BY-4.0 OR GPL-3.0-or-later',
Expand Down Expand Up @@ -120,7 +120,7 @@ This file is part of Network Pro.
<p>
<strong>{COMPANY_INFO.NAME} ({COMPANY_INFO.APP_NAME}&trade;)</strong>
<br />
<em>Networking, Security, Privacy</em>
<em>Security, Networking, Privacy</em>
</p>
</section>

Expand All @@ -144,11 +144,10 @@ This file is part of Network Pro.

<p>
At <strong>{COMPANY_INFO.NAME} ({COMPANY_INFO.APP_NAME}&trade;)</strong>, we
deliver network security and engineering, information security (IS),
information technology (IT), cyber security, and digital privacy consulting
with clarity, credibility, and care. We believe that real security doesn't
have to come at the cost of user autonomy, and that privacy-minded solutions
can be both practical and powerful.
deliver network security and engineering, cybersecurity, and digital privacy
consulting with clarity, credibility, and care. We believe that real security
doesn't have to come at the cost of user autonomy, and that privacy-minded
solutions can be both practical and powerful.
</p>

<p>
Expand Down Expand Up @@ -189,7 +188,7 @@ This file is part of Network Pro.
<p>
Additionally, {COMPANY_INFO.APP_NAME}&trade; provides
<a href={servLink} target={PAGE.SELF}>on-site services</a>
in the Greater Phoenix Metro Area (Maricopa County, AZ). Our
in the Greater Phoenix Metropolitan Area (Maricopa County, AZ). Our
<a href={servLink} target={PAGE.SELF}>on-site services</a> are available to both
consumers and businesses. In addition to consulting, we offer the following services:
</p>
Expand All @@ -204,14 +203,14 @@ This file is part of Network Pro.
<li><strong>Add or Configure a Printer</strong></li>
</ul>

<div class="spacer"></div>

<p>
We also believe education is a core pillar of real-world security. That's why
we invest in raising awareness—across both technical and general audiences—on
best practices in digital privacy, secure design, and threat mitigation.
</p>

<div class="spacer"></div>

<p>
At {COMPANY_INFO.APP_NAME}&trade;, we deliver robust, intentional solutions
for individuals and organizations that prioritize integrity — without
Expand All @@ -223,8 +222,8 @@ This file is part of Network Pro.
Ready to take the next step? <a href={contactLink} target={PAGE.BLANK}
>Let's connect</a>
to explore how we can help fortify your home or business.
<a href={consultLink} target={PAGE.BLANK}>Schedule a consultation</a> today and
discover what's possible.
<a href={consultLink} target={PAGE.BLANK}
>Schedule a free, initial consultation</a> today and discover what's possible.
</p>

<p>
Expand Down
2 changes: 1 addition & 1 deletion src/lib/pages/FossContent.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ This file is part of Network Pro.
rel={PAGE.REL}
href="https://spdx.dev/learn/handling-license-info"
target={PAGE.BLANK}>
SPDX License Identifier
SPDX-License-Identifier
</a>: &nbsp;<code>CC-BY-4.0 OR GPL-3.0-or-later</code>
</span>
</section>
Expand Down
2 changes: 1 addition & 1 deletion src/lib/pages/LicenseContent.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ This file is part of Network Pro.
rel={PAGE.REL}
href="https://spdx.dev/learn/handling-license-info"
target={PAGE.BLANK}>
SPDX License Identifier
SPDX-License-Identifier
</a>: &nbsp;<code>CC-BY-4.0 OR GPL-3.0-or-later</code>
</span>
</section>
Expand Down
9 changes: 6 additions & 3 deletions src/lib/pages/PrivacyContent.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ This file is part of Network Pro.
];

/** @type {string} */
const effectiveDate = 'October 10, 2025';
const effectiveDate = 'October 21, 2025';

/** @type {string} */
const classSmall = 'small-text';
Expand Down Expand Up @@ -112,7 +112,7 @@ This file is part of Network Pro.
rel={PAGE.REL}
href="https://spdx.dev/learn/handling-license-info"
target={PAGE.BLANK}>
SPDX License Identifier
SPDX-License-Identifier
</a>: &nbsp;<code>CC-BY-4.0 OR GPL-3.0-or-later</code>
</span>
</section>
Expand Down Expand Up @@ -432,7 +432,10 @@ This file is part of Network Pro.
href={prightsLink}
target={PAGE.BLANK}>Privacy Rights Request Form</a
>. Alternatively, you can email us at
<strong>{CONTACT.PRIVACY}</strong>
<strong
><a href={`mailto:${CONTACT.PRIVACY_LINK}`} target={PAGE.BLANK}
>{CONTACT.PRIVACY_LINK}</a
></strong>
with the subject line: "<strong>Privacy Rights Preferences</strong>".
</p>
{:else if link.id === 'third-party'}
Expand Down
7 changes: 5 additions & 2 deletions src/lib/pages/PrivacyDashboard.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ This file is part of Network Pro.
rel={PAGE.REL}
href="https://spdx.dev/learn/handling-license-info"
target={PAGE.BLANK}>
SPDX License Identifier
SPDX-License-Identifier
</a>: &nbsp;<code>CC-BY-4.0 OR GPL-3.0-or-later</code>
</span>
</section>
Expand Down Expand Up @@ -240,7 +240,10 @@ This file is part of Network Pro.
href={prightsLink}
target={PAGE.BLANK}>Privacy Rights Request Form</a
>. Alternatively, you can email us at
<strong>{CONTACT.PRIVACY}</strong>
<strong
><a href={`mailto:${CONTACT.PRIVACY_LINK}`} target={PAGE.BLANK}
>{CONTACT.PRIVACY_LINK}</a
></strong>
with the subject line: "<strong>Privacy Rights Preferences</strong>".
</p>
</section>
Expand Down
6 changes: 3 additions & 3 deletions src/lib/pages/ServicesContent.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ This file is part of Network Pro.
* @type {{ effectiveDate: string, classSmall: string }}
*/
const constants = {
effectiveDate: 'October 20, 2025',
effectiveDate: 'October 21, 2025',
classSmall: 'small-text',
};
</script>
Expand All @@ -56,7 +56,7 @@ This file is part of Network Pro.
rel={PAGE.REL}
href="https://spdx.dev/learn/handling-license-info"
target={PAGE.BLANK}>
SPDX License Identifier
SPDX-License-Identifier
</a>: &nbsp;<code>CC-BY-4.0 OR GPL-3.0-or-later</code>
</span>
</section>
Expand All @@ -83,7 +83,7 @@ This file is part of Network Pro.
If you're a business seeking similar on-site solutions, we've got you covered!
We offer tailored services to meet the unique needs of commercial clients as
well. Simply <a href={consultLink} target={PAGE.BLANK}
>schedule a consultation</a>
>schedule a free, initial consultation</a>
or <a href={contactLink} target={PAGE.BLANK}>contact us directly</a> — we'd be
happy to discuss how {COMPANY_INFO.APP_NAME}&trade; can support your business
on-site.
Expand Down
2 changes: 1 addition & 1 deletion src/lib/pages/TermsConditionsContent.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ This file is part of Network Pro.
rel={PAGE.REL}
href="https://spdx.dev/learn/handling-license-info"
target={PAGE.BLANK}>
SPDX License Identifier
SPDX-License-Identifier
</a>: &nbsp;<code>CC-BY-4.0 OR GPL-3.0-or-later</code>
</span>
</section>
Expand Down
6 changes: 3 additions & 3 deletions src/lib/pages/TermsUseContent.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ This file is part of Network Pro.
* @type {{ effectiveDate: string, classSmall: string }}
*/
const constants = {
effectiveDate: 'May 21, 2025',
effectiveDate: 'October 21, 2025',
classSmall: 'small-text',
};
</script>
Expand All @@ -77,7 +77,7 @@ This file is part of Network Pro.
rel={PAGE.REL}
href="https://spdx.dev/learn/handling-license-info"
target={PAGE.BLANK}>
SPDX License Identifier
SPDX-License-Identifier
</a>: &nbsp;<code>CC-BY-4.0 OR GPL-3.0-or-later</code>
</span>
</section>
Expand Down Expand Up @@ -142,7 +142,7 @@ This file is part of Network Pro.
These Terms of Use apply to all platforms associated with the Company,
including but not limited to:
<strong>
GitHub, our main website (hosted via Netlify and GitHub Pages), Stack
GitHub, our main website (hosted via Vercel and GitHub Pages), Stack
Overflow Teams, Nextcloud, communications on Discord and/or Slack, and
our social media presence (e.g., Facebook, Instagram, X, and similar
platforms).
Expand Down
11 changes: 8 additions & 3 deletions tests/e2e/app.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ This file is part of Network Pro.
* @description Runs Playwright E2E tests with desktop and root route assertions.
* @module tests/e2e
* @author Scott Lopez
* @updated 2025-09-17
* @updated 2025-10-21
*/

import { expect, test } from '@playwright/test';
Expand All @@ -24,6 +24,8 @@ import {

// Root route should display nav bar and about link
test.describe('Desktop Tests', () => {
test.setTimeout(90_000); // increase timeout for all desktop tests

test("should display the navigation bar and 'about' link", async ({
page,
}) => {
Expand Down Expand Up @@ -67,12 +69,15 @@ test.describe('Desktop Tests', () => {
await page.waitForLoadState('domcontentloaded', { timeout: 60000 });

const nav = await getVisibleNav(page);

const aboutLink = nav.getByRole('link', { name: 'about' });
await expect(aboutLink).toBeVisible();
await aboutLink.click();

await page.waitForURL('/about', { timeout: 60000 });
// safer wait pattern with load state
await Promise.all([
page.waitForLoadState('load'),
page.waitForURL('**/about', { timeout: 60000 }),
]);
await expect(page).toHaveURL(/\/about/);
});
}); // End Desktop Tests
Expand Down
Loading
Loading