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: ! +

+ + +
+

Preamble

@@ -461,17 +544,30 @@
  • Geocoding / place lookup: nominatim.openstreetmap.org - (OpenStreetMap Nominatim). - Privacy: OSMF Privacy Policy. + (OpenStreetMap Nominatim). + Privacy: OSMF Privacy Policy. +
    + How it works: +
      +
    • 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 {} + }); + } })();