feat: add Terms of Service page

This commit is contained in:
M1 2026-03-18 03:52:58 +04:00
parent 705073b508
commit 7db2889960
3 changed files with 113 additions and 1 deletions

View File

@ -239,4 +239,5 @@ export const dashboard = new Elysia()
// Docs // Docs
.get("/docs", () => html("docs", {})) .get("/docs", () => html("docs", {}))
.get("/privacy", () => html("privacy", {})); .get("/privacy", () => html("privacy", {}))
.get("/tos", () => html("tos", {}));

View File

@ -124,6 +124,7 @@
<nav class="hidden md:flex items-center gap-7 text-sm text-gray-400"> <nav class="hidden md:flex items-center gap-7 text-sm text-gray-400">
<a href="/docs" class="hover:text-gray-200 transition-colors">Docs</a> <a href="/docs" class="hover:text-gray-200 transition-colors">Docs</a>
<a href="/privacy" class="hover:text-gray-200 transition-colors">Privacy</a> <a href="/privacy" class="hover:text-gray-200 transition-colors">Privacy</a>
<a href="/tos" class="hover:text-gray-200 transition-colors">Terms</a>
<a href="#pricing" class="hover:text-gray-200 transition-colors">Pricing</a> <a href="#pricing" class="hover:text-gray-200 transition-colors">Pricing</a>
</nav> </nav>
<div class="flex items-center gap-3"> <div class="flex items-center gap-3">
@ -585,6 +586,7 @@
<a href="/dashboard" class="hover:text-gray-300 transition-colors">Dashboard</a> <a href="/dashboard" class="hover:text-gray-300 transition-colors">Dashboard</a>
<a href="/docs" class="hover:text-gray-300 transition-colors">Docs</a> <a href="/docs" class="hover:text-gray-300 transition-colors">Docs</a>
<a href="/privacy" class="hover:text-gray-300 transition-colors">Privacy</a> <a href="/privacy" class="hover:text-gray-300 transition-colors">Privacy</a>
<a href="/tos" class="hover:text-gray-300 transition-colors">Terms</a>
<a href="#pricing" class="hover:text-gray-300 transition-colors">Pricing</a> <a href="#pricing" class="hover:text-gray-300 transition-colors">Pricing</a>
</nav> </nav>
</div> </div>

109
apps/web/src/views/tos.ejs Normal file
View File

@ -0,0 +1,109 @@
<!DOCTYPE html>
<html lang="en" class="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PingQL — Terms of Service</title>
<link rel="stylesheet" href="/dashboard/tailwind.css?v=<%= it.cssHash %>">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
</head>
<body class="bg-[#0a0a0a] text-gray-100 font-sans antialiased">
<header class="fixed top-0 left-0 right-0 z-50 border-b border-gray-800/60 bg-[#0a0a0a]/80 backdrop-blur-md">
<div class="max-w-6xl mx-auto px-6 py-4 flex items-center justify-between">
<a href="/" class="font-mono text-lg font-bold tracking-tight">Ping<span class="text-brand">QL</span></a>
<nav class="flex items-center gap-5 text-sm text-gray-400">
<a href="/docs" class="hover:text-gray-200 transition-colors">Docs</a>
<a href="/privacy" class="hover:text-gray-200 transition-colors">Privacy</a>
<a href="/tos" class="text-gray-200">Terms</a>
<a href="/dashboard" class="hover:text-gray-200 transition-colors">Sign in</a>
</nav>
</div>
</header>
<main class="max-w-3xl mx-auto px-6 pt-32 pb-24">
<h1 class="text-3xl font-bold tracking-tight mb-2">Terms of Service</h1>
<p class="text-gray-500 text-sm mb-12">Last updated: March 2026</p>
<div class="space-y-10 text-gray-300 leading-relaxed">
<section>
<h2 class="text-lg font-semibold text-white mb-3">1. Acceptance</h2>
<p>By creating an account or using PingQL, you agree to these terms. If you don't agree, don't use the service.</p>
</section>
<section>
<h2 class="text-lg font-semibold text-white mb-3">2. Permitted Use</h2>
<p>PingQL is a developer tool for uptime monitoring. You may use it to monitor URLs and endpoints that you own or have explicit permission to monitor. That's it.</p>
</section>
<section>
<h2 class="text-lg font-semibold text-white mb-3">3. Prohibited Use</h2>
<p class="mb-3">You may not use PingQL to:</p>
<ul class="space-y-2 list-none">
<li class="flex gap-3"><span class="text-red-400 shrink-0 font-mono">✕</span> Monitor URLs you don't own or aren't authorized to access</li>
<li class="flex gap-3"><span class="text-red-400 shrink-0 font-mono">✕</span> Conduct or facilitate any illegal activity</li>
<li class="flex gap-3"><span class="text-red-400 shrink-0 font-mono">✕</span> Launch denial-of-service attacks or intentionally overload third-party systems</li>
<li class="flex gap-3"><span class="text-red-400 shrink-0 font-mono">✕</span> Create multiple accounts to circumvent free tier limits</li>
<li class="flex gap-3"><span class="text-red-400 shrink-0 font-mono">✕</span> Scrape, crawl, or harvest data from third-party services at scale</li>
<li class="flex gap-3"><span class="text-red-400 shrink-0 font-mono">✕</span> Distribute, resell, or sublicense access to the service without permission</li>
<li class="flex gap-3"><span class="text-red-400 shrink-0 font-mono">✕</span> Attempt to reverse engineer, bypass, or compromise the platform's security</li>
</ul>
</section>
<section>
<h2 class="text-lg font-semibold text-white mb-3">4. Account Responsibility</h2>
<p>Your account key is your credential. Keep it safe — you're responsible for everything done with it. One account per person or organization. If we detect accounts created solely to abuse free tier limits, we'll terminate them without notice.</p>
</section>
<section>
<h2 class="text-lg font-semibold text-white mb-3">5. Fair Use</h2>
<p>Free tier limits exist to make the service sustainable. Using automation, scripts, or any other method to work around them is a violation of these terms and grounds for immediate termination.</p>
</section>
<section>
<h2 class="text-lg font-semibold text-white mb-3">6. Termination</h2>
<p>We may suspend or terminate your account at any time, with or without notice, if we believe you're violating these terms. Given the privacy-first nature of the service, we can't always investigate — abuse that is detectable will result in termination.</p>
</section>
<section>
<h2 class="text-lg font-semibold text-white mb-3">7. Service Availability</h2>
<p>PingQL is provided as-is. We aim for high availability but make no guarantees of uptime, data retention, or uninterrupted service. Don't rely solely on PingQL for mission-critical monitoring.</p>
</section>
<section>
<h2 class="text-lg font-semibold text-white mb-3">8. Liability</h2>
<p>To the maximum extent permitted by law, PingQL is not liable for any indirect, incidental, or consequential damages arising from your use of the service. Your use is at your own risk.</p>
</section>
<section>
<h2 class="text-lg font-semibold text-white mb-3">9. Changes</h2>
<p>We may update these terms from time to time. Continued use of the service after changes are posted constitutes acceptance of the new terms.</p>
</section>
<section>
<h2 class="text-lg font-semibold text-white mb-3">10. Contact</h2>
<p>Questions? Reach out via the contact information on our <a href="/privacy" class="text-brand hover:underline">Privacy page</a>.</p>
</section>
</div>
</main>
<footer class="border-t border-gray-800/50 py-12 px-6">
<div class="max-w-5xl mx-auto flex flex-col sm:flex-row items-center justify-between gap-6">
<div class="flex items-center gap-6">
<a href="/" class="text-lg font-bold tracking-tight font-mono">Ping<span class="text-brand">QL</span></a>
<nav class="flex items-center gap-5 text-sm text-gray-500">
<a href="/dashboard" class="hover:text-gray-300 transition-colors">Dashboard</a>
<a href="/docs" class="hover:text-gray-300 transition-colors">Docs</a>
<a href="/privacy" class="hover:text-gray-300 transition-colors">Privacy</a>
<a href="/tos" class="hover:text-gray-300 transition-colors">Terms</a>
</nav>
</div>
<div class="text-xs text-gray-600">Built by Ico &#9823;</div>
</div>
</footer>
</body>
</html>