Skip to content

Instantly share code, notes, and snippets.

@parth1504
Created July 23, 2026 18:49
Show Gist options
  • Select an option

  • Save parth1504/857df1698508abe2e6615274af3d9c1f to your computer and use it in GitHub Desktop.

Select an option

Save parth1504/857df1698508abe2e6615274af3d9c1f to your computer and use it in GitHub Desktop.
Privacy policy
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>PostureGuard — Privacy Policy</title>
<style>
:root {
color-scheme: light dark;
--bg: #ffffff;
--text: #1a1a1a;
--muted: #666;
--accent: #4a5cff;
--border: #e5e5eb;
--surface: #f7f7fa;
}
@media (prefers-color-scheme: dark) {
:root {
--bg: #0a0a0f;
--text: #e6e6f0;
--muted: #8a8aa0;
--accent: #6c7cff;
--border: #1e1e2e;
--surface: #14141f;
}
}
* { box-sizing: border-box; }
body {
margin: 0;
background: var(--bg);
color: var(--text);
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Inter, sans-serif;
line-height: 1.6;
font-size: 16px;
}
main {
max-width: 720px;
margin: 0 auto;
padding: 48px 24px 96px;
}
header {
border-bottom: 1px solid var(--border);
padding-bottom: 16px;
margin-bottom: 32px;
}
h1 {
margin: 0 0 4px 0;
font-size: 28px;
letter-spacing: -0.3px;
}
.updated {
color: var(--muted);
font-size: 14px;
}
h2 {
margin: 32px 0 10px 0;
font-size: 18px;
color: var(--accent);
letter-spacing: 0.2px;
}
p, li { margin: 8px 0; }
ul { padding-left: 20px; }
strong { color: var(--text); }
code {
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
background: var(--surface);
border: 1px solid var(--border);
padding: 1px 6px;
border-radius: 4px;
font-size: 13px;
}
a { color: var(--accent); }
.callout {
background: var(--surface);
border: 1px solid var(--border);
border-radius: 8px;
padding: 16px 18px;
margin: 24px 0;
font-size: 15px;
}
footer {
margin-top: 48px;
padding-top: 16px;
border-top: 1px solid var(--border);
color: var(--muted);
font-size: 13px;
}
</style>
</head>
<body>
<main>
<header>
<h1>PostureGuard Privacy Policy</h1>
<div class="updated">Last updated: 2026-07-23</div>
</header>
<div class="callout">
<strong>Short version:</strong> your webcam video and pose data never
leave your browser. The only thing that ever gets sent anywhere is a
short text alert to a public ntfy.sh topic that you choose. No
accounts, no analytics, no tracking.
</div>
<h2>What PostureGuard does</h2>
<p>
PostureGuard is a Chrome extension that uses your webcam to detect
when you're slouching and sends a text alert to a
<a href="https://ntfy.sh" rel="noopener">ntfy.sh</a> topic you
configure. The alert can be received by a phone, a Garmin watch,
or any other ntfy client to buzz you into fixing your posture.
</p>
<h2>What we collect from you</h2>
<p><strong>Nothing.</strong> There is no server we operate, no account
to create, no analytics or telemetry. We have no way to know that
you're using the extension.</p>
<h2>How your webcam is used</h2>
<ul>
<li>
The video stream from your webcam is processed
<strong>entirely inside your browser</strong> using MediaPipe
Pose Landmarker, which runs locally as WebAssembly.
</li>
<li>
Video frames are <strong>never uploaded</strong>, never stored,
and never sent to any server — including ours or Google's.
</li>
<li>
Pose landmarks (the positions of your ears and shoulders) exist
only in the memory of the extension's monitor tab. They are
discarded on every frame.
</li>
<li>
You can revoke camera permission at any time via Chrome's
site-settings page for the extension.
</li>
</ul>
<h2>What gets sent to ntfy.sh</h2>
<p>
When a slouch is detected and the alert cooldown has elapsed, the
extension makes a single <code>HTTP POST</code> to
<code>https://ntfy.sh/&lt;your-topic&gt;</code>. The body is a short
text string such as <em>"Slouch detected — deviation 17.3°"</em>.
Nothing else is sent — no images, no landmark coordinates, no
identifiers, no headers beyond a title and priority tag.
</p>
<p>
<strong>ntfy.sh topics are public within the topic name.</strong>
Anyone who knows your topic string can read the alerts you publish
to it. Pick an unguessable topic. PostureGuard treats the topic as
a shared secret and stores it only in your browser's local
extension storage.
</p>
<p>
ntfy.sh's own privacy practices are documented at
<a href="https://docs.ntfy.sh/privacy/" rel="noopener">docs.ntfy.sh/privacy</a>.
PostureGuard has no affiliation with ntfy.sh; it is used only as
a general-purpose message broker.
</p>
<h2>What is stored on your device</h2>
<ul>
<li>
Your <strong>settings</strong> — ntfy topic, sensitivity, alert
delay, cooldown — are stored using Chrome's
<code>chrome.storage.local</code> API. They stay on your device
and are removed when you uninstall the extension.
</li>
<li>
A <strong>session log</strong> (last ~50 events) exists only in
the memory of the monitor tab and is discarded when you close
that tab.
</li>
<li>
No cookies, no IndexedDB, no service-worker cache of user data.
</li>
</ul>
<h2>Permissions we request</h2>
<ul>
<li>
<code>notifications</code> — to show a browser notification when
a slouch is detected, in addition to the ntfy push.
</li>
<li>
<code>storage</code> — to persist your settings between browser
sessions.
</li>
<li>
<strong>Camera</strong> — asked at runtime the first time you
press <em>Start Monitoring</em>. Required for pose detection.
</li>
</ul>
<h2>Third parties</h2>
<ul>
<li>
<a href="https://ntfy.sh" rel="noopener">ntfy.sh</a>, when you
configure a topic and PostureGuard sends slouch alerts.
</li>
<li>
The MediaPipe library and pose model are
<strong>bundled locally</strong> inside the extension package
and do not fetch anything at runtime.
</li>
</ul>
<h2>Children</h2>
<p>
PostureGuard is a productivity utility not directed at children
under 13. We do not knowingly collect any information from
anyone, including children.
</p>
<h2>Changes to this policy</h2>
<p>
If future versions of PostureGuard begin transmitting or storing
new categories of data, this page will be updated and the
"Last updated" date at the top will change. Continued use of the
extension after a change constitutes acceptance.
</p>
<h2>Contact</h2>
<p>
Source code and issues:
<a href="https://github.com/parth1504/thirdeye" rel="noopener">
github.com/parth1504/thirdeye
</a>.
</p>
<footer>
PostureGuard is open source and provided as-is with no warranty.
</footer>
</main>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment