feat: add privacy policy and EULA pages, use real app icon on landing site
- Create privacy.html and eula.html matching landing page style - Update Settings links to sportstime.88oakapps.com/privacy.html and /eula.html - Rename "Terms of Service" to "EULA" in Settings - Replace emoji logo with real app icon across all landing pages - Update footer links in index.html Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -311,12 +311,12 @@ struct SettingsView: View {
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
|
||||
Link(destination: URL(string: "https://88oakapps.com/privacy")!) {
|
||||
Link(destination: URL(string: "https://sportstime.88oakapps.com/privacy.html")!) {
|
||||
Label("Privacy Policy", systemImage: "hand.raised")
|
||||
}
|
||||
|
||||
Link(destination: URL(string: "https://88oakapps.com/terms")!) {
|
||||
Label("Terms of Service", systemImage: "doc.text")
|
||||
Link(destination: URL(string: "https://sportstime.88oakapps.com/eula.html")!) {
|
||||
Label("EULA", systemImage: "doc.text")
|
||||
}
|
||||
|
||||
Link(destination: URL(string: "mailto:support@88oakapps.com")!) {
|
||||
|
||||
BIN
landing_page/app-icon.png
Normal file
BIN
landing_page/app-icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 217 KiB |
359
landing_page/eula.html
Normal file
359
landing_page/eula.html
Normal file
@@ -0,0 +1,359 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>End User License Agreement - SportsTime</title>
|
||||
<meta name="description" content="SportsTime End User License Agreement (EULA) - Terms governing the use of the SportsTime app.">
|
||||
|
||||
<!-- Fonts -->
|
||||
<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=Plus+Jakarta+Sans:ital,wght@0,400;0,500;0,600;0,700;0,800;1,400&display=swap" rel="stylesheet">
|
||||
|
||||
<style>
|
||||
:root {
|
||||
--navy-900: #0A2540;
|
||||
--navy-800: #0D3056;
|
||||
--navy-700: #134074;
|
||||
--navy-600: #1A5190;
|
||||
--sky-50: #F0F9FF;
|
||||
--sky-100: #E0F2FE;
|
||||
--sky-200: #BAE6FD;
|
||||
--gray-50: #F8FAFC;
|
||||
--gray-100: #F1F5F9;
|
||||
--gray-200: #E2E8F0;
|
||||
--gray-400: #94A3B8;
|
||||
--gray-500: #64748B;
|
||||
--gray-600: #475569;
|
||||
--gray-700: #334155;
|
||||
--white: #FFFFFF;
|
||||
--font-main: 'Plus Jakarta Sans', -apple-system, BlinkMacSystemFont, sans-serif;
|
||||
--shadow-sm: 0 1px 2px rgba(10, 37, 64, 0.04);
|
||||
--shadow-md: 0 4px 12px rgba(10, 37, 64, 0.08);
|
||||
--shadow-lg: 0 12px 40px rgba(10, 37, 64, 0.12);
|
||||
--ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
|
||||
}
|
||||
|
||||
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
html { scroll-behavior: smooth; }
|
||||
|
||||
body {
|
||||
font-family: var(--font-main);
|
||||
background: linear-gradient(180deg, var(--sky-100) 0%, var(--sky-50) 30%, var(--white) 100%);
|
||||
color: var(--navy-900);
|
||||
line-height: 1.6;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
nav {
|
||||
position: fixed;
|
||||
top: 0; left: 0; right: 0;
|
||||
z-index: 100;
|
||||
padding: 1rem 2rem;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
background: rgba(255, 255, 255, 0.9);
|
||||
backdrop-filter: blur(20px);
|
||||
-webkit-backdrop-filter: blur(20px);
|
||||
box-shadow: var(--shadow-sm);
|
||||
}
|
||||
|
||||
.logo {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.625rem;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.logo-icon {
|
||||
width: 42px; height: 42px;
|
||||
border-radius: 12px;
|
||||
object-fit: cover;
|
||||
box-shadow: var(--shadow-md);
|
||||
}
|
||||
|
||||
.logo-text {
|
||||
font-weight: 800;
|
||||
font-size: 1.375rem;
|
||||
letter-spacing: -0.02em;
|
||||
color: var(--navy-900);
|
||||
}
|
||||
|
||||
.nav-cta {
|
||||
display: flex; align-items: center; gap: 0.5rem;
|
||||
padding: 0.75rem 1.25rem;
|
||||
background: var(--navy-800);
|
||||
color: var(--white);
|
||||
text-decoration: none;
|
||||
font-weight: 600; font-size: 0.875rem;
|
||||
border-radius: 12px;
|
||||
transition: all 0.3s var(--ease-out-expo);
|
||||
box-shadow: var(--shadow-md);
|
||||
}
|
||||
|
||||
.nav-cta:hover {
|
||||
background: var(--navy-700);
|
||||
transform: translateY(-2px);
|
||||
box-shadow: var(--shadow-lg);
|
||||
}
|
||||
|
||||
.content {
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
padding: 7rem 2rem 4rem;
|
||||
}
|
||||
|
||||
.content h1 {
|
||||
font-size: clamp(2rem, 4vw, 2.75rem);
|
||||
font-weight: 800;
|
||||
color: var(--navy-900);
|
||||
letter-spacing: -0.02em;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.effective-date {
|
||||
font-size: 0.9375rem;
|
||||
color: var(--gray-500);
|
||||
margin-bottom: 2.5rem;
|
||||
}
|
||||
|
||||
.content h2 {
|
||||
font-size: 1.375rem;
|
||||
font-weight: 700;
|
||||
color: var(--navy-800);
|
||||
margin-top: 2.5rem;
|
||||
margin-bottom: 0.75rem;
|
||||
letter-spacing: -0.01em;
|
||||
}
|
||||
|
||||
.content h3 {
|
||||
font-size: 1.125rem;
|
||||
font-weight: 600;
|
||||
color: var(--navy-800);
|
||||
margin-top: 1.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.content p, .content li {
|
||||
font-size: 1rem;
|
||||
color: var(--gray-600);
|
||||
line-height: 1.8;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.content ul, .content ol {
|
||||
padding-left: 1.5rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.content li {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.content a {
|
||||
color: var(--navy-700);
|
||||
text-decoration: underline;
|
||||
text-underline-offset: 2px;
|
||||
}
|
||||
|
||||
.content a:hover {
|
||||
color: var(--navy-600);
|
||||
}
|
||||
|
||||
.card {
|
||||
background: var(--white);
|
||||
border: 1px solid var(--sky-100);
|
||||
border-radius: 16px;
|
||||
padding: 1.5rem;
|
||||
margin: 1.5rem 0;
|
||||
box-shadow: var(--shadow-sm);
|
||||
}
|
||||
|
||||
.card p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
footer {
|
||||
padding: 2.5rem 2rem;
|
||||
background: var(--white);
|
||||
border-top: 1px solid var(--sky-100);
|
||||
}
|
||||
|
||||
.footer-container {
|
||||
max-width: 1100px;
|
||||
margin: 0 auto;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
gap: 1.5rem;
|
||||
}
|
||||
|
||||
.footer-links {
|
||||
display: flex;
|
||||
gap: 2rem;
|
||||
}
|
||||
|
||||
.footer-links a {
|
||||
color: var(--gray-500);
|
||||
text-decoration: none;
|
||||
font-size: 0.875rem;
|
||||
font-weight: 500;
|
||||
transition: color 0.2s ease;
|
||||
}
|
||||
|
||||
.footer-links a:hover { color: var(--navy-700); }
|
||||
|
||||
.footer-copy {
|
||||
color: var(--gray-400);
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
nav { padding: 1rem; }
|
||||
.logo-text { font-size: 1.125rem; }
|
||||
.content { padding: 5rem 1.5rem 3rem; }
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.footer-container { flex-direction: column; text-align: center; }
|
||||
.footer-links { gap: 1.5rem; }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<nav>
|
||||
<a href="index.html" class="logo">
|
||||
<img src="app-icon.png" alt="SportsTime" class="logo-icon">
|
||||
<span class="logo-text">SportsTime</span>
|
||||
</a>
|
||||
<a href="index.html" class="nav-cta">Home</a>
|
||||
</nav>
|
||||
|
||||
<div class="content">
|
||||
<h1>End User License Agreement</h1>
|
||||
<p class="effective-date">Effective Date: February 10, 2026</p>
|
||||
|
||||
<h2>1. Agreement</h2>
|
||||
<p>This End User License Agreement ("EULA") is a legal agreement between you ("User") and 88 Oak Apps ("Company," "we," "our," or "us") governing your use of the SportsTime mobile application ("App"). By downloading, installing, or using the App, you agree to be bound by this EULA. If you do not agree to these terms, do not download or use the App.</p>
|
||||
<p>This EULA is supplemental to Apple's standard Licensed Application End User License Agreement ("Standard EULA") available at <a href="https://www.apple.com/legal/internet-services/itunes/dev/stdeula/">apple.com/legal/internet-services/itunes/dev/stdeula</a>. In the event of a conflict, the terms of this EULA shall prevail.</p>
|
||||
|
||||
<h2>2. License Grant</h2>
|
||||
<p>We grant you a limited, non-exclusive, non-transferable, revocable license to download, install, and use the App on Apple-branded devices that you own or control, for your personal, non-commercial purposes, subject to the terms of this EULA.</p>
|
||||
|
||||
<h2>3. Subscription Terms (SportsTime Pro)</h2>
|
||||
<p>The App offers a free tier with limited functionality and an optional paid "SportsTime Pro" subscription that unlocks additional features including:</p>
|
||||
<ul>
|
||||
<li>Unlimited trip planning</li>
|
||||
<li>PDF itinerary export</li>
|
||||
<li>Stadium progress tracking</li>
|
||||
<li>Share cards and social features</li>
|
||||
</ul>
|
||||
<p>Exact pricing is displayed in the App and on the App Store at the time of purchase.</p>
|
||||
|
||||
<h3>Billing and Renewal</h3>
|
||||
<ul>
|
||||
<li>Subscriptions are billed through your Apple ID account on a monthly or annual basis</li>
|
||||
<li>Subscriptions automatically renew unless turned off at least 24 hours before the end of the current billing period</li>
|
||||
<li>Your account will be charged for renewal within 24 hours prior to the end of the current period</li>
|
||||
<li>You can manage and cancel subscriptions in your Apple ID account settings</li>
|
||||
</ul>
|
||||
|
||||
<h3>Free Trial</h3>
|
||||
<p>New subscribers may be eligible for a free trial period. If you do not cancel before the trial ends, your subscription will automatically convert to a paid subscription at the displayed rate.</p>
|
||||
|
||||
<h3>Refunds</h3>
|
||||
<p>All subscription payments are processed by Apple. Refund requests must be directed to Apple through their standard refund process. We do not process refunds directly.</p>
|
||||
|
||||
<h2>4. Restrictions</h2>
|
||||
<p>You agree not to:</p>
|
||||
<ul>
|
||||
<li>Copy, modify, or distribute the App or any part thereof</li>
|
||||
<li>Reverse-engineer, decompile, disassemble, or attempt to derive the source code of the App</li>
|
||||
<li>Rent, lease, lend, sell, sublicense, or transfer the App to any third party</li>
|
||||
<li>Remove, alter, or obscure any proprietary notices in the App</li>
|
||||
<li>Use the App for any unlawful purpose or in violation of any applicable laws</li>
|
||||
<li>Attempt to interfere with or disrupt the App's functionality, servers, or networks</li>
|
||||
<li>Use automated systems, bots, or scrapers to access or extract data from the App</li>
|
||||
<li>Use the App to collect data about other users</li>
|
||||
</ul>
|
||||
|
||||
<h2>5. Intellectual Property</h2>
|
||||
<p>The App and all associated content, features, and functionality (including but not limited to design, graphics, text, and code) are owned by 88 Oak Apps and are protected by copyright, trademark, and other intellectual property laws. This EULA does not grant you any ownership rights to the App or its content.</p>
|
||||
<p>Sports team names, logos, and schedule data are the property of their respective leagues and teams and are used under fair use for informational purposes.</p>
|
||||
|
||||
<h2>6. Your Content</h2>
|
||||
<p>You retain full ownership of all content you create within the App, including trips, visit logs, notes, and preferences ("User Content"). We do not claim any rights to your User Content beyond what is necessary to provide the App's functionality.</p>
|
||||
<p>You are solely responsible for your User Content. We are not responsible for any loss of User Content due to device failure, app deletion, or any other cause.</p>
|
||||
|
||||
<h2>7. Disclaimer of Warranties</h2>
|
||||
<p>THE APP IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.</p>
|
||||
<p>We do not warrant that:</p>
|
||||
<ul>
|
||||
<li>The App will be uninterrupted, error-free, or secure</li>
|
||||
<li>Any defects will be corrected</li>
|
||||
<li>The App will meet your specific requirements</li>
|
||||
</ul>
|
||||
<div class="card">
|
||||
<p><strong>Important:</strong> Game schedules, stadium information, and travel data are provided for informational purposes only. We do not guarantee the accuracy, completeness, or timeliness of this information. Always verify game times and travel details independently before making plans.</p>
|
||||
</div>
|
||||
|
||||
<h2>8. Limitation of Liability</h2>
|
||||
<p>TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL 88 OAK APPS BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR PUNITIVE DAMAGES, INCLUDING BUT NOT LIMITED TO LOSS OF DATA, LOSS OF PROFITS, OR BUSINESS INTERRUPTION, ARISING OUT OF OR RELATED TO YOUR USE OF THE APP.</p>
|
||||
<p>OUR TOTAL LIABILITY FOR ALL CLAIMS ARISING OUT OF OR RELATING TO THIS EULA OR THE APP SHALL NOT EXCEED THE AMOUNT YOU PAID FOR THE APP OR SUBSCRIPTION IN THE TWELVE (12) MONTHS PRECEDING THE CLAIM.</p>
|
||||
|
||||
<h2>9. Indemnification</h2>
|
||||
<p>You agree to indemnify and hold harmless 88 Oak Apps, its affiliates, and their respective officers, directors, employees, and agents from any claims, damages, losses, liabilities, and expenses (including reasonable attorneys' fees) arising out of or related to your use of the App or violation of this EULA.</p>
|
||||
|
||||
<h2>10. Termination</h2>
|
||||
<p>This EULA is effective until terminated. Your rights under this EULA will terminate automatically if you fail to comply with any of its terms. You may terminate this EULA at any time by deleting the App from your devices. Upon termination:</p>
|
||||
<ul>
|
||||
<li>You must cease all use of the App and delete all copies from your devices</li>
|
||||
<li>Any active subscriptions should be cancelled through your Apple ID settings</li>
|
||||
<li>Sections 5, 7, 8, 9, and 13 shall survive termination</li>
|
||||
</ul>
|
||||
|
||||
<h2>11. Changes to This Agreement</h2>
|
||||
<p>We reserve the right to modify this EULA at any time. Changes will be posted on this page with an updated effective date. Your continued use of the App after changes constitutes acceptance of the modified terms. If you disagree with any changes, you should stop using the App and delete it from your devices.</p>
|
||||
|
||||
<h2>12. Governing Law</h2>
|
||||
<p>This EULA shall be governed by and construed in accordance with the laws of the United States, without regard to its conflict of law provisions. Any disputes arising under this EULA shall be resolved in the courts of competent jurisdiction.</p>
|
||||
|
||||
<h2>13. Apple-Specific Terms</h2>
|
||||
<p>This EULA is between you and 88 Oak Apps, not Apple Inc. Apple has no obligation to provide maintenance, support, or warranty for the App. In the event of any third-party intellectual property claim, 88 Oak Apps, not Apple, is responsible for investigation, defense, and settlement. Apple and its subsidiaries are third-party beneficiaries of this EULA.</p>
|
||||
|
||||
<h2>14. Severability</h2>
|
||||
<p>If any provision of this EULA is held to be invalid or unenforceable, the remaining provisions shall continue in full force and effect. The invalid or unenforceable provision shall be modified to the minimum extent necessary to make it valid and enforceable.</p>
|
||||
|
||||
<h2>15. Entire Agreement</h2>
|
||||
<p>This EULA, together with Apple's Standard EULA and our <a href="privacy.html">Privacy Policy</a>, constitutes the entire agreement between you and 88 Oak Apps regarding the App, and supersedes all prior agreements and understandings.</p>
|
||||
|
||||
<h2>16. Contact</h2>
|
||||
<p>If you have any questions about this EULA, please contact us:</p>
|
||||
<div class="card">
|
||||
<p><strong>88 Oak Apps</strong><br>
|
||||
Email: <a href="mailto:support@88oakapps.com">support@88oakapps.com</a><br>
|
||||
Website: <a href="https://sportstime.88oakapps.com">sportstime.88oakapps.com</a></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
<div class="footer-container">
|
||||
<a href="index.html" class="logo">
|
||||
<img src="app-icon.png" alt="SportsTime" class="logo-icon">
|
||||
<span class="logo-text">SportsTime</span>
|
||||
</a>
|
||||
<div class="footer-links">
|
||||
<a href="privacy.html">Privacy Policy</a>
|
||||
<a href="eula.html">EULA</a>
|
||||
<a href="mailto:support@88oakapps.com">Contact</a>
|
||||
</div>
|
||||
<div class="footer-copy">
|
||||
© 2026 88 Oak Apps. All rights reserved.
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -107,12 +107,8 @@
|
||||
.logo-icon {
|
||||
width: 42px;
|
||||
height: 42px;
|
||||
background: linear-gradient(135deg, var(--navy-700), var(--navy-800));
|
||||
border-radius: 12px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 1.25rem;
|
||||
object-fit: cover;
|
||||
box-shadow: var(--shadow-md);
|
||||
}
|
||||
|
||||
@@ -896,7 +892,7 @@
|
||||
<!-- Navigation -->
|
||||
<nav>
|
||||
<a href="#" class="logo">
|
||||
<div class="logo-icon">🏟️</div>
|
||||
<img src="app-icon.png" alt="SportsTime" class="logo-icon">
|
||||
<span class="logo-text">SportsTime</span>
|
||||
</a>
|
||||
<a href="#download" class="nav-cta">
|
||||
@@ -1119,12 +1115,12 @@
|
||||
<footer>
|
||||
<div class="footer-container">
|
||||
<a href="#" class="logo">
|
||||
<div class="logo-icon">🏟️</div>
|
||||
<img src="app-icon.png" alt="SportsTime" class="logo-icon">
|
||||
<span class="logo-text">SportsTime</span>
|
||||
</a>
|
||||
<div class="footer-links">
|
||||
<a href="https://88oakapps.com/privacy">Privacy Policy</a>
|
||||
<a href="https://88oakapps.com/terms">Terms of Service</a>
|
||||
<a href="privacy.html">Privacy Policy</a>
|
||||
<a href="eula.html">EULA</a>
|
||||
<a href="mailto:support@88oakapps.com">Contact</a>
|
||||
</div>
|
||||
<div class="footer-copy">
|
||||
|
||||
365
landing_page/privacy.html
Normal file
365
landing_page/privacy.html
Normal file
@@ -0,0 +1,365 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Privacy Policy - SportsTime</title>
|
||||
<meta name="description" content="SportsTime Privacy Policy - Learn how we collect, use, and protect your data.">
|
||||
|
||||
<!-- Fonts -->
|
||||
<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=Plus+Jakarta+Sans:ital,wght@0,400;0,500;0,600;0,700;0,800;1,400&display=swap" rel="stylesheet">
|
||||
|
||||
<style>
|
||||
:root {
|
||||
--navy-900: #0A2540;
|
||||
--navy-800: #0D3056;
|
||||
--navy-700: #134074;
|
||||
--navy-600: #1A5190;
|
||||
--sky-50: #F0F9FF;
|
||||
--sky-100: #E0F2FE;
|
||||
--sky-200: #BAE6FD;
|
||||
--gray-50: #F8FAFC;
|
||||
--gray-100: #F1F5F9;
|
||||
--gray-200: #E2E8F0;
|
||||
--gray-400: #94A3B8;
|
||||
--gray-500: #64748B;
|
||||
--gray-600: #475569;
|
||||
--gray-700: #334155;
|
||||
--white: #FFFFFF;
|
||||
--font-main: 'Plus Jakarta Sans', -apple-system, BlinkMacSystemFont, sans-serif;
|
||||
--shadow-sm: 0 1px 2px rgba(10, 37, 64, 0.04);
|
||||
--shadow-md: 0 4px 12px rgba(10, 37, 64, 0.08);
|
||||
--shadow-lg: 0 12px 40px rgba(10, 37, 64, 0.12);
|
||||
--ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
|
||||
}
|
||||
|
||||
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
html { scroll-behavior: smooth; }
|
||||
|
||||
body {
|
||||
font-family: var(--font-main);
|
||||
background: linear-gradient(180deg, var(--sky-100) 0%, var(--sky-50) 30%, var(--white) 100%);
|
||||
color: var(--navy-900);
|
||||
line-height: 1.6;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
nav {
|
||||
position: fixed;
|
||||
top: 0; left: 0; right: 0;
|
||||
z-index: 100;
|
||||
padding: 1rem 2rem;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
background: rgba(255, 255, 255, 0.9);
|
||||
backdrop-filter: blur(20px);
|
||||
-webkit-backdrop-filter: blur(20px);
|
||||
box-shadow: var(--shadow-sm);
|
||||
}
|
||||
|
||||
.logo {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.625rem;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.logo-icon {
|
||||
width: 42px; height: 42px;
|
||||
border-radius: 12px;
|
||||
object-fit: cover;
|
||||
box-shadow: var(--shadow-md);
|
||||
}
|
||||
|
||||
.logo-text {
|
||||
font-weight: 800;
|
||||
font-size: 1.375rem;
|
||||
letter-spacing: -0.02em;
|
||||
color: var(--navy-900);
|
||||
}
|
||||
|
||||
.nav-cta {
|
||||
display: flex; align-items: center; gap: 0.5rem;
|
||||
padding: 0.75rem 1.25rem;
|
||||
background: var(--navy-800);
|
||||
color: var(--white);
|
||||
text-decoration: none;
|
||||
font-weight: 600; font-size: 0.875rem;
|
||||
border-radius: 12px;
|
||||
transition: all 0.3s var(--ease-out-expo);
|
||||
box-shadow: var(--shadow-md);
|
||||
}
|
||||
|
||||
.nav-cta:hover {
|
||||
background: var(--navy-700);
|
||||
transform: translateY(-2px);
|
||||
box-shadow: var(--shadow-lg);
|
||||
}
|
||||
|
||||
.content {
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
padding: 7rem 2rem 4rem;
|
||||
}
|
||||
|
||||
.content h1 {
|
||||
font-size: clamp(2rem, 4vw, 2.75rem);
|
||||
font-weight: 800;
|
||||
color: var(--navy-900);
|
||||
letter-spacing: -0.02em;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.effective-date {
|
||||
font-size: 0.9375rem;
|
||||
color: var(--gray-500);
|
||||
margin-bottom: 2.5rem;
|
||||
}
|
||||
|
||||
.content h2 {
|
||||
font-size: 1.375rem;
|
||||
font-weight: 700;
|
||||
color: var(--navy-800);
|
||||
margin-top: 2.5rem;
|
||||
margin-bottom: 0.75rem;
|
||||
letter-spacing: -0.01em;
|
||||
}
|
||||
|
||||
.content h3 {
|
||||
font-size: 1.125rem;
|
||||
font-weight: 600;
|
||||
color: var(--navy-800);
|
||||
margin-top: 1.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.content p, .content li {
|
||||
font-size: 1rem;
|
||||
color: var(--gray-600);
|
||||
line-height: 1.8;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.content ul {
|
||||
padding-left: 1.5rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.content li {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.content a {
|
||||
color: var(--navy-700);
|
||||
text-decoration: underline;
|
||||
text-underline-offset: 2px;
|
||||
}
|
||||
|
||||
.content a:hover {
|
||||
color: var(--navy-600);
|
||||
}
|
||||
|
||||
.card {
|
||||
background: var(--white);
|
||||
border: 1px solid var(--sky-100);
|
||||
border-radius: 16px;
|
||||
padding: 1.5rem;
|
||||
margin: 1.5rem 0;
|
||||
box-shadow: var(--shadow-sm);
|
||||
}
|
||||
|
||||
.card p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
footer {
|
||||
padding: 2.5rem 2rem;
|
||||
background: var(--white);
|
||||
border-top: 1px solid var(--sky-100);
|
||||
}
|
||||
|
||||
.footer-container {
|
||||
max-width: 1100px;
|
||||
margin: 0 auto;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
gap: 1.5rem;
|
||||
}
|
||||
|
||||
.footer-links {
|
||||
display: flex;
|
||||
gap: 2rem;
|
||||
}
|
||||
|
||||
.footer-links a {
|
||||
color: var(--gray-500);
|
||||
text-decoration: none;
|
||||
font-size: 0.875rem;
|
||||
font-weight: 500;
|
||||
transition: color 0.2s ease;
|
||||
}
|
||||
|
||||
.footer-links a:hover { color: var(--navy-700); }
|
||||
|
||||
.footer-copy {
|
||||
color: var(--gray-400);
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
nav { padding: 1rem; }
|
||||
.logo-text { font-size: 1.125rem; }
|
||||
.content { padding: 5rem 1.5rem 3rem; }
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.footer-container { flex-direction: column; text-align: center; }
|
||||
.footer-links { gap: 1.5rem; }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<nav>
|
||||
<a href="index.html" class="logo">
|
||||
<img src="app-icon.png" alt="SportsTime" class="logo-icon">
|
||||
<span class="logo-text">SportsTime</span>
|
||||
</a>
|
||||
<a href="index.html" class="nav-cta">Home</a>
|
||||
</nav>
|
||||
|
||||
<div class="content">
|
||||
<h1>Privacy Policy</h1>
|
||||
<p class="effective-date">Effective Date: February 10, 2026</p>
|
||||
|
||||
<h2>1. Who We Are</h2>
|
||||
<p>SportsTime 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 SportsTime app ("the App").</p>
|
||||
|
||||
<h2>2. Data That Stays on Your Devices</h2>
|
||||
<p>The core of SportsTime — your trips, stadium visits, and preferences — 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>Trip data</strong> — trips you plan, save, and customize within the App</li>
|
||||
<li><strong>Stadium visits</strong> — visit logs you manually record</li>
|
||||
<li><strong>Preferences</strong> — sports selections, theme choices, and travel settings</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 personal data.</p>
|
||||
<p>Schedule data (game times, team rosters, stadium information) is stored in Apple CloudKit's public database and is accessible to all app users.</p>
|
||||
|
||||
<h2>3. Anonymous Analytics</h2>
|
||||
<p>We collect anonymous usage analytics to understand how people use SportsTime 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., planning a trip, viewing a schedule), and how the app is navigated</li>
|
||||
<li><strong>App preferences</strong> — selected sports, theme choices, and settings (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 trip data, stadium visits, or notes</li>
|
||||
<li>Your iCloud account information</li>
|
||||
<li>Your location</li>
|
||||
<li>Contacts, calendar, photos, or any other personal data</li>
|
||||
</ul>
|
||||
|
||||
<div class="card">
|
||||
<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>SportsTime 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 or personal data. 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>4. How We Use Your Information</h2>
|
||||
<ul>
|
||||
<li>To provide and improve the SportsTime 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>5. Subscription and Purchase Data</h2>
|
||||
<p>SportsTime offers optional paid subscriptions ("SportsTime Pro") 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>6. 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> — SportsTime 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>7. Third-Party Services</h2>
|
||||
<ul>
|
||||
<li><strong>Apple CloudKit:</strong> Used for syncing schedule data and (optionally) your personal data across devices. 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 MapKit:</strong> Used for route planning and map display. Subject to Apple's Privacy Policy.</li>
|
||||
</ul>
|
||||
|
||||
<h2>8. Data Storage and Security</h2>
|
||||
<p>Your personal 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>9. 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>10. 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 trips and visit data 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>Contact us to ask what data we hold about you (which is none, since analytics are anonymous)</li>
|
||||
</ul>
|
||||
|
||||
<h2>11. Children's Privacy</h2>
|
||||
<p>SportsTime 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>12. 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>13. Contact</h2>
|
||||
<p>If you have questions about this Privacy Policy or our privacy practices, contact us:</p>
|
||||
<div class="card">
|
||||
<p><strong>88 Oak Apps</strong><br>
|
||||
Email: <a href="mailto:support@88oakapps.com">support@88oakapps.com</a><br>
|
||||
Website: <a href="https://sportstime.88oakapps.com">sportstime.88oakapps.com</a></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
<div class="footer-container">
|
||||
<a href="index.html" class="logo">
|
||||
<img src="app-icon.png" alt="SportsTime" class="logo-icon">
|
||||
<span class="logo-text">SportsTime</span>
|
||||
</a>
|
||||
<div class="footer-links">
|
||||
<a href="privacy.html">Privacy Policy</a>
|
||||
<a href="eula.html">EULA</a>
|
||||
<a href="mailto:support@88oakapps.com">Contact</a>
|
||||
</div>
|
||||
<div class="footer-copy">
|
||||
© 2026 88 Oak Apps. All rights reserved.
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user