style(privacy): match site-prose/prose-section layout of sibling pages

This commit is contained in:
gadgethd
2026-08-12 20:49:42 +00:00
parent a4d9120bfc
commit 1ba7674782
+31 -25
View File
@@ -6,14 +6,23 @@ import React from 'react';
* Art 6(1)(f)). Full assessment: docs/privacy.md in the repository.
*/
export const PrivacyPage: React.FC = () => (
<article className="privacy-page">
<h1>Privacy</h1>
<div className="site-content site-prose">
<section className="prose-section">
<h1>Privacy</h1>
<p>
This page explains what data the site collects, why, how long it is kept,
and how to exercise your rights. Both the browser diagnostics and the mesh
packet database are processed under the lawful basis of{' '}
<strong>legitimate interest</strong> (reliability, bug fixing, and operating
the network) the full assessment is in the project repository.
</p>
</section>
<section>
<section className="prose-section">
<h2>Error diagnostics</h2>
<p>
The site automatically records errors that happen in your browser so we
can find and fix faults. When an error occurs we store:
The site automatically records errors that happen in your browser so we can
find and fix faults. When an error occurs we store:
</p>
<ul>
<li>a truncated error message and stack trace,</li>
@@ -23,13 +32,12 @@ export const PrivacyPage: React.FC = () => (
</ul>
<p>
We do <strong>not</strong> collect your name, email, account details, or
anything that identifies you personally. This is processed under the
lawful basis of <strong>legitimate interest</strong> (reliability and
bug fixing) and is kept for <strong>30 days</strong>.
anything that identifies you personally. Diagnostics are kept for{' '}
<strong>30 days</strong>, then deleted automatically.
</p>
</section>
<section>
<section className="prose-section">
<h2>Mesh network data</h2>
<p>
The site stores radio packets observed on the MeshCore network so the
@@ -45,10 +53,10 @@ export const PrivacyPage: React.FC = () => (
<strong>30 days</strong>, then deleted automatically.
</li>
<li>
<strong>Path metadata</strong> (which nodes a packet travelled
through, timing, signal quality) retained for network analytics.
It contains node identifiers and timing only, never message content,
and is stored indefinitely in pseudonymous form.
<strong>Path metadata</strong> (which nodes a packet travelled through,
timing, signal quality) retained for network analytics. It contains
node identifiers and timing only, never message content, and is stored
indefinitely in pseudonymous form.
</li>
<li>
<strong>Aggregate statistics</strong> (per-day/hour counts) retained
@@ -56,26 +64,24 @@ export const PrivacyPage: React.FC = () => (
</li>
</ul>
<p>
This is processed under the lawful basis of{' '}
<strong>legitimate interest</strong> (operating and improving the
network). Node identifiers can be linked to individuals only when a
node owner has registered their node in the owner portal; in that case
we can delete that node's data on request.
Node identifiers can be linked to individuals only when a node owner has
registered their node in the owner portal; in that case we can delete that
node&apos;s data on request.
</p>
</section>
<section>
<section className="prose-section">
<h2>Your rights</h2>
<p>
Under the UK GDPR you can request access to, correction of, or deletion
of personal data we hold about you. Because error diagnostics cannot be
linked to individuals, deletion there happens automatically via the
30-day retention. For node-linked data, contact us and we will remove
the relevant records.
Under the UK GDPR you can request access to, correction of, or deletion of
personal data we hold about you. Because error diagnostics cannot be linked
to individuals, deletion there happens automatically via the 30-day
retention. For node-linked data, contact us and we will remove the relevant
records.
</p>
<p>
Contact: <a href="mailto:ukmesh@proton.me">ukmesh@proton.me</a>
</p>
</section>
</article>
</div>
);