feat: add legal foundation — ToS, Privacy Policy, Risk Disclaimers (#815)
Implements minimum viable legal documentation for the Lightning payment-adjacent service per Whitestone Section 2.1.4. - Add /legal/tos, /legal/privacy, /legal/risk routes - Create templates with plain-language summaries + full legal text - Cover Lightning-specific risks: payment finality, force-closure, routing failure, regulatory uncertainty, money transmission - Add legal links to desktop MORE dropdown (with divider), mobile LEGAL nav section, and persistent footer on every page - Add CSS for legal page layout, warning blocks, data table, footer and dropdown divider — no inline styles in templates Fixes #815 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -49,6 +49,7 @@ from dashboard.routes.monitoring import router as monitoring_router
|
||||
from dashboard.routes.nexus import router as nexus_router
|
||||
from dashboard.routes.quests import router as quests_router
|
||||
from dashboard.routes.scorecards import router as scorecards_router
|
||||
from dashboard.routes.legal import router as legal_router
|
||||
from dashboard.routes.self_correction import router as self_correction_router
|
||||
from dashboard.routes.sovereignty_metrics import router as sovereignty_metrics_router
|
||||
from dashboard.routes.sovereignty_ws import router as sovereignty_ws_router
|
||||
@@ -700,6 +701,7 @@ app.include_router(sovereignty_metrics_router)
|
||||
app.include_router(sovereignty_ws_router)
|
||||
app.include_router(three_strike_router)
|
||||
app.include_router(self_correction_router)
|
||||
app.include_router(legal_router)
|
||||
|
||||
|
||||
@app.websocket("/ws")
|
||||
|
||||
33
src/dashboard/routes/legal.py
Normal file
33
src/dashboard/routes/legal.py
Normal file
@@ -0,0 +1,33 @@
|
||||
"""Legal documentation routes — ToS, Privacy Policy, Risk Disclaimers.
|
||||
|
||||
Part of the Whitestone legal foundation for the Lightning payment-adjacent service.
|
||||
"""
|
||||
|
||||
import logging
|
||||
|
||||
from fastapi import APIRouter, Request
|
||||
from fastapi.responses import HTMLResponse
|
||||
|
||||
from dashboard.templating import templates
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
router = APIRouter(prefix="/legal", tags=["legal"])
|
||||
|
||||
|
||||
@router.get("/tos", response_class=HTMLResponse)
|
||||
async def terms_of_service(request: Request) -> HTMLResponse:
|
||||
"""Terms of Service page."""
|
||||
return templates.TemplateResponse(request, "legal/tos.html", {})
|
||||
|
||||
|
||||
@router.get("/privacy", response_class=HTMLResponse)
|
||||
async def privacy_policy(request: Request) -> HTMLResponse:
|
||||
"""Privacy Policy page."""
|
||||
return templates.TemplateResponse(request, "legal/privacy.html", {})
|
||||
|
||||
|
||||
@router.get("/risk", response_class=HTMLResponse)
|
||||
async def risk_disclaimers(request: Request) -> HTMLResponse:
|
||||
"""Risk Disclaimers page."""
|
||||
return templates.TemplateResponse(request, "legal/risk.html", {})
|
||||
@@ -94,6 +94,10 @@
|
||||
<a href="/voice/settings" class="mc-test-link">VOICE SETTINGS</a>
|
||||
<a href="/mobile" class="mc-test-link" title="Mobile-optimized view">MOBILE</a>
|
||||
<a href="/mobile/local" class="mc-test-link" title="Local AI on iPhone">LOCAL AI</a>
|
||||
<div class="mc-dropdown-divider"></div>
|
||||
<a href="/legal/tos" class="mc-test-link">TERMS</a>
|
||||
<a href="/legal/privacy" class="mc-test-link">PRIVACY</a>
|
||||
<a href="/legal/risk" class="mc-test-link">RISK</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mc-nav-dropdown" id="notif-dropdown">
|
||||
@@ -153,6 +157,10 @@
|
||||
<a href="/voice/settings" class="mc-mobile-link">VOICE SETTINGS</a>
|
||||
<a href="/mobile" class="mc-mobile-link">MOBILE</a>
|
||||
<a href="/mobile/local" class="mc-mobile-link">LOCAL AI</a>
|
||||
<div class="mc-mobile-section-label">LEGAL</div>
|
||||
<a href="/legal/tos" class="mc-mobile-link">TERMS OF SERVICE</a>
|
||||
<a href="/legal/privacy" class="mc-mobile-link">PRIVACY POLICY</a>
|
||||
<a href="/legal/risk" class="mc-mobile-link">RISK DISCLAIMERS</a>
|
||||
<div class="mc-mobile-menu-footer">
|
||||
<button id="enable-notifications-mobile" class="mc-mobile-link mc-mobile-notif-btn">🔔 NOTIFICATIONS</button>
|
||||
</div>
|
||||
@@ -168,6 +176,14 @@
|
||||
{% block content %}{% endblock %}
|
||||
</main>
|
||||
|
||||
<footer class="mc-footer">
|
||||
<a href="/legal/tos" class="mc-footer-link">Terms</a>
|
||||
<span class="mc-footer-sep">·</span>
|
||||
<a href="/legal/privacy" class="mc-footer-link">Privacy</a>
|
||||
<span class="mc-footer-sep">·</span>
|
||||
<a href="/legal/risk" class="mc-footer-link">Risk Disclaimers</a>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
// ── Magical floating particles ──
|
||||
(function() {
|
||||
|
||||
200
src/dashboard/templates/legal/privacy.html
Normal file
200
src/dashboard/templates/legal/privacy.html
Normal file
@@ -0,0 +1,200 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}Privacy Policy — Timmy Time{% endblock %}
|
||||
{% block content %}
|
||||
<div class="legal-page">
|
||||
<div class="legal-header">
|
||||
<div class="legal-breadcrumb"><a href="/" class="mc-test-link">HOME</a> / LEGAL</div>
|
||||
<h1 class="legal-title">// PRIVACY POLICY</h1>
|
||||
<p class="legal-effective">Effective Date: March 2026 · Last Updated: March 2026</p>
|
||||
</div>
|
||||
|
||||
<div class="legal-toc card mc-panel">
|
||||
<div class="card-header mc-panel-header">// TABLE OF CONTENTS</div>
|
||||
<div class="card-body p-3">
|
||||
<ol class="legal-toc-list">
|
||||
<li><a href="#collect" class="mc-test-link">Data We Collect</a></li>
|
||||
<li><a href="#processing" class="mc-test-link">How We Process Your Data</a></li>
|
||||
<li><a href="#retention" class="mc-test-link">Data Retention</a></li>
|
||||
<li><a href="#rights" class="mc-test-link">Your Rights</a></li>
|
||||
<li><a href="#lightning" class="mc-test-link">Lightning Network Data</a></li>
|
||||
<li><a href="#third-party" class="mc-test-link">Third-Party Services</a></li>
|
||||
<li><a href="#security" class="mc-test-link">Security</a></li>
|
||||
<li><a href="#contact" class="mc-test-link">Contact</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="legal-summary card mc-panel">
|
||||
<div class="card-header mc-panel-header">// PLAIN LANGUAGE SUMMARY</div>
|
||||
<div class="card-body p-3">
|
||||
<p>Timmy Time runs primarily on your local machine. Most data never leaves your device. We collect minimal operational data. AI inference happens locally via Ollama. Lightning payment data is stored locally in a SQLite database. You can delete your data at any time.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mc-panel" id="collect">
|
||||
<div class="card-header mc-panel-header">// 1. DATA WE COLLECT</div>
|
||||
<div class="card-body p-3">
|
||||
<h4 class="legal-subhead">1.1 Data You Provide</h4>
|
||||
<ul>
|
||||
<li><strong>Chat messages</strong> — conversations with the AI assistant, stored locally</li>
|
||||
<li><strong>Tasks and work orders</strong> — task descriptions, priorities, and status</li>
|
||||
<li><strong>Voice input</strong> — audio processed locally via browser Web Speech API or local Piper TTS; not transmitted to cloud services</li>
|
||||
<li><strong>Configuration settings</strong> — preferences and integration tokens (stored in local config files)</li>
|
||||
</ul>
|
||||
<h4 class="legal-subhead">1.2 Automatically Collected Data</h4>
|
||||
<ul>
|
||||
<li><strong>System health metrics</strong> — CPU, memory, service status; stored locally</li>
|
||||
<li><strong>Request logs</strong> — HTTP request paths and status codes for debugging; retained locally</li>
|
||||
<li><strong>WebSocket session data</strong> — connection state; held in memory only, not persisted</li>
|
||||
</ul>
|
||||
<h4 class="legal-subhead">1.3 Data We Do NOT Collect</h4>
|
||||
<ul>
|
||||
<li>We do not collect personal identifying information beyond what you explicitly configure</li>
|
||||
<li>We do not use tracking cookies or analytics beacons</li>
|
||||
<li>We do not sell or share your data with advertisers</li>
|
||||
<li>AI inference is local-first — your queries go to Ollama running on your own hardware, not to cloud AI providers (unless you explicitly configure an external API key)</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mc-panel" id="processing">
|
||||
<div class="card-header mc-panel-header">// 2. HOW WE PROCESS YOUR DATA</div>
|
||||
<div class="card-body p-3">
|
||||
<p>Data processing purposes:</p>
|
||||
<ul>
|
||||
<li><strong>Service operation</strong> — delivering AI responses, managing tasks, executing automations</li>
|
||||
<li><strong>System integrity</strong> — health monitoring, error detection, rate limiting</li>
|
||||
<li><strong>Agent memory</strong> — contextual memory stored locally to improve AI continuity across sessions</li>
|
||||
<li><strong>Notifications</strong> — push notifications via configured integrations (Telegram, Discord) when you opt in</li>
|
||||
</ul>
|
||||
<p>Legal basis for processing: legitimate interest in operating the Service and fulfilling your requests. You control all data by controlling the self-hosted service.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mc-panel" id="retention">
|
||||
<div class="card-header mc-panel-header">// 3. DATA RETENTION</div>
|
||||
<div class="card-body p-3">
|
||||
<table class="legal-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Data Type</th>
|
||||
<th>Retention Period</th>
|
||||
<th>Location</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Chat messages</td>
|
||||
<td>Until manually deleted</td>
|
||||
<td>Local SQLite database</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Task records</td>
|
||||
<td>Until manually deleted</td>
|
||||
<td>Local SQLite database</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Lightning payment records</td>
|
||||
<td>Until manually deleted</td>
|
||||
<td>Local SQLite database</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Request logs</td>
|
||||
<td>Rotating 7-day window</td>
|
||||
<td>Local log files</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>WebSocket session state</td>
|
||||
<td>Duration of session only</td>
|
||||
<td>In-memory, never persisted</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Agent memory / semantic index</td>
|
||||
<td>Until manually cleared</td>
|
||||
<td>Local vector store</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>You can delete all local data by removing the application data directory. Since the service is self-hosted, you have full control.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mc-panel" id="rights">
|
||||
<div class="card-header mc-panel-header">// 4. YOUR RIGHTS</div>
|
||||
<div class="card-body p-3">
|
||||
<p>As the operator of a self-hosted service, you have complete rights over your data:</p>
|
||||
<ul>
|
||||
<li><strong>Access</strong> — all data is stored locally in SQLite; you can inspect it directly</li>
|
||||
<li><strong>Deletion</strong> — delete records via the dashboard UI or directly from the database</li>
|
||||
<li><strong>Export</strong> — data is in standard SQLite format; export tools are available via the DB Explorer</li>
|
||||
<li><strong>Correction</strong> — edit any stored record directly</li>
|
||||
<li><strong>Portability</strong> — your data is local; move it with you by copying the database files</li>
|
||||
</ul>
|
||||
<p>If you use cloud-connected features (external API keys, Telegram/Discord bots), those third-party services have their own privacy policies which apply separately.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mc-panel" id="lightning">
|
||||
<div class="card-header mc-panel-header">// 5. LIGHTNING NETWORK DATA</div>
|
||||
<div class="card-body p-3">
|
||||
<div class="legal-warning">
|
||||
<strong>⚡ LIGHTNING PRIVACY CONSIDERATIONS</strong><br>
|
||||
Bitcoin Lightning Network transactions have limited on-chain privacy. Payment hashes, channel identifiers, and routing information may be visible to channel peers and routing nodes.
|
||||
</div>
|
||||
<p>Lightning-specific data handling:</p>
|
||||
<ul>
|
||||
<li><strong>Payment records</strong> — invoices, payment hashes, and amounts stored locally in SQLite</li>
|
||||
<li><strong>Node identity</strong> — your Lightning node public key is visible to channel peers by design</li>
|
||||
<li><strong>Channel data</strong> — channel opens and closes are recorded on the Bitcoin blockchain (public)</li>
|
||||
<li><strong>Routing information</strong> — intermediate routing nodes can see payment amounts and timing (not destination)</li>
|
||||
</ul>
|
||||
<p>We do not share your Lightning payment data with third parties. Local storage only.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mc-panel" id="third-party">
|
||||
<div class="card-header mc-panel-header">// 6. THIRD-PARTY SERVICES</div>
|
||||
<div class="card-body p-3">
|
||||
<p>When you configure optional integrations, data flows to those services under their own privacy policies:</p>
|
||||
<ul>
|
||||
<li><strong>Telegram</strong> — messages sent via Telegram bot are processed by Telegram's servers</li>
|
||||
<li><strong>Discord</strong> — messages sent via Discord bot are processed by Discord's servers</li>
|
||||
<li><strong>Nostr</strong> — Nostr events are broadcast to public relays and are publicly visible by design</li>
|
||||
<li><strong>Ollama</strong> — when using a remote Ollama instance, your prompts are sent to that server</li>
|
||||
<li><strong>Anthropic Claude API</strong> — if configured as LLM fallback, prompts are subject to Anthropic's privacy policy</li>
|
||||
</ul>
|
||||
<p>All third-party integrations are opt-in and require explicit configuration. None are enabled by default.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mc-panel" id="security">
|
||||
<div class="card-header mc-panel-header">// 7. SECURITY</div>
|
||||
<div class="card-body p-3">
|
||||
<p>Security measures in place:</p>
|
||||
<ul>
|
||||
<li>CSRF protection on all state-changing requests</li>
|
||||
<li>Rate limiting on API endpoints</li>
|
||||
<li>Security headers (X-Frame-Options, X-Content-Type-Options, CSP)</li>
|
||||
<li>No hardcoded secrets — all credentials via environment variables</li>
|
||||
<li>XSS prevention — DOMPurify on all rendered user content</li>
|
||||
</ul>
|
||||
<p>As a self-hosted service, network security (TLS, firewall) is your responsibility. We strongly recommend running behind a reverse proxy with TLS if the service is accessible beyond localhost.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mc-panel" id="contact">
|
||||
<div class="card-header mc-panel-header">// 8. CONTACT</div>
|
||||
<div class="card-body p-3">
|
||||
<p>Privacy questions or data deletion requests: file an issue in the project repository or contact the service operator directly. Since this is self-hosted software, the operator is typically you.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="legal-footer-links">
|
||||
<a href="/legal/tos" class="mc-test-link">Terms of Service</a>
|
||||
<span class="legal-sep">·</span>
|
||||
<a href="/legal/risk" class="mc-test-link">Risk Disclaimers</a>
|
||||
<span class="legal-sep">·</span>
|
||||
<a href="/" class="mc-test-link">Home</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
137
src/dashboard/templates/legal/risk.html
Normal file
137
src/dashboard/templates/legal/risk.html
Normal file
@@ -0,0 +1,137 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}Risk Disclaimers — Timmy Time{% endblock %}
|
||||
{% block content %}
|
||||
<div class="legal-page">
|
||||
<div class="legal-header">
|
||||
<div class="legal-breadcrumb"><a href="/" class="mc-test-link">HOME</a> / LEGAL</div>
|
||||
<h1 class="legal-title">// RISK DISCLAIMERS</h1>
|
||||
<p class="legal-effective">Effective Date: March 2026 · Last Updated: March 2026</p>
|
||||
</div>
|
||||
|
||||
<div class="legal-summary card mc-panel legal-risk-banner">
|
||||
<div class="card-header mc-panel-header">// ⚠ READ BEFORE USING LIGHTNING PAYMENTS</div>
|
||||
<div class="card-body p-3">
|
||||
<p><strong>Timmy Time includes optional Lightning Network payment functionality. This is experimental software. You can lose money. By using payment features, you acknowledge all risks described on this page.</strong></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mc-panel" id="volatility">
|
||||
<div class="card-header mc-panel-header">// CRYPTOCURRENCY VOLATILITY RISK</div>
|
||||
<div class="card-body p-3">
|
||||
<p>Bitcoin and satoshis (the units used in Lightning payments) are highly volatile assets:</p>
|
||||
<ul>
|
||||
<li>The value of Bitcoin can decrease by 50% or more in a short period</li>
|
||||
<li>Satoshi amounts in Lightning channels may be worth significantly less in fiat terms by the time you close channels</li>
|
||||
<li>No central bank, government, or institution guarantees the value of Bitcoin</li>
|
||||
<li>Past performance of Bitcoin price is not indicative of future results</li>
|
||||
<li>You may receive no return on any Bitcoin held in payment channels</li>
|
||||
</ul>
|
||||
<p class="legal-callout">Only put into Lightning channels what you can afford to lose entirely.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mc-panel" id="experimental">
|
||||
<div class="card-header mc-panel-header">// EXPERIMENTAL TECHNOLOGY RISK</div>
|
||||
<div class="card-body p-3">
|
||||
<p>The Lightning Network and this software are experimental:</p>
|
||||
<ul>
|
||||
<li><strong>Software bugs</strong> — Timmy Time is pre-production software. Bugs may cause unintended payment behavior, data loss, or service interruptions</li>
|
||||
<li><strong>Protocol risk</strong> — Lightning Network protocols are under active development; implementations may have bugs, including security vulnerabilities</li>
|
||||
<li><strong>AI agent actions</strong> — AI agents and automations may take unintended actions. Review all agent-initiated payments before confirming</li>
|
||||
<li><strong>No audit</strong> — this software has not been independently security audited</li>
|
||||
<li><strong>Dependency risk</strong> — third-party libraries, Ollama, and connected services may have their own vulnerabilities</li>
|
||||
</ul>
|
||||
<p class="legal-callout">Treat all payment functionality as beta. Do not use for high-value transactions.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mc-panel" id="lightning-specific">
|
||||
<div class="card-header mc-panel-header">// LIGHTNING NETWORK SPECIFIC RISKS</div>
|
||||
<div class="card-body p-3">
|
||||
<h4 class="legal-subhead">Payment Finality</h4>
|
||||
<p>Lightning payments that successfully complete are <strong>irreversible</strong>. There is no chargeback mechanism, no dispute process, and no third party who can reverse a settled payment. Verify all payment details before confirming.</p>
|
||||
|
||||
<h4 class="legal-subhead">Channel Force-Closure Risk</h4>
|
||||
<p>Lightning channels can be force-closed under certain conditions:</p>
|
||||
<ul>
|
||||
<li>If your Lightning node goes offline for an extended period, your counterparty may force-close the channel</li>
|
||||
<li>Force-closure requires an on-chain Bitcoin transaction with associated mining fees</li>
|
||||
<li>Force-closure locks your funds for a time-lock period (typically 144–2016 blocks)</li>
|
||||
<li>During high Bitcoin network congestion, on-chain fees to recover funds may be substantial</li>
|
||||
</ul>
|
||||
|
||||
<h4 class="legal-subhead">Routing Failure Risk</h4>
|
||||
<p>Lightning payments can fail to route:</p>
|
||||
<ul>
|
||||
<li>Insufficient liquidity in the payment path means your payment may fail</li>
|
||||
<li>Failed payments are not charged, but repeated failures indicate a network or balance issue</li>
|
||||
<li>Large payments are harder to route than small ones due to channel capacity constraints</li>
|
||||
</ul>
|
||||
|
||||
<h4 class="legal-subhead">Liquidity Risk</h4>
|
||||
<ul>
|
||||
<li>Inbound and outbound liquidity must be actively managed</li>
|
||||
<li>You cannot receive payments if you have no inbound capacity</li>
|
||||
<li>You cannot send payments if you have no outbound capacity</li>
|
||||
<li>Channel rebalancing has costs (routing fees or on-chain fees)</li>
|
||||
</ul>
|
||||
|
||||
<h4 class="legal-subhead">Watchtower Risk</h4>
|
||||
<p>Without an active watchtower service, you are vulnerable to channel counterparties broadcasting outdated channel states while your node is offline. This could result in loss of funds.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mc-panel" id="regulatory">
|
||||
<div class="card-header mc-panel-header">// REGULATORY & LEGAL RISK</div>
|
||||
<div class="card-body p-3">
|
||||
<p>The legal and regulatory status of Lightning Network payments is uncertain:</p>
|
||||
<ul>
|
||||
<li><strong>Money transmission laws</strong> — in some jurisdictions, routing Lightning payments may constitute unlicensed money transmission. Consult a lawyer before running a routing node</li>
|
||||
<li><strong>Tax obligations</strong> — cryptocurrency transactions may be taxable events in your jurisdiction. You are solely responsible for your tax obligations</li>
|
||||
<li><strong>Regulatory change</strong> — cryptocurrency regulations are evolving rapidly. Actions that are legal today may become restricted or prohibited</li>
|
||||
<li><strong>Sanctions</strong> — you are responsible for ensuring your Lightning payments do not violate applicable sanctions laws</li>
|
||||
<li><strong>KYC/AML</strong> — this software does not perform identity verification. You are responsible for your own compliance obligations</li>
|
||||
</ul>
|
||||
<p class="legal-callout">Consult a qualified legal professional before using Lightning payments for commercial purposes.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mc-panel" id="no-guarantees">
|
||||
<div class="card-header mc-panel-header">// NO GUARANTEED OUTCOMES</div>
|
||||
<div class="card-body p-3">
|
||||
<p>We make no guarantees about:</p>
|
||||
<ul>
|
||||
<li>The continuous availability of the Service or any connected node</li>
|
||||
<li>The successful routing of any specific payment</li>
|
||||
<li>The recovery of funds from a force-closed channel</li>
|
||||
<li>The accuracy, completeness, or reliability of AI-generated responses</li>
|
||||
<li>The outcome of any automation or agent-initiated action</li>
|
||||
<li>The future value of any Bitcoin or satoshis</li>
|
||||
<li>Compatibility with future versions of the Lightning Network protocol</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mc-panel" id="acknowledgment">
|
||||
<div class="card-header mc-panel-header">// RISK ACKNOWLEDGMENT</div>
|
||||
<div class="card-body p-3">
|
||||
<p>By using the Lightning payment features of Timmy Time, you acknowledge that:</p>
|
||||
<ol>
|
||||
<li>You have read and understood all risks described on this page</li>
|
||||
<li>You are using the Service voluntarily and at your own risk</li>
|
||||
<li>You have conducted your own due diligence</li>
|
||||
<li>You will not hold Timmy Time or its operators liable for any losses</li>
|
||||
<li>You will comply with all applicable laws and regulations in your jurisdiction</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="legal-footer-links">
|
||||
<a href="/legal/tos" class="mc-test-link">Terms of Service</a>
|
||||
<span class="legal-sep">·</span>
|
||||
<a href="/legal/privacy" class="mc-test-link">Privacy Policy</a>
|
||||
<span class="legal-sep">·</span>
|
||||
<a href="/" class="mc-test-link">Home</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
146
src/dashboard/templates/legal/tos.html
Normal file
146
src/dashboard/templates/legal/tos.html
Normal file
@@ -0,0 +1,146 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}Terms of Service — Timmy Time{% endblock %}
|
||||
{% block content %}
|
||||
<div class="legal-page">
|
||||
<div class="legal-header">
|
||||
<div class="legal-breadcrumb"><a href="/" class="mc-test-link">HOME</a> / LEGAL</div>
|
||||
<h1 class="legal-title">// TERMS OF SERVICE</h1>
|
||||
<p class="legal-effective">Effective Date: March 2026 · Last Updated: March 2026</p>
|
||||
</div>
|
||||
|
||||
<div class="legal-toc card mc-panel">
|
||||
<div class="card-header mc-panel-header">// TABLE OF CONTENTS</div>
|
||||
<div class="card-body p-3">
|
||||
<ol class="legal-toc-list">
|
||||
<li><a href="#service" class="mc-test-link">Service Description</a></li>
|
||||
<li><a href="#eligibility" class="mc-test-link">Eligibility</a></li>
|
||||
<li><a href="#payments" class="mc-test-link">Payment Terms & Lightning Finality</a></li>
|
||||
<li><a href="#liability" class="mc-test-link">Limitation of Liability</a></li>
|
||||
<li><a href="#disputes" class="mc-test-link">Dispute Resolution</a></li>
|
||||
<li><a href="#termination" class="mc-test-link">Termination</a></li>
|
||||
<li><a href="#governing" class="mc-test-link">Governing Law</a></li>
|
||||
<li><a href="#changes" class="mc-test-link">Changes to Terms</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="legal-summary card mc-panel">
|
||||
<div class="card-header mc-panel-header">// PLAIN LANGUAGE SUMMARY</div>
|
||||
<div class="card-body p-3">
|
||||
<p>Timmy Time is an AI assistant and automation dashboard. If you use Lightning Network payments through this service, those payments are <strong>final and cannot be reversed</strong>. We are not a bank, broker, or financial institution. Use this service at your own risk. By using Timmy Time you agree to these terms.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mc-panel" id="service">
|
||||
<div class="card-header mc-panel-header">// 1. SERVICE DESCRIPTION</div>
|
||||
<div class="card-body p-3">
|
||||
<p>Timmy Time ("Service," "we," "us") provides an AI-powered personal productivity and automation dashboard. The Service may include:</p>
|
||||
<ul>
|
||||
<li>AI chat and task management tools</li>
|
||||
<li>Agent orchestration and workflow automation</li>
|
||||
<li>Optional Lightning Network payment functionality for in-app micropayments</li>
|
||||
<li>Integration with third-party services (Ollama, Nostr, Telegram, Discord)</li>
|
||||
</ul>
|
||||
<p>The Service is provided on an "as-is" and "as-available" basis. Features are experimental and subject to change without notice.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mc-panel" id="eligibility">
|
||||
<div class="card-header mc-panel-header">// 2. ELIGIBILITY</div>
|
||||
<div class="card-body p-3">
|
||||
<p>You must be at least 18 years of age to use this Service. By using the Service, you represent and warrant that:</p>
|
||||
<ul>
|
||||
<li>You are of legal age in your jurisdiction to enter into binding contracts</li>
|
||||
<li>Your use of the Service does not violate any applicable law or regulation in your jurisdiction</li>
|
||||
<li>You are not located in a jurisdiction where cryptocurrency or Lightning Network payments are prohibited</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mc-panel" id="payments">
|
||||
<div class="card-header mc-panel-header">// 3. PAYMENT TERMS & LIGHTNING FINALITY</div>
|
||||
<div class="card-body p-3">
|
||||
<div class="legal-warning">
|
||||
<strong>⚡ IMPORTANT — LIGHTNING PAYMENT FINALITY</strong><br>
|
||||
Lightning Network payments are final and irreversible by design. Once a Lightning payment is sent and settled, it <strong>cannot be reversed, recalled, or charged back</strong>. There are no refunds on settled Lightning payments except at our sole discretion.
|
||||
</div>
|
||||
<h4 class="legal-subhead">3.1 Payment Processing</h4>
|
||||
<p>All payments processed through this Service use the Bitcoin Lightning Network. You are solely responsible for:</p>
|
||||
<ul>
|
||||
<li>Verifying payment amounts before confirming</li>
|
||||
<li>Ensuring you have sufficient Lightning channel capacity</li>
|
||||
<li>Understanding that routing fees may apply</li>
|
||||
</ul>
|
||||
<h4 class="legal-subhead">3.2 No Chargebacks</h4>
|
||||
<p>Unlike credit card payments, Lightning Network payments do not support chargebacks. By initiating a Lightning payment, you acknowledge and accept the irreversibility of that payment.</p>
|
||||
<h4 class="legal-subhead">3.3 Regulatory Uncertainty</h4>
|
||||
<p>The regulatory status of Lightning Network payments varies by jurisdiction and is subject to ongoing change. You are responsible for determining whether your use of Lightning payments complies with applicable laws in your jurisdiction. We are not a licensed money transmitter, exchange, or financial services provider.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mc-panel" id="liability">
|
||||
<div class="card-header mc-panel-header">// 4. LIMITATION OF LIABILITY</div>
|
||||
<div class="card-body p-3">
|
||||
<div class="legal-warning">
|
||||
<strong>DISCLAIMER OF WARRANTIES</strong><br>
|
||||
THE SERVICE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. WE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
|
||||
</div>
|
||||
<p>TO THE MAXIMUM EXTENT PERMITTED BY LAW:</p>
|
||||
<ul>
|
||||
<li>We are not liable for any lost profits, lost data, or indirect, incidental, special, consequential, or punitive damages</li>
|
||||
<li>Our total aggregate liability shall not exceed the greater of $50 USD or amounts paid by you in the preceding 30 days</li>
|
||||
<li>We are not liable for losses arising from Lightning channel force-closures, routing failures, or Bitcoin network congestion</li>
|
||||
<li>We are not liable for actions taken by AI agents or automation workflows</li>
|
||||
<li>We are not liable for losses from market volatility or cryptocurrency price changes</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mc-panel" id="disputes">
|
||||
<div class="card-header mc-panel-header">// 5. DISPUTE RESOLUTION</div>
|
||||
<div class="card-body p-3">
|
||||
<h4 class="legal-subhead">5.1 Informal Resolution</h4>
|
||||
<p>Before initiating formal proceedings, please contact us to attempt informal resolution. Most disputes can be resolved quickly through direct communication.</p>
|
||||
<h4 class="legal-subhead">5.2 Binding Arbitration</h4>
|
||||
<p>Any dispute not resolved informally within 30 days shall be resolved by binding arbitration under the rules of the American Arbitration Association (AAA). Arbitration shall be conducted on an individual basis — no class actions.</p>
|
||||
<h4 class="legal-subhead">5.3 Exceptions</h4>
|
||||
<p>Either party may seek injunctive relief in a court of competent jurisdiction to prevent irreparable harm pending arbitration.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mc-panel" id="termination">
|
||||
<div class="card-header mc-panel-header">// 6. TERMINATION</div>
|
||||
<div class="card-body p-3">
|
||||
<p>We reserve the right to suspend or terminate your access to the Service at any time, with or without cause, with or without notice. You may stop using the Service at any time.</p>
|
||||
<p>Upon termination:</p>
|
||||
<ul>
|
||||
<li>Your right to access the Service immediately ceases</li>
|
||||
<li>Sections on Limitation of Liability, Dispute Resolution, and Governing Law survive termination</li>
|
||||
<li>We are not liable for any Lightning funds in-flight at the time of termination; ensure channels are settled before discontinuing use</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mc-panel" id="governing">
|
||||
<div class="card-header mc-panel-header">// 7. GOVERNING LAW</div>
|
||||
<div class="card-body p-3">
|
||||
<p>These Terms are governed by the laws of the applicable jurisdiction without regard to conflict-of-law principles. You consent to the personal jurisdiction of courts located in that jurisdiction for any matters not subject to arbitration.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card mc-panel" id="changes">
|
||||
<div class="card-header mc-panel-header">// 8. CHANGES TO TERMS</div>
|
||||
<div class="card-body p-3">
|
||||
<p>We may modify these Terms at any time by posting updated terms on this page. Material changes will be communicated via the dashboard notification system. Continued use of the Service after changes take effect constitutes acceptance of the revised Terms.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="legal-footer-links">
|
||||
<a href="/legal/privacy" class="mc-test-link">Privacy Policy</a>
|
||||
<span class="legal-sep">·</span>
|
||||
<a href="/legal/risk" class="mc-test-link">Risk Disclaimers</a>
|
||||
<span class="legal-sep">·</span>
|
||||
<a href="/" class="mc-test-link">Home</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -2902,3 +2902,176 @@
|
||||
padding-top: 0.5rem;
|
||||
border-top: 1px solid var(--border);
|
||||
}
|
||||
|
||||
/* ═══════════════════════════════════════════════════════════════
|
||||
Legal pages — ToS, Privacy Policy, Risk Disclaimers
|
||||
═══════════════════════════════════════════════════════════════ */
|
||||
|
||||
.legal-page {
|
||||
max-width: 860px;
|
||||
margin: 0 auto;
|
||||
padding: 1.5rem 1rem 3rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.legal-header {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.legal-breadcrumb {
|
||||
font-size: 0.75rem;
|
||||
color: var(--text-dim);
|
||||
margin-bottom: 0.5rem;
|
||||
letter-spacing: 0.05em;
|
||||
}
|
||||
|
||||
.legal-title {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
color: var(--purple);
|
||||
letter-spacing: 0.1em;
|
||||
margin-bottom: 0.25rem;
|
||||
}
|
||||
|
||||
.legal-effective {
|
||||
font-size: 0.78rem;
|
||||
color: var(--text-dim);
|
||||
}
|
||||
|
||||
.legal-toc-list {
|
||||
margin: 0;
|
||||
padding-left: 1.25rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.25rem;
|
||||
}
|
||||
|
||||
.legal-toc-list li {
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
|
||||
.legal-warning {
|
||||
background: rgba(249, 115, 22, 0.08);
|
||||
border: 1px solid rgba(249, 115, 22, 0.35);
|
||||
border-radius: 4px;
|
||||
padding: 0.75rem 1rem;
|
||||
margin-bottom: 1rem;
|
||||
font-size: 0.85rem;
|
||||
color: var(--text);
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.legal-risk-banner .card-header {
|
||||
color: var(--orange);
|
||||
}
|
||||
|
||||
.legal-subhead {
|
||||
font-size: 0.85rem;
|
||||
font-weight: 700;
|
||||
color: var(--text-bright);
|
||||
margin: 1rem 0 0.4rem;
|
||||
letter-spacing: 0.04em;
|
||||
}
|
||||
|
||||
.legal-callout {
|
||||
background: rgba(168, 85, 247, 0.08);
|
||||
border-left: 3px solid var(--purple);
|
||||
padding: 0.5rem 0.75rem;
|
||||
margin-top: 0.75rem;
|
||||
font-size: 0.85rem;
|
||||
color: var(--text);
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.legal-table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
font-size: 0.82rem;
|
||||
margin: 0.5rem 0;
|
||||
}
|
||||
|
||||
.legal-table th {
|
||||
text-align: left;
|
||||
padding: 0.5rem 0.75rem;
|
||||
background: rgba(168, 85, 247, 0.1);
|
||||
color: var(--text-bright);
|
||||
border-bottom: 1px solid var(--border);
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.04em;
|
||||
}
|
||||
|
||||
.legal-table td {
|
||||
padding: 0.45rem 0.75rem;
|
||||
border-bottom: 1px solid rgba(255,255,255,0.04);
|
||||
color: var(--text);
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.legal-table tr:last-child td {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.legal-footer-links {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
flex-wrap: wrap;
|
||||
font-size: 0.8rem;
|
||||
padding-top: 0.5rem;
|
||||
}
|
||||
|
||||
.legal-sep {
|
||||
color: var(--text-dim);
|
||||
}
|
||||
|
||||
/* Dropdown divider */
|
||||
.mc-dropdown-divider {
|
||||
height: 1px;
|
||||
background: var(--border);
|
||||
margin: 0.25rem 0;
|
||||
}
|
||||
|
||||
/* ── Footer ── */
|
||||
.mc-footer {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 0.4rem;
|
||||
padding: 0.75rem 1rem;
|
||||
font-size: 0.72rem;
|
||||
color: var(--text-dim);
|
||||
border-top: 1px solid var(--border);
|
||||
background: var(--bg-deep);
|
||||
letter-spacing: 0.06em;
|
||||
}
|
||||
|
||||
.mc-footer-link {
|
||||
color: var(--text-dim);
|
||||
text-decoration: none;
|
||||
transition: color 0.15s;
|
||||
}
|
||||
|
||||
.mc-footer-link:hover {
|
||||
color: var(--purple);
|
||||
}
|
||||
|
||||
.mc-footer-sep {
|
||||
color: var(--border);
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
.legal-page {
|
||||
padding: 1rem 0.75rem 2rem;
|
||||
}
|
||||
|
||||
.legal-table {
|
||||
font-size: 0.75rem;
|
||||
}
|
||||
|
||||
.legal-table th,
|
||||
.legal-table td {
|
||||
padding: 0.4rem 0.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user