From 0a99e8117167358f80e0a9a43f96cd5419875277 Mon Sep 17 00:00:00 2001
From: ashley
Date: Tue, 16 Sep 2025 23:41:49 +0200
Subject: [PATCH] update privacy policy
---
html/priv.ejs | 187 +++++++++++++++++++++++++++++++++++++++-----------
1 file changed, 147 insertions(+), 40 deletions(-)
diff --git a/html/priv.ejs b/html/priv.ejs
index 7819de68..33509eae 100644
--- a/html/priv.ejs
+++ b/html/priv.ejs
@@ -4,9 +4,8 @@
Copyright (C) 2021-2025 Poke (https://codeberg.org/ashley/poke)
This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
+ it under the terms of the GNU General Public License, version 3 of the License,
+ or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -55,12 +54,13 @@
font-size: 0.95em;
}
@font-face {
- src: url("https://p.poketube.fun/https://cdn.glitch.global/43b6691a-c8db-41d4-921c-8cf6aa0d9108/robotoflex.ttf?v=16683434286881");
- font-family: "PokeTube Flex";
- font-style: normal;
- font-stretch: 1% 800%;
- font-display: swap;
-}
+ src: url("https://p.poketube.fun/https://cdn.glitch.global/43b6691a-c8db-41d4-921c-8cf6aa0d9108/robotoflex.ttf?v=16683434286881");
+ font-family: "PokeTube Flex";
+ font-style: normal;
+ font-stretch: 1% 800%;
+ font-display: swap;
+ }
+
/* ===== Document Layout ===== */
.shell {
max-width: 1200px;
@@ -76,7 +76,6 @@
border-bottom: 1px solid #222;
width: 100%;
}
- /* Make header content truly full-width on mobile while keeping desktop centered */
.site-row {
display: flex; align-items: center; justify-content: space-between;
gap: 16px;
@@ -159,8 +158,8 @@
html { font-size: 17px; }
.brand img { width: 7.2em; transform: none; }
.doc { grid-template-columns: 1fr; }
- nav.toc { display: none; } /* hide sidebar TOC on mobile */
- .mobile-toc { display: block; } /* show mobile TOC instead */
+ nav.toc { display: none; }
+ .mobile-toc { display: block; }
article.paper { padding: 20px; }
.doc-title { font-size: 1.6rem; }
.grid-2 { grid-template-columns: 1fr; }
@@ -236,7 +235,6 @@
}
.search-row button:hover { background: #161616; border-color: #2a2a2a; }
.search-hint { margin-top: 6px; color: #a9a9a9; font-size: .925rem; }
- /* prevent overlapping on iOS safe areas */
@supports (padding: max(0px)) {
.search-fab { right: max(20px, env(safe-area-inset-right)); bottom: max(24px, env(safe-area-inset-bottom)); }
.search-panel { right: max(20px, env(safe-area-inset-right)); bottom: max(72px, calc(env(safe-area-inset-bottom) + 48px)); }
@@ -257,6 +255,68 @@
a { color: #0645ad; }
}
+ /* ===== Update Box (What's New) ===== */
+ .update-box {
+ position: relative;
+ margin: 14px 0 22px 0;
+ padding: 14px 14px 14px 48px;
+ border-radius: 14px;
+ background:
+ radial-gradient(900px 400px at 10% 0%, #0b1220 0%, rgba(11,18,32,0) 70%),
+ linear-gradient(180deg, #0b1117, #0a0f14);
+ border: 1px solid #152234;
+ box-shadow:
+ 0 0 0 1px rgba(125, 211, 252, 0.06) inset,
+ 0 14px 40px rgba(0,0,0,.35);
+ }
+ .update-box::before {
+ content: "★";
+ position: absolute;
+ left: 14px; top: 12px;
+ font-size: 1.1rem;
+ color: #7dd3fc;
+ filter: drop-shadow(0 0 6px rgba(125,211,252,.25));
+ }
+ .update-box h3 {
+ margin: 0 0 8px 0;
+ font-size: 1.05rem;
+ color: #e9f7ff;
+ letter-spacing: .2px;
+ }
+ .update-box .when {
+ display: inline-block;
+ margin-left: 8px;
+ padding: 2px 8px;
+ border-radius: 999px;
+ font-size: .85rem;
+ color: #cfe8ff;
+ background: #0c1b27;
+ border: 1px solid #193347;
+ }
+ .update-box ul {
+ margin: 8px 0 0 20px;
+ }
+ .update-actions {
+ margin-top: 10px;
+ display: flex; gap: 8px; flex-wrap: wrap;
+ }
+ .update-actions a,
+ .update-actions button {
+ appearance: none;
+ border: 1px solid #234a61;
+ background: #0d1d28;
+ color: #cfe8ff;
+ padding: 6px 10px;
+ border-radius: 10px;
+ cursor: pointer;
+ font-size: .92rem;
+ }
+ .update-actions a:hover,
+ .update-actions button:hover {
+ background: #0f2432;
+ border-color: #2d5d7a;
+ }
+ .update-box[hidden] { display: none !important; }
@@ -346,10 +406,33 @@
Instance: poketube.fun
- Version date:
+ Version date:
+
+
+
+ What’s New — Policy Update
+ September 17, 2025
+
+
+ We clarified how third-party requests work Highlights: !
+
+
+
Translate page: Requests are proxied via our backend; your browser does not contact SimplyTranslate.org or Google directly. We pass only from, to, and text to the upstream. See code references in the section.
+
Weather pages:Open-Meteo forecasts are always proxied by our backend. Nominatim geocoding is direct when JavaScript is enabled, and proxied during server-side rendering (no-JS). Source links are provided for both flows.
+
Third-party policy text: Clearer wording that their privacy terms apply only to those specific requests (direct or proxied). Poke still adds no trackers.
If JavaScript is enabled: your browser talks directly to Nominatim (no proxy involved). ( see source )
+
If JavaScript is disabled (server-side rendering): the request is proxied through Poke’s backend
+ (pages-static.js).
+
Forecast data:
- open-meteo.com.
- Privacy: Open-Meteo Terms & Privacy.
+ open-meteo.com.
+ Privacy: Open-Meteo Terms & Privacy.
+
+ Forecast queries are always proxied through Poke’s backend, so your browser never connects to Open-Meteo directly.
+ Only the necessary query parameters (latitude, longitude, units, etc.) are forwarded by the server.
+ see the source for this
+ here..
- Poke does not add trackers to these requests. However, when these services are contacted, their respective privacy policies apply to those specific requests.
+ Poke does not add trackers to these requests. However, when third-party services are contacted (directly or via proxy),
+ their respective privacy policies apply to those specific requests.
@@ -479,27 +575,22 @@
Translate Page (SimplyTranslate)
- Our translate page does not send data to Google. We use the community-run
- SimplyTranslate service (a privacy-friendly translation front-end).
- SimplyTranslate is a free software project: source code at
- codeberg.org/ManeraKai/simplytranslate and its
- legal notice.
+ Our translate page does not send your data directly to Google or SimplyTranslate.org from your browser.
+ Instead, all requests are proxied through our own backend servers.
+ When you use the page, only the necessary parameters are passed securely on the server side:
+ from (source language), to (target language), and text (the content you entered).
+ Your browser never connects to SimplyTranslate.org directly.
- We don’t know whether the text you translate contains personal information or not—that’s up to you. Please avoid submitting sensitive personal data to any translation service.
-
-
-
-
-
-
Third-Party Requests & Proxy
-
- When Poke needs assets (videos, thumbnails, etc.), we fetch them through our proxy (e.g., p.poketube.fun).
-
-
- Fonts and other assets are shipped locally where possible. If a third-party endpoint is necessary, we keep it behind the proxy and strip identifying headers.
- Components or ideas from the Invidious project may also be used:
- github.com/iv-org/invidious.
+ We rely on the community-run
+ SimplyTranslate service (a privacy-friendly
+ translation front-end). SimplyTranslate is a free software project: you can see the
+ source code and its
+ legal notice.
+ Our backend integration is handled in
+
+ Poke’s server code
+ .
@@ -672,7 +763,7 @@ EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH D
});
closeBtn.addEventListener('click', closePanel);
- window.addEventListener('keydown', (e) => {
+ window.addEventListener('keydown', (e) => {
if (e.key === '/' && !e.metaKey && !e.ctrlKey && !e.altKey) {
e.preventDefault();
if (!panel.classList.contains('active')) openPanel();
@@ -682,10 +773,26 @@ EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH D
}
});
- form.addEventListener('submit', (e) => {
+ form.addEventListener('submit', (e) => {
const q = input.value.trim();
if (!q) { e.preventDefault(); return; }
});
+
+ // Dismissible privacy update (persists in localStorage)
+ const updateBox = document.getElementById('whats-new');
+ const dismissBtn = document.getElementById('dismissUpdate');
+ const STORAGE_KEY = 'poke_privacy_update_2025_09_17_dismissed';
+ try {
+ if (localStorage.getItem(STORAGE_KEY) === '1') {
+ updateBox && (updateBox.hidden = true);
+ }
+ } catch {}
+ if (dismissBtn && updateBox) {
+ dismissBtn.addEventListener('click', () => {
+ updateBox.hidden = true;
+ try { localStorage.setItem(STORAGE_KEY, '1'); } catch {}
+ });
+ }
})();