From 42fc6c412211e2a62026befee6f4a0a41ec31946 Mon Sep 17 00:00:00 2001 From: Felix Stubner Date: Mon, 5 Oct 2026 22:09:27 +0100 Subject: [PATCH] Privacy page: text into site-content/privacy.ts, page into a shell So the template can share the page. privacy.astro now only renders privacyCopy from src/data/site-content/privacy.ts, the way the other sections read their content files; the built page's text is unchanged (compared before and after). --- site/src/data/site-content/privacy-types.ts | 10 +++ site/src/data/site-content/privacy.ts | 34 +++++++++++ site/src/pages/privacy.astro | 67 +++------------------ 3 files changed, 54 insertions(+), 57 deletions(-) create mode 100644 site/src/data/site-content/privacy-types.ts create mode 100644 site/src/data/site-content/privacy.ts diff --git a/site/src/data/site-content/privacy-types.ts b/site/src/data/site-content/privacy-types.ts new file mode 100644 index 00000000..71d73cea --- /dev/null +++ b/site/src/data/site-content/privacy-types.ts @@ -0,0 +1,10 @@ +/** The privacy page's text. All of it is the product's to write: what the + * product collects is a fact about the product, and a policy copied from a + * template is a claim nobody checked. */ +export interface PrivacyCopy { + heading: string; + /** One or two sentences under the heading. HTML allowed. */ + leadHtml: string; + /** The policy itself, as HTML: `

` sections, paragraphs and lists. */ + bodyHtml: string; +} diff --git a/site/src/data/site-content/privacy.ts b/site/src/data/site-content/privacy.ts new file mode 100644 index 00000000..25926dd5 --- /dev/null +++ b/site/src/data/site-content/privacy.ts @@ -0,0 +1,34 @@ +import type { PrivacyCopy } from './privacy-types'; + +// The privacy page (/privacy/). Every claim here was checked against the code +// on 2026-10-04: the desktop app's history limit and settings, its GitHub +// release check, the CLI's lack of outbound calls, and the site's analytics. +// Re-check before changing what any of them do. +export const privacyCopy: PrivacyCopy = { + heading: 'Privacy', + leadHtml: + 'NetsCLI has no accounts, no advertising and no telemetry. Nothing you scan is sent to the developer or to anyone else.', + bodyHtml: ` +

What stays on your computer

+

NetsCLI reads information about your local network to do its job. That includes IP addresses, MAC addresses and the maker they belong to, hostnames, open ports, and the greetings services send back. It is shown to you and is not uploaded anywhere.

+

Some of it is kept on your computer.

+ + +

What reaches the internet

+ + +

This website

+

This site is hosted on GitHub Pages and uses Cloudflare Web Analytics, which counts page views without cookies and without identifying visitors. The landing page asks GitHub and crates.io for the star and download counts it shows, so your browser contacts both.

+ +

Contact

+

Questions about privacy can go to the issue tracker.

+`, +}; diff --git a/site/src/pages/privacy.astro b/site/src/pages/privacy.astro index 9a3878c5..169b9274 100644 --- a/site/src/pages/privacy.astro +++ b/site/src/pages/privacy.astro @@ -3,77 +3,30 @@ import Page from '../layouts/Page.astro'; import Nav from '../components/Nav.astro'; import Footer from '../components/Footer.astro'; import { site } from '../data/site'; +import { privacyCopy } from '../data/site-content/privacy'; -const { meta, social } = site; +const { meta } = site; /* Its own page rather than a docs page. It is a policy, not documentation; app stores link to it, so the address has to outlive any reshuffle of the - docs; and it has to exist on a site with the docs switched off. */ + docs; and it has to exist on a site with the docs switched off. The words + are content (src/data/site-content/privacy.ts); this file is only the + page around them. */ ---