mirror of
https://github.com/screentinker/screentinker.git
synced 2026-08-17 07:34:15 -06:00
333 lines
10 KiB
HTML
333 lines
10 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Privacy Policy - SwiftDisplay</title>
|
|
<style>
|
|
* {
|
|
margin: 0;
|
|
padding: 0;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
body {
|
|
font-family: -apple-system, sans-serif;
|
|
background: #111827;
|
|
color: #e2e8f0;
|
|
line-height: 1.8;
|
|
}
|
|
|
|
.container {
|
|
max-width: 800px;
|
|
margin: 0 auto;
|
|
padding: 40px 24px 80px;
|
|
}
|
|
|
|
h1 {
|
|
color: #e65c00;
|
|
font-size: 32px;
|
|
margin-bottom: 8px;
|
|
}
|
|
|
|
.updated {
|
|
color: #64748b;
|
|
font-size: 14px;
|
|
margin-bottom: 40px;
|
|
}
|
|
|
|
h2 {
|
|
color: #f1f5f9;
|
|
font-size: 20px;
|
|
margin: 32px 0 12px;
|
|
}
|
|
|
|
h3 {
|
|
color: #cbd5e1;
|
|
font-size: 16px;
|
|
margin: 20px 0 8px;
|
|
}
|
|
|
|
p,
|
|
li {
|
|
color: #94a3b8;
|
|
font-size: 15px;
|
|
margin-bottom: 12px;
|
|
}
|
|
|
|
ul {
|
|
padding-left: 24px;
|
|
}
|
|
|
|
a {
|
|
color: #e65c00;
|
|
}
|
|
|
|
.back {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
color: #64748b;
|
|
font-size: 13px;
|
|
margin-bottom: 24px;
|
|
text-decoration: none;
|
|
}
|
|
|
|
.back:hover {
|
|
color: #94a3b8;
|
|
}
|
|
|
|
table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
margin: 16px 0;
|
|
}
|
|
|
|
th,
|
|
td {
|
|
padding: 10px 12px;
|
|
text-align: left;
|
|
border-bottom: 1px solid #1e293b;
|
|
font-size: 14px;
|
|
color: #94a3b8;
|
|
}
|
|
|
|
th {
|
|
color: #cbd5e1;
|
|
font-weight: 600;
|
|
}
|
|
</style>
|
|
</head>
|
|
|
|
<body>
|
|
<div class="container">
|
|
<a href="/" class="back">← Back to SwiftDisplay</a>
|
|
<h1>Privacy Policy</h1>
|
|
<p class="updated">Last updated: May 15, 2026</p>
|
|
|
|
<h2>1. Overview</h2>
|
|
<p>SwiftDisplay ("we", "us", "our") respects your privacy. This policy explains what data we collect, how we use it,
|
|
and your rights regarding your information.</p>
|
|
|
|
<h2>2. Information We Collect</h2>
|
|
|
|
<h3>2.1 Account Information</h3>
|
|
<table>
|
|
<tr>
|
|
<th>Data</th>
|
|
<th>Purpose</th>
|
|
<th>Retention</th>
|
|
</tr>
|
|
<tr>
|
|
<td>Email address</td>
|
|
<td>Authentication, notifications</td>
|
|
<td>Until account deletion</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Name</td>
|
|
<td>Display in dashboard</td>
|
|
<td>Until account deletion</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Password hash</td>
|
|
<td>Authentication (bcrypt, never stored in plain text)</td>
|
|
<td>Until account deletion</td>
|
|
</tr>
|
|
<tr>
|
|
<td>OAuth provider ID</td>
|
|
<td>Google/Microsoft sign-in</td>
|
|
<td>Until account deletion</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<h3>2.2 Device Information</h3>
|
|
<table>
|
|
<tr>
|
|
<th>Data</th>
|
|
<th>Purpose</th>
|
|
<th>Retention</th>
|
|
</tr>
|
|
<tr>
|
|
<td>Device ID</td>
|
|
<td>Unique device identification</td>
|
|
<td>Until device removal</td>
|
|
</tr>
|
|
<tr>
|
|
<td>IP address</td>
|
|
<td>Network connectivity, security</td>
|
|
<td>Overwritten each connection</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Android version, screen resolution</td>
|
|
<td>Compatibility, display optimization</td>
|
|
<td>Until device removal</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Battery, storage, RAM, CPU, WiFi</td>
|
|
<td>Device health monitoring</td>
|
|
<td>90 days (rolling)</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Device fingerprint (hardware hash)</td>
|
|
<td>Prevent trial abuse</td>
|
|
<td>Until device removal</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<h3>2.3 Usage Data</h3>
|
|
<table>
|
|
<tr>
|
|
<th>Data</th>
|
|
<th>Purpose</th>
|
|
<th>Retention</th>
|
|
</tr>
|
|
<tr>
|
|
<td>Content play logs</td>
|
|
<td>Proof-of-play reporting</td>
|
|
<td>90 days</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Activity log (API actions)</td>
|
|
<td>Audit trail, security</td>
|
|
<td>90 days</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Screenshots (on-demand)</td>
|
|
<td>Remote monitoring</td>
|
|
<td>Latest only per device</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<h3>2.4 Content</h3>
|
|
<p>Media files (images, videos) you upload are stored on our servers solely to deliver them to your devices. We do
|
|
not analyze, sell, or share your content.</p>
|
|
|
|
<h3>2.5 Error and Diagnostic Telemetry</h3>
|
|
<p>Player clients submit error reports automatically so we can fix issues on devices we cannot directly access
|
|
(smart TVs, embedded signage browsers). Reports may be submitted before a device has paired; in that case only the
|
|
network IP and user-agent are present, with no device ID.</p>
|
|
<table>
|
|
<tr>
|
|
<th>Data</th>
|
|
<th>Purpose</th>
|
|
<th>Retention</th>
|
|
</tr>
|
|
<tr>
|
|
<td>Browser user-agent string</td>
|
|
<td>Identifying which player platforms encounter errors</td>
|
|
<td>Rolling buffer (10,000 entries)</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Error messages, stack traces, and source-file references</td>
|
|
<td>Diagnosing player issues we cannot reproduce in development</td>
|
|
<td>Rolling buffer (10,000 entries)</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Recent player log entries (up to 50, including filenames of content being played)</td>
|
|
<td>Context for the error so we understand what the player was doing</td>
|
|
<td>Rolling buffer (10,000 entries)</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Screen and viewport dimensions</td>
|
|
<td>Diagnosing layout and rendering issues at the device's actual size</td>
|
|
<td>Rolling buffer (10,000 entries)</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Coarse player state (idle, playing, waiting)</td>
|
|
<td>Distinguishing errors during playback vs setup</td>
|
|
<td>Rolling buffer (10,000 entries)</td>
|
|
</tr>
|
|
</table>
|
|
<p>This telemetry can be disabled by self-hosters via the <code>PLAYER_DEBUG_REPORTING=off</code> environment
|
|
variable. On swiftdisplay.com it is on by default.</p>
|
|
|
|
<h2>3. How We Use Your Information</h2>
|
|
<ul>
|
|
<li><strong>Provide the Service:</strong> Deliver content to devices, enable remote management, process
|
|
subscriptions</li>
|
|
<li><strong>Security:</strong> Detect unauthorized access, prevent abuse, protect accounts</li>
|
|
<li><strong>Communications:</strong> Send device offline alerts, subscription notifications, service updates</li>
|
|
<li><strong>Improvement:</strong> Analyze aggregate usage patterns to improve the Service (no individual tracking)
|
|
</li>
|
|
</ul>
|
|
|
|
<h2>4. Data Sharing</h2>
|
|
<p>We do not sell your personal information. We share data only in these limited circumstances:</p>
|
|
<ul>
|
|
<li><strong>Service providers:</strong> Payment processing (Stripe), email delivery, hosting infrastructure</li>
|
|
<li><strong>Team members:</strong> If you belong to a team, other team members can see shared devices and content
|
|
</li>
|
|
<li><strong>Legal requirements:</strong> When required by law, subpoena, or court order</li>
|
|
<li><strong>Business transfers:</strong> In the event of a merger, acquisition, or sale of assets</li>
|
|
</ul>
|
|
|
|
<h2>5. Self-Hosted Deployments</h2>
|
|
<p>If you self-host SwiftDisplay on your own infrastructure:</p>
|
|
<ul>
|
|
<li>All data stays on your servers. We have no access to it.</li>
|
|
<li>You are the data controller and responsible for compliance with applicable privacy laws.</li>
|
|
<li>No telemetry or usage data is sent to us from self-hosted instances. The error and diagnostic telemetry
|
|
described in Section 2.5 is collected by the self-hosted server itself, not transmitted externally, and can be
|
|
disabled entirely with <code>PLAYER_DEBUG_REPORTING=off</code>.</li>
|
|
</ul>
|
|
|
|
<h2>6. Data Security</h2>
|
|
<ul>
|
|
<li>Passwords are hashed with bcrypt (never stored in plain text)</li>
|
|
<li>API authentication uses JWT tokens with auto-expiry</li>
|
|
<li>All connections use HTTPS/TLS encryption</li>
|
|
<li>Android app uses encrypted storage for credentials</li>
|
|
<li>Rate limiting protects against brute force attacks</li>
|
|
<li>Regular security audits of the codebase</li>
|
|
</ul>
|
|
|
|
<h2>7. Your Rights</h2>
|
|
<p>You have the right to:</p>
|
|
<ul>
|
|
<li><strong>Access:</strong> View all data associated with your account from the Settings page</li>
|
|
<li><strong>Correction:</strong> Update your account information at any time</li>
|
|
<li><strong>Deletion:</strong> Delete your account and all associated data from Settings</li>
|
|
<li><strong>Export:</strong> Download your data via the database backup feature (admin) or API</li>
|
|
<li><strong>Portability:</strong> Export content and reports in standard formats (CSV, PNG, MP4)</li>
|
|
</ul>
|
|
|
|
<h2>8. Cookies and Local Storage</h2>
|
|
<ul>
|
|
<li>We use localStorage to store your authentication token and preferences (language, theme)</li>
|
|
<li>The web player uses a Service Worker for offline content caching</li>
|
|
<li>We do not use third-party tracking cookies</li>
|
|
<li>Google/Microsoft OAuth may set cookies as part of their authentication flow</li>
|
|
</ul>
|
|
|
|
<h2>9. Children's Privacy</h2>
|
|
<p>The Service is not intended for use by children under 13. We do not knowingly collect information from children
|
|
under 13.</p>
|
|
|
|
<h2>10. International Data Transfers</h2>
|
|
<p>If you access the Service from outside the United States, your data may be transferred to and processed in the
|
|
United States. By using the Service, you consent to this transfer.</p>
|
|
|
|
<h2>11. Data Retention</h2>
|
|
<ul>
|
|
<li>Account data: retained until you delete your account</li>
|
|
<li>Device telemetry: 90 days (automatically pruned)</li>
|
|
<li>Play logs: 90 days (automatically pruned)</li>
|
|
<li>Activity logs: 90 days (automatically pruned)</li>
|
|
<li>Error and diagnostic telemetry: rolling buffer of the 10,000 most recent entries (oldest pruned on insert)
|
|
</li>
|
|
<li>Content: retained until you delete it or your account</li>
|
|
<li>After account deletion: all data removed within 30 days</li>
|
|
</ul>
|
|
|
|
<h2>12. Changes to This Policy</h2>
|
|
<p>We may update this policy from time to time. We will notify registered users of material changes via email. The
|
|
"Last updated" date will be revised accordingly.</p>
|
|
|
|
<h2>13. Contact Us</h2>
|
|
<p>For privacy-related questions or data requests, contact us at:</p>
|
|
<p>Email: support@swiftdisplay.com</p>
|
|
</div>
|
|
</body>
|
|
|
|
</html> |