poke/html/priv.ejs
2025-10-11 12:06:32 +02:00

505 lines
24 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!--
This Source Code Form is subject to the terms of the GNU General Public License:
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, 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
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see https://www.gnu.org/licenses/.
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Poke — Privacy Policy</title>
<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover" />
<meta content="website" property="og:type">
<meta content="PokeTube - Legal thingy to put you into sleep" property="og:title">
<meta content="This is the PokeTube Privacy Policy meta description. Wow, helpful meta description Poke. Thanks!" property="twitter:description">
<meta property="og:image" content="/static/poke.webp">
<meta content="summary_large_image" name="twitter:card">
<link href="/css/yt-ukraine.svg?v=7" rel="icon">
<style>
*,*::before,*::after{box-sizing:border-box}
html,body{margin:0;padding:0}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{
font-family: "poketube flex", sans-serif;
line-height:1.6;
color:#eaeaea;
background:
radial-gradient(1200px 600px at 0% 0%, #0ea5e9 0%, #0ea5e900 60%),
radial-gradient(1000px 700px at 100% 0%, #8b5cf6 0%, #8b5cf600 65%),
radial-gradient(1000px 700px at 0% 100%, #14b8a6 0%, #14b8a600 65%),
#0b0b0b;
}
a{color:#7dd3fc;text-decoration:none}
a:hover{text-decoration:underline}
img{max-width:100%;height:auto}
code,pre,kbd,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","DejaVu Sans Mono",monospace;font-size:.95em}
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","DejaVu Sans Mono",monospace}
/* ===== Layout ===== */
.wrap{max-width:980px;margin:0 auto;padding:20px}
header.site{
position:sticky;top:0;z-index:10;
background:rgba(17,17,18,.8);
backdrop-filter:blur(8px);
border-bottom:1px solid #232323;
}
.nav-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 16px}
.brand{display:inline-flex;align-items:center;gap:10px;color:#fff;font-weight:800;letter-spacing:.2px;text-decoration:none}
.brand img{height:32px}
/* Article typography */
.doc-title { margin: 0 0 6px 0; font-size: clamp(1.6rem, 3vw, 2.2rem); letter-spacing:.2px; font-stretch: extra-expanded;}
.doc-lede { margin: 6px 0 16px 0; color: #cfcfcf; }
.meta-row {
display: flex; flex-wrap: wrap; gap: 10px; align-items: center;
margin: 10px 0 18px 0;
}
.meta {
background: #0c1114; border: 1px solid #132029; color: #d2ebff;
border-radius: 12px; padding: 8px 10px; font-size: .93rem;
}
.callout {
background: #0c1114; border: 1px solid #132029; color: #d2ebff;
padding: 12px 14px; border-radius: 14px; margin: 10px 0 18px 0;
}
h2.section {
margin: 22px 0 8px 0;
font-size: clamp(1.24rem, 2.4vw, 1.6rem);
padding-bottom: 6px;
border-bottom: 1px solid #1f1f22;
font-stretch: extra-expanded;
}
p { margin: 10px 0; color: #e7e7e7; }
ul { margin: 10px 0 10px 22px; }
.grid-2 {
display: grid; gap: 12px; grid-template-columns: 1fr 1fr;
}
/* Simple containers */
.hero{padding:22px 0 8px}
.toc{
background:#101112;border:1px solid #1f1f22;border-radius:12px;
padding:12px;margin:14px 0 20px 0
}
.toc h2{margin:0 0 8px 0;font-size:1rem;color:#e8f6ff}
.toc ul{margin:0;padding-left:18px}
.toc li{margin:6px 0}
section{padding-top:16px;margin-top:16px}
.small{font-size:.925rem}
details{background:#0f1012;border:1px solid #1d2024;border-radius:10px;padding:10px 12px;margin:10px 0}
details summary{cursor:pointer;font-weight:600}
.update-box{
margin:14px 0 20px 0;padding:12px;border-radius:12px;
background:#0e1217;border:1px solid #152234
}
.update-box h3{margin:0 0 8px 0;font-size:1.05rem;color:#e9f7ff}
.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-actions{margin-top:8px;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}
footer.site{text-align:center;color:#bdbdbd;margin:40px 0 60px}
@media (max-width:720px){
.wrap{padding:16px}
.brand img{height:28px}
.grid-2{grid-template-columns:1fr}
}
@media print{
header.site{display:none!important}
body{background:#fff;color:#000}
a{color:#0645ad}
.update-box,.callout,.toc{border-color:#999;background:#fff}
}
</style>
</head>
<body>
<header class="site" role="banner" aria-label="Site header">
<div class="nav-row wrap">
<a class="brand" href="/" aria-label="Poke home">
<img src="/css/logo-poke.svg?v=5" alt="Poke logo">
</a>
</div>
</header>
<main class="wrap" role="main">
<section class="hero" aria-label="Intro" style="border-top: none;">
<h1 class="doc-title">Poke Privacy Policy</h1>
<p class="doc-lede">
<strong>We dont collect any data about you.</strong> No telemetry, no trackers! Because Poke is <strong>free software</strong>, you can also check the source and self-host.
</p>
<div class="meta-row" aria-label="Document metadata">
<span class="badge">Instance: <span class="mono">poketube.fun</span></span>
<span class="badge">Version date: <time datetime="2025-10-11">October 11, 2025</time></span>
</div>
</section>
<!-- What's New / Privacy Update -->
<section id="whats-new" class="update-box" aria-labelledby="whats-new-heading" role="region">
<h3 id="whats-new-heading">
Whats New — Policy Update
<span class="when">October 11, 2025</span>
</h3>
<p style="margin-top:6px">
Highlights:
</p>
<ul>
<li><strong>New UI:</strong> simpler and better layout (yay!)</li>
</ul>
<div class="update-actions" aria-label="Update actions">
<button type="button" id="dismissUpdate" aria-label="Dismiss this update notice">Dismiss</button>
</div>
</section>
<!-- Contents -->
<nav class="toc" aria-label="Table of contents">
<h2>Contents</h2>
<ul>
<li><a href="#overview">Overview</a></li>
<li><a href="#summary">TL;DR</a></li>
<li><a href="#ownership">Ownership</a></li>
<li><a href="#initiative-privacy">Initiative Site Privacy</a></li>
<li><a href="#what-we-collect">What We Do/Dont Collect</a></li>
<li><a href="#cookies">Cookies &amp; Storage</a></li>
<li><a href="#openstreetmap">OpenStreetMap</a></li>
<li><a href="#weather">Weather Pages &amp; Services</a></li>
<li><a href="#translate">Translate Page (SimplyTranslate)</a></li>
<li><a href="#third-parties">Third-Party Requests &amp; Proxy</a></li>
<li><a href="#api-logs">API Logs Policy</a></li>
<li><a href="#legal-bases">Legal Bases (GDPR)</a></li>
<li><a href="#your-rights">Your Rights</a></li>
<li><a href="#retention">Data Retention</a></li>
<li><a href="#javascript">JavaScript &amp; No-JS</a></li>
<li><a href="#self-host">Self-Hosting</a></li>
<li><a href="#changes">Changes to this Policy</a></li>
<li><a href="#history">Document History</a></li>
<li><a href="#warranty">Warranty Disclaimer</a></li>
<li><a href="#contact">Contact</a></li>
<li><a href="#license">Policy License</a></li>
</ul>
</nav>
<!-- Overview / Preamble -->
<section id="overview" aria-labelledby="preamble-heading">
<h2 id="preamble-heading" class="section">Preamble</h2>
<p>
Welcome to Pokes Privacy Policy. We dont collect data about you and we dont run telemetry. Poke is <strong>free software</strong> you can read, remix, and run yourself.
</p>
<p class="callout">Not legal advice lol</p>
</section>
<!-- TL;DR -->
<section id="summary" aria-labelledby="summary-heading">
<h2 id="summary-heading" class="section">TL;DR</h2>
<div>
<ul>
<li><strong>No data collected.</strong> at all!!</li>
<li><strong>No telemetry.</strong> We dont phone home.</li>
<li><strong>No third-party trackers.</strong> Yippe!!</li>
<li><strong>YouTube cant see what you watch here.</strong> Its all done on the backend.</li>
</ul>
<ul>
<li><strong>Poke Account:</strong> no email required, no personal info needed.</li>
<li><strong>Poke Maps:</strong> uses OpenStreetMap data; map tiles/attribution may have separate privacy rules depending on the tile server you use.</li>
<li><strong>No required cookies.</strong> Preferences (like theme or layout) may live in local storage on your device.</li>
</ul>
</div>
</section>
<!-- Ownership -->
<section id="ownership" aria-labelledby="ownership-heading">
<h2 id="ownership-heading" class="section">Ownership</h2>
<p>
The Poke service and this default instance (<span class="mono">poketube.fun</span>) are owned and operated by the <strong>Poke Project</strong>.
Learn more at <a href="https://initiative.poketube.fun/" rel="noopener">initiative.poketube.fun</a>.
</p>
</section>
<!-- Initiative site privacy -->
<section id="initiative-privacy" aria-labelledby="initiative-privacy-heading">
<h2 id="initiative-privacy-heading" class="section">Initiative Site Privacy</h2>
<p>
The informational website at <a href="https://initiative.poketube.fun/" rel="noopener">initiative.poketube.fun</a> does not collect personal information.
For hosting-related processing, the <strong>Codeberg</strong> privacy policy applies:
<a href="https://codeberg.org/Codeberg/org/src/branch/main/PrivacyPolicy.md" target="_blank" rel="noopener">codeberg.org/Codeberg/org/src/branch/main/PrivacyPolicy.md</a>.
</p>
</section>
<!-- What we collect -->
<section id="what-we-collect" aria-labelledby="collect-heading">
<h2 id="collect-heading" class="section">What We Do/Dont Collect</h2>
<details class="block" open>
<summary>We collect <em>nothing</em> about you</summary>
<p>
We dont store IP addresses, user-agent fingerprints, unique identifiers, emails, names—none of it. Theres no telemetry or “anonymous crash reports.”
</p>
</details>
<details class="block">
<summary>What exists briefly so the internet works</summary>
<p>
Your browser and our server exchange data to deliver pages (thats how HTTP works). That info is handled <em>transiently</em> and not logged in a way that identifies you on our primary instance.
</p>
</details>
<details class="block">
<summary>Poke Account</summary>
<p>
If you make a Poke account, we dont require an email or personal details.
</p>
</details>
</section>
<!-- Cookies & storage -->
<section id="cookies" aria-labelledby="cookies-heading">
<h2 id="cookies-heading" class="section">Cookies &amp; Local Storage</h2>
<ul>
<li><strong>No cookies :D!</strong></li>
<li><strong>Local storage only for preferences</strong> (e.g., theme, layout). This stays on your device.</li>
</ul>
<p class="small">
To remove data stored in your browser, you can use your browsers cookie/site-data controls: <br>
<a href="https://support.google.com/chrome/answer/2392709" rel="noopener" target="_blank">· Chrome</a> <br>
<a href="https://support.mozilla.org/kb/clear-cookies-and-site-data-firefox" rel="noopener" target="_blank">· Firefox</a> <br>
<a href="https://support.apple.com/HT201265" rel="noopener" target="_blank">· Safari (iOS)</a> <br>
<a href="https://support.apple.com/guide/safari/manage-cookies-and-website-data-sfri11471/mac" rel="noopener" target="_blank"> · Safari (macOS)</a> <br>
<a href="https://support.microsoft.com/en-us/windows/manage-cookies-in-microsoft-edge-view-allow-block-delete-and-use-168dab11-0753-043d-7c16-ede5947fc64d" rel="noopener" target="_blank">· Edge</a> <br>
<a href="https://support.brave.app/hc/en-us/articles/360048833872-How-Do-I-Clear-Cookies-And-Site-Data-In-Brave" rel="noopener" target="_blank">· Brave</a>
</p>
</section>
<!-- OpenStreetMap -->
<section id="openstreetmap" aria-labelledby="osm-heading">
<h2 id="osm-heading" class="section">OpenStreetMap</h2>
<p>
Poke Maps uses <a href="https://www.openstreetmap.org/" target="_blank" rel="noopener">OpenStreetMap</a> data. That means when you explore maps at <a href="/map">/map</a>, we embed OSM via an <strong>iframe</strong> directly into the Poke site. The tiles and geographic info are delivered from OSM contributors servers.
While Poke itself doesnt collect any of your data, OpenStreetMaps tile servers have their own
<a href="https://wiki.osmfoundation.org/wiki/Privacy_Policy" target="_blank" rel="noopener">privacy policy</a>.
</p>
</section>
<!-- Weather -->
<section id="weather" aria-labelledby="weather-heading">
<h2 id="weather-heading" class="section">Weather Pages &amp; Services</h2>
<p>
Pokes weather pages use third-party, privacy-respecting services to resolve places and fetch forecasts:
</p>
<ul>
<li>
<strong>Geocoding / place lookup:</strong>
<a href="https://nominatim.openstreetmap.org/" rel="noopener" target="_blank">nominatim.openstreetmap.org</a>
(OpenStreetMap Nominatim).
Privacy: <a href="https://osmfoundation.org/wiki/Privacy_Policy" rel="noopener" target="_blank">OSMF Privacy Policy</a>.
<br>
How it works:
<ul>
<li> the request is proxied through Pokes backend - always!
(<a href="https://codeberg.org/ashley/poke/src/branch/main/src/libpoketube/init/pages-api.js#L78" target="_blank" rel="noopener">see source </a>).</li>
</ul>
</li>
<li>
<strong>Forecast data:</strong>
<a href="https://open-meteo.com/" rel="noopener" target="_blank">open-meteo.com</a>.
Privacy: <a href="https://open-meteo.com/en/terms#privacy" rel="noopener" target="_blank">Open-Meteo Terms &amp; Privacy</a>.
<br>
Forecast queries are always <strong>proxied through Pokes backend</strong>, 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
<a href="https://codeberg.org/ashley/poke/src/branch/main/src/libpoketube/init/pages-api.js#L108" target="_blank" rel="noopener">here.</a>.
</li>
</ul>
<p class="callout">
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.
</p>
</section>
<!-- Translate -->
<section id="translate" aria-labelledby="translate-heading">
<h2 id="translate-heading" class="section">Translate Page (SimplyTranslate)</h2>
<p>
Our translate page does <strong>not</strong> 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:
<code>from</code> (source language), <code>to</code> (target language), and <code>text</code> (the content you entered).
Your browser never connects to SimplyTranslate.org directly.
</p>
<p>
We rely on the community-run
<a href="https://simplytranslate.org/" rel="noopener" target="_blank">SimplyTranslate</a> service (a privacy-friendly
translation front-end). SimplyTranslate is a <strong>free software</strong> project: you can see the
<a href="https://codeberg.org/ManeraKai/simplytranslate" rel="noopener" target="_blank">source code</a> and its
<a href="https://codeberg.org/ManeraKai/simplytranslate/raw/branch/main/legal_notice.txt" rel="noopener" target="_blank">legal notice</a>.
Our backend integration is handled in
<a href="https://codeberg.org/ashley/poke/src/branch/main/src/libpoketube/init/pages-static.js#L208" target="_blank" rel="noopener">
Pokes server code
</a>.
</p>
</section>
<!-- Placeholder anchor to preserve original TOC link -->
<section id="third-parties" aria-label="Third-Party Requests & Proxy"></section>
<!-- API Logs Policy -->
<section id="api-logs" aria-labelledby="api-logs-heading">
<h2 id="api-logs-heading" class="section">API Logs Policy</h2>
<p>
When you request any resource from the poke api (for example: thumbnails, API endpoint) information about the request may be logged.
</p>
<p>Information about a request is limited to:</p>
<ul>
<li>the time the request was made</li>
<li>the status code of the response</li>
<li>the method of the request</li>
<li>the requested URL</li>
<li>how long it took to complete the request.</li>
</ul>
<p>
<strong>No identifying information is logged</strong>, such as the visitors cookie, user-agent, or IP address. Here are a couple lines to serve as an example:
</p>
<pre class="small" style="white-space:pre-wrap;margin:8px 0;">
2019-01-19 16:37:47 +00:00 200 GET /api/v1/comments/xrlETJYzH-c?format=html&amp;hl=en-US 1345.88ms
2019-01-19 16:37:53 +00:00 200 GET /vi/r5P-f5arPXE/maxres.jpg 1085.41ms
2019-01-19 16:37:54 +00:00 200 GET /watch 7.04ms
</pre>
<p>
This website does not store the visitors user-agent or IP address and does not use fingerprinting, advertisements, or tracking of any form.
</p>
</section>
<!-- Legal bases -->
<section id="legal-bases" aria-labelledby="gdpr-heading">
<h2 id="gdpr-heading" class="section">Legal Bases for Processing (GDPR)</h2>
<ul>
<li><strong>Legitimate interests:</strong> Running Poke smoothly while collecting exactly zero personal data.</li>
<li><strong>Consent:</strong> If we ever invent an optional feature that needs info, well ask. But right now? Theres nothing to consent to.</li>
<li><strong>Legal obligation:</strong> Even if someone waves a fancy piece of paper at us, we literally have nothing personal to hand over. Empty pockets.</li>
</ul>
</section>
<!-- Your rights -->
<section id="your-rights" aria-labelledby="rights-heading">
<h2 id="rights-heading" class="section">Your Privacy Rights</h2>
<p>
Since Poke doesnt collect or store personal data, theres basically nothing for us to give, sell, or lose about you.
You dont have to worry about “export my data” or “delete my profile” requests because we dont have anything on you in the first place.
</p>
<p>
Poke Accounts dont require an email, name, or any other identifying info — and theres no way to add that kind of data even if you wanted to.
</p>
</section>
<!-- Data Retention -->
<section id="retention" aria-labelledby="retention-heading">
<h2 id="retention-heading" class="section">Data Retention</h2>
<ul>
<li><strong>Server logs:</strong> No personal identifiers on our main instance.</li>
<li><strong>Telemetry/analytics:</strong> Not enabled here.</li>
</ul>
</section>
<!-- JavaScript & No-JS -->
<section id="javascript" aria-labelledby="javascript-heading">
<h2 id="javascript-heading" class="section">JavaScript &amp; No-JS</h2>
<p>
JavaScript is <strong>optional</strong> on Pokes websites. Core features—including search—work without JavaScript.
</p>
</section>
<!-- Self-host -->
<section id="self-host" aria-labelledby="selfhost-heading">
<h2 id="selfhost-heading" class="section">Self-Hosting</h2>
<p>
Poke is free software under the <strong>GNU GPL v3.0 or later</strong>. you can self-host it yourself! <a href="https://codeberg.org/ashley/poke/#hosting-poke"> see here </a>
</p>
</section>
<!-- Changes -->
<section id="changes" aria-labelledby="changes-heading">
<h2 id="changes-heading" class="section">Changes to this Policy</h2>
<p>
If we ever change how privacy works here, well update the date at the top and announce major changes. Spoiler: changes would not include adding two bananas. this isnt minions LOL :3
</p>
</section>
<!-- Document History -->
<section id="history" aria-labelledby="history-heading">
<h2 id="history-heading" class="section">Document History</h2>
<p>
You can view the full edit history for this policy at:
<a href="https://codeberg.org/ashley/poke/commits/branch/main/html/priv.ejs" target="_blank" rel="noopener">codeberg.org</a>.
</p>
</section>
<!-- Warranty Disclaimer -->
<section id="warranty" aria-labelledby="warranty-heading">
<h2 id="warranty-heading" class="section">Warranty Disclaimer</h2>
<pre class="small" style="white-space:pre-wrap;margin:8px 0;">
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER,
OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM
(E.G., LOSS OF DATA, DATA BEING RENDERED INACCURATE, OR FAILURES OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
</pre>
</section>
<!-- Contact -->
<section id="contact" aria-labelledby="contact-heading">
<h2 id="contact-heading" class="section">Contact</h2>
<p>
Questions or concerns? Open an issue on our project tracker :D
</p>
<ul>
<li>Project: <span class="mono">codeberg.org/Ashley/poke</span></li>
<li>Initiative: <a href="https://initiative.poketube.fun/" rel="noopener">initiative.poketube.fun</a></li>
</ul>
</section>
<!-- License -->
<section id="license" aria-labelledby="license-heading">
<h2 id="license-heading" class="section">Policy License</h2>
<p class="small">
© 20212025 Poke (Poke Project). This policy is licensed under the
<strong>Creative Commons AttributionShareAlike 4.0 International</strong> (CC BY-SA 4.0).
</p>
</section>
<footer class="site small" aria-label="Document footer">
<p><a href="#top">Return to Top</a></p>
</footer>
</main>
<script>
(function(){
const updateBox = document.getElementById('whats-new');
const dismissBtn = document.getElementById('dismissUpdate');
const KEY = 'poke_privacy_update_2025_10_11_dismissed';
try{
if(localStorage.getItem(KEY)==='1'){ updateBox && (updateBox.hidden = true); }
}catch{}
dismissBtn && dismissBtn.addEventListener('click', function(){
updateBox.hidden = true;
try{ localStorage.setItem(KEY,'1'); }catch{}
});
})();
</script>
</body>
</html>