Replace non-existent "tunnel.circle" SF Symbol with "circle.dashed" for the tunnel vote animation. Add missing translations for haptic feedback strings and "Close" across all 6 languages. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
466 lines
18 KiB
HTML
466 lines
18 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Reflect — Privacy Policy</title>
|
|
<meta name="description" content="Reflect Privacy Policy - Learn how we collect, use, and protect your data.">
|
|
<link rel="icon" type="image/png" href="app-icon.png">
|
|
<link rel="apple-touch-icon" href="app-icon.png">
|
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=Plus+Jakarta+Sans:wght@300;400;500;600&display=swap" rel="stylesheet">
|
|
<style>
|
|
:root {
|
|
--great: #4ADE80;
|
|
--great-glow: rgba(74, 222, 128, 0.4);
|
|
--good: #FBBF24;
|
|
--good-glow: rgba(251, 191, 36, 0.4);
|
|
--average: #94A3B8;
|
|
--average-glow: rgba(148, 163, 184, 0.3);
|
|
--bad: #60A5FA;
|
|
--bad-glow: rgba(96, 165, 250, 0.4);
|
|
--horrible: #F87171;
|
|
--horrible-glow: rgba(248, 113, 113, 0.4);
|
|
|
|
--bg-primary: #0A0A0B;
|
|
--bg-secondary: #111113;
|
|
--bg-card: rgba(255, 255, 255, 0.03);
|
|
--bg-glass: rgba(255, 255, 255, 0.05);
|
|
--border-subtle: rgba(255, 255, 255, 0.06);
|
|
--text-primary: #FAFAFA;
|
|
--text-secondary: rgba(255, 255, 255, 0.6);
|
|
--text-tertiary: rgba(255, 255, 255, 0.4);
|
|
}
|
|
|
|
* {
|
|
margin: 0;
|
|
padding: 0;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
html {
|
|
scroll-behavior: smooth;
|
|
}
|
|
|
|
body {
|
|
font-family: 'Plus Jakarta Sans', -apple-system, sans-serif;
|
|
background: var(--bg-primary);
|
|
color: var(--text-primary);
|
|
line-height: 1.6;
|
|
overflow-x: hidden;
|
|
}
|
|
|
|
.serif {
|
|
font-family: 'Instrument Serif', Georgia, serif;
|
|
}
|
|
|
|
/* Noise texture overlay */
|
|
body::before {
|
|
content: '';
|
|
position: fixed;
|
|
inset: 0;
|
|
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
|
|
opacity: 0.03;
|
|
pointer-events: none;
|
|
z-index: 1000;
|
|
}
|
|
|
|
/* Navigation */
|
|
nav {
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
z-index: 100;
|
|
padding: 1.5rem 2rem;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
backdrop-filter: blur(20px);
|
|
background: rgba(10, 10, 11, 0.8);
|
|
border-bottom: 1px solid var(--border-subtle);
|
|
}
|
|
|
|
.logo {
|
|
font-family: 'Instrument Serif', serif;
|
|
font-size: 1.5rem;
|
|
font-weight: 400;
|
|
letter-spacing: -0.02em;
|
|
color: var(--text-primary);
|
|
text-decoration: none;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 0.5rem;
|
|
}
|
|
|
|
.logo-icon {
|
|
width: 32px;
|
|
height: 32px;
|
|
border-radius: 8px;
|
|
}
|
|
|
|
.nav-links {
|
|
display: flex;
|
|
gap: 2.5rem;
|
|
list-style: none;
|
|
}
|
|
|
|
.nav-links a {
|
|
color: var(--text-secondary);
|
|
text-decoration: none;
|
|
font-size: 0.875rem;
|
|
font-weight: 400;
|
|
transition: color 0.3s ease;
|
|
}
|
|
|
|
.nav-links a:hover {
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
.nav-cta {
|
|
background: var(--text-primary);
|
|
color: var(--bg-primary);
|
|
padding: 0.625rem 1.25rem;
|
|
border-radius: 100px;
|
|
text-decoration: none;
|
|
font-size: 0.875rem;
|
|
font-weight: 500;
|
|
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
|
}
|
|
|
|
.nav-cta:hover {
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 10px 40px rgba(255, 255, 255, 0.15);
|
|
}
|
|
|
|
/* Page Header */
|
|
.page-header {
|
|
padding: 10rem 2rem 4rem;
|
|
text-align: center;
|
|
position: relative;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.page-header::before {
|
|
content: '';
|
|
position: absolute;
|
|
top: 50%;
|
|
left: 50%;
|
|
transform: translate(-50%, -50%);
|
|
width: 500px;
|
|
height: 500px;
|
|
background: radial-gradient(circle, var(--great-glow) 0%, transparent 70%);
|
|
opacity: 0.15;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.page-header h1 {
|
|
font-family: 'Instrument Serif', serif;
|
|
font-size: clamp(2.5rem, 6vw, 4rem);
|
|
font-weight: 400;
|
|
line-height: 1.1;
|
|
letter-spacing: -0.03em;
|
|
margin-bottom: 1rem;
|
|
position: relative;
|
|
z-index: 10;
|
|
}
|
|
|
|
.page-header p {
|
|
font-size: 1.125rem;
|
|
color: var(--text-secondary);
|
|
font-weight: 300;
|
|
position: relative;
|
|
z-index: 10;
|
|
}
|
|
|
|
/* Legal Content */
|
|
.legal-content {
|
|
max-width: 780px;
|
|
margin: 0 auto;
|
|
padding: 2rem 2rem 6rem;
|
|
}
|
|
|
|
.legal-content h2 {
|
|
font-family: 'Instrument Serif', serif;
|
|
font-size: 1.75rem;
|
|
font-weight: 400;
|
|
margin-top: 3rem;
|
|
margin-bottom: 1rem;
|
|
letter-spacing: -0.02em;
|
|
}
|
|
|
|
.legal-content h3 {
|
|
font-size: 1.125rem;
|
|
font-weight: 600;
|
|
margin-top: 2rem;
|
|
margin-bottom: 0.75rem;
|
|
}
|
|
|
|
.legal-content p {
|
|
color: var(--text-secondary);
|
|
margin-bottom: 1rem;
|
|
font-size: 0.9375rem;
|
|
line-height: 1.8;
|
|
}
|
|
|
|
.legal-content ul {
|
|
color: var(--text-secondary);
|
|
margin-bottom: 1rem;
|
|
padding-left: 1.5rem;
|
|
font-size: 0.9375rem;
|
|
line-height: 1.8;
|
|
}
|
|
|
|
.legal-content li {
|
|
margin-bottom: 0.5rem;
|
|
}
|
|
|
|
.legal-content a {
|
|
color: var(--great);
|
|
text-decoration: none;
|
|
transition: opacity 0.3s ease;
|
|
}
|
|
|
|
.legal-content a:hover {
|
|
opacity: 0.8;
|
|
}
|
|
|
|
.legal-content .effective-date {
|
|
display: inline-block;
|
|
background: var(--bg-glass);
|
|
border: 1px solid var(--border-subtle);
|
|
padding: 0.5rem 1rem;
|
|
border-radius: 100px;
|
|
font-size: 0.8125rem;
|
|
color: var(--text-tertiary);
|
|
margin-bottom: 2rem;
|
|
}
|
|
|
|
.legal-content .highlight-box {
|
|
background: var(--bg-card);
|
|
border: 1px solid var(--border-subtle);
|
|
border-radius: 16px;
|
|
padding: 1.5rem;
|
|
margin: 1.5rem 0;
|
|
}
|
|
|
|
.legal-content .highlight-box p {
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
/* Footer */
|
|
footer {
|
|
padding: 3rem 2rem;
|
|
border-top: 1px solid var(--border-subtle);
|
|
}
|
|
|
|
.footer-content {
|
|
max-width: 1200px;
|
|
margin: 0 auto;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
flex-wrap: wrap;
|
|
gap: 1rem;
|
|
}
|
|
|
|
.footer-logo {
|
|
font-family: 'Instrument Serif', serif;
|
|
font-size: 1.25rem;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 0.5rem;
|
|
}
|
|
|
|
.footer-links {
|
|
display: flex;
|
|
gap: 2rem;
|
|
list-style: none;
|
|
}
|
|
|
|
.footer-links a {
|
|
color: var(--text-tertiary);
|
|
text-decoration: none;
|
|
font-size: 0.875rem;
|
|
transition: color 0.3s ease;
|
|
}
|
|
|
|
.footer-links a:hover {
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
.footer-copy {
|
|
font-size: 0.8125rem;
|
|
color: var(--text-tertiary);
|
|
}
|
|
|
|
/* Mobile responsiveness */
|
|
@media (max-width: 768px) {
|
|
nav {
|
|
padding: 1rem;
|
|
}
|
|
|
|
.nav-links {
|
|
display: none;
|
|
}
|
|
|
|
.page-header {
|
|
padding: 8rem 1.5rem 3rem;
|
|
}
|
|
|
|
.legal-content {
|
|
padding: 2rem 1.5rem 4rem;
|
|
}
|
|
|
|
.footer-content {
|
|
flex-direction: column;
|
|
text-align: center;
|
|
}
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<nav>
|
|
<a href="index.html" class="logo"><img src="app-icon.png" alt="Reflect" class="logo-icon">Reflect</a>
|
|
<ul class="nav-links">
|
|
</ul>
|
|
<a href="index.html#download" class="nav-cta">Download</a>
|
|
</nav>
|
|
|
|
<div class="page-header">
|
|
<h1>Privacy Policy</h1>
|
|
<p>Your feelings are yours. Here's how we keep it that way.</p>
|
|
</div>
|
|
|
|
<div class="legal-content">
|
|
<div class="effective-date">Effective Date: February 10, 2026</div>
|
|
|
|
<div class="highlight-box">
|
|
<p><strong>The short version:</strong> Reflect is built around privacy. Your mood data stays on your devices and in your personal iCloud account. We don't have user accounts, we don't sell data, and we can't read your entries. We collect anonymous usage analytics to improve the app — and you can opt out at any time.</p>
|
|
</div>
|
|
|
|
<h2>1. Who We Are</h2>
|
|
<p>Reflect is developed and operated by 88 Oak Apps ("we", "us", "our"). This Privacy Policy explains how we collect, use, and protect information when you use the Reflect app for iOS and watchOS ("the App").</p>
|
|
|
|
<h2>2. Data That Stays on Your Devices</h2>
|
|
<p>The core of Reflect — your mood entries, notes, and photos — is stored locally on your device using Apple's SwiftData framework. If you have iCloud enabled, this data syncs automatically through your personal iCloud account via Apple's CloudKit.</p>
|
|
<ul>
|
|
<li><strong>Mood entries</strong> — your daily mood rating (Great, Good, Average, Bad, Horrible)</li>
|
|
<li><strong>Notes</strong> — any text notes you attach to entries</li>
|
|
<li><strong>Photos</strong> — any images you attach to entries</li>
|
|
<li><strong>Streak data</strong> — your voting streak history</li>
|
|
</ul>
|
|
<p>We never have access to this data. It is stored on-device and, if iCloud is enabled, encrypted and synced by Apple. We cannot read, access, or recover your mood data.</p>
|
|
|
|
<h2>3. HealthKit Data</h2>
|
|
<p>If you grant permission, Reflect can integrate with Apple HealthKit to read and write mindful minutes and mood data. HealthKit data is governed by Apple's strict privacy policies and is never shared with us or any third party. We do not use HealthKit data for analytics, advertising, or any purpose other than displaying it to you within the App.</p>
|
|
|
|
<h2>4. Anonymous Analytics</h2>
|
|
<p>We collect anonymous usage analytics to understand how people use Reflect and to improve the app. This is handled through a self-hosted instance of PostHog, an open-source analytics platform, running on our own servers.</p>
|
|
|
|
<h3>What we collect:</h3>
|
|
<ul>
|
|
<li><strong>App usage events</strong> — which screens are viewed, which features are used (e.g., changing a theme, logging a mood), and how the app is navigated</li>
|
|
<li><strong>App preferences</strong> — which theme, icon pack, voting layout, and visual style you've selected (sent as aggregate properties, not tied to an identity)</li>
|
|
<li><strong>Device information</strong> — device model, OS version, app version, screen size, and locale</li>
|
|
<li><strong>Session data</strong> — session duration, app foreground/background events</li>
|
|
<li><strong>Performance data</strong> — network request timing (URLs and status codes, no request/response bodies)</li>
|
|
</ul>
|
|
|
|
<h3>What we do NOT collect:</h3>
|
|
<ul>
|
|
<li>Your name, email, or any personally identifiable information</li>
|
|
<li>Your mood entries, notes, or photos</li>
|
|
<li>Your iCloud account information</li>
|
|
<li>Your HealthKit data</li>
|
|
<li>Your location</li>
|
|
<li>Contacts, calendar, or any other personal data</li>
|
|
</ul>
|
|
|
|
<div class="highlight-box">
|
|
<p>All analytics are collected anonymously. We do not create user accounts and do not link analytics data to any identity. Each device generates a random anonymous identifier that cannot be traced back to you.</p>
|
|
</div>
|
|
|
|
<h3>Session Replay</h3>
|
|
<p>Reflect may use PostHog's session replay feature, which captures anonymized visual recordings of app sessions to help us identify usability issues. Session replays do not capture text input, personal data, or mood content. This feature can be disabled at any time within the App. We may also disable it remotely if needed.</p>
|
|
|
|
<h3>Opting Out</h3>
|
|
<p>You can opt out of all analytics at any time in the App's Settings under the Privacy section. When opted out, no analytics data is collected or transmitted.</p>
|
|
|
|
<h2>5. How We Use Your Information</h2>
|
|
<ul>
|
|
<li>To provide and improve the Reflect app experience</li>
|
|
<li>To understand how features are used so we can improve them</li>
|
|
<li>To identify and fix bugs and performance issues</li>
|
|
<li>To develop new features based on usage patterns</li>
|
|
</ul>
|
|
|
|
<h2>6. Subscription and Purchase Data</h2>
|
|
<p>Reflect offers optional paid subscriptions ("Reflect+") managed entirely through Apple's App Store and StoreKit. Payment processing is handled by Apple. We do not collect or store your payment information, Apple ID, or billing details.</p>
|
|
<p>We receive anonymized subscription status information (e.g., whether a subscription is active, in a trial period, or expired) solely to unlock premium features within the App.</p>
|
|
|
|
<h2>7. Data Sharing</h2>
|
|
<p>We do not sell, rent, or share your personal data with third parties. Period.</p>
|
|
<ul>
|
|
<li><strong>No advertising networks</strong> — Reflect contains no ads and no ad tracking</li>
|
|
<li><strong>No data brokers</strong> — we never sell or provide data to third parties</li>
|
|
<li><strong>No social networks</strong> — any sharing features are initiated by you and use Apple's native share sheet</li>
|
|
</ul>
|
|
<p>Our analytics data is processed on our self-hosted servers and is never shared with external analytics providers.</p>
|
|
|
|
<h2>8. Third-Party Services</h2>
|
|
<ul>
|
|
<li><strong>Apple CloudKit:</strong> Used for syncing your personal data across devices (if iCloud is enabled). Subject to <a href="https://www.apple.com/legal/privacy/">Apple's Privacy Policy</a>.</li>
|
|
<li><strong>Apple StoreKit:</strong> Used for in-app purchases and subscriptions. Payment processing is handled entirely by Apple.</li>
|
|
<li><strong>Apple HealthKit:</strong> Used for reading and writing health-related data with your explicit permission. Subject to Apple's Privacy Policy.</li>
|
|
</ul>
|
|
|
|
<h2>9. Data Storage and Security</h2>
|
|
<p>Your mood data is stored on-device using Apple's encrypted storage. If iCloud sync is enabled, data is encrypted in transit and at rest by Apple's CloudKit infrastructure.</p>
|
|
<p>Anonymous analytics data is stored on our self-hosted PostHog instance, which is secured with industry-standard encryption and access controls.</p>
|
|
|
|
<h2>10. Data Retention</h2>
|
|
<ul>
|
|
<li><strong>Personal data</strong> — stored on your device and iCloud account indefinitely, or until you delete it. Deleting the app removes local data; iCloud data can be managed through your iCloud settings.</li>
|
|
<li><strong>Analytics data</strong> — retained for up to 24 months, then automatically purged.</li>
|
|
</ul>
|
|
|
|
<h2>11. Your Rights</h2>
|
|
<p>Because we don't collect personally identifiable information, most traditional data rights (access, portability, deletion) are handled directly through your device and iCloud account. You have full control over your data at all times.</p>
|
|
<p>You can:</p>
|
|
<ul>
|
|
<li>Delete any or all mood entries within the App</li>
|
|
<li>Delete the App and all local data at any time</li>
|
|
<li>Manage iCloud data through Apple's iCloud settings</li>
|
|
<li>Opt out of analytics in Settings > Privacy</li>
|
|
<li>Disable session replay within the App's settings</li>
|
|
<li>Revoke HealthKit permissions through iOS Settings at any time</li>
|
|
<li>Contact us to ask what data we hold about you (which is none, since analytics are anonymous)</li>
|
|
</ul>
|
|
|
|
<h2>12. Children's Privacy</h2>
|
|
<p>Reflect is not directed at children under the age of 13. We do not knowingly collect any information from children. Since we don't collect personal information from any users, there is no risk of children's data being stored or processed.</p>
|
|
|
|
<h2>13. Changes to This Policy</h2>
|
|
<p>We may update this Privacy Policy from time to time. Changes will be posted on this page with an updated effective date. Continued use of the App after changes constitutes acceptance of the updated policy.</p>
|
|
|
|
<h2>14. Contact</h2>
|
|
<p>If you have questions about this Privacy Policy or our privacy practices, contact us at:</p>
|
|
<p><a href="mailto:support@88oakapps.com">support@88oakapps.com</a></p>
|
|
</div>
|
|
|
|
<footer>
|
|
<div class="footer-content">
|
|
<div class="footer-logo"><img src="app-icon.png" alt="Reflect" class="logo-icon">Reflect</div>
|
|
<ul class="footer-links">
|
|
<li><a href="privacy.html">Privacy Policy</a></li>
|
|
<li><a href="eula.html">Terms of Service</a></li>
|
|
<li><a href="mailto:support@88oakapps.com">Support</a></li>
|
|
</ul>
|
|
<p class="footer-copy">© 2026 88 Oak Apps. All rights reserved.</p>
|
|
</div>
|
|
</footer>
|
|
</body>
|
|
</html>
|