Add privacy policy and terms of service pages; fix footer links (#placeholder)
This commit is contained in:
+12
-25
@@ -108,26 +108,10 @@ export default function AboutPage() {
|
|||||||
</h2>
|
</h2>
|
||||||
<div className="grid grid-cols-2 md:grid-cols-4 gap-6">
|
<div className="grid grid-cols-2 md:grid-cols-4 gap-6">
|
||||||
{[
|
{[
|
||||||
{
|
{ name: "Caddy", role: "Reverse Proxy & SSL", icon: "🔒" },
|
||||||
name: "Caddy",
|
{ name: "Docker", role: "Container Runtime", icon: "🐳" },
|
||||||
role: "Reverse Proxy & SSL",
|
{ name: "Node.js", role: "API Backend", icon: "🟢" },
|
||||||
icon: "🔒",
|
{ name: "Technitium", role: "DNS Server", icon: "🌐" },
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Docker",
|
|
||||||
role: "Container Runtime",
|
|
||||||
icon: "🐳",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Node.js",
|
|
||||||
role: "API Backend",
|
|
||||||
icon: "🟢",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Technitium",
|
|
||||||
role: "DNS Server",
|
|
||||||
icon: "🌐",
|
|
||||||
},
|
|
||||||
].map((tech) => (
|
].map((tech) => (
|
||||||
<div
|
<div
|
||||||
key={tech.name}
|
key={tech.name}
|
||||||
@@ -147,8 +131,7 @@ export default function AboutPage() {
|
|||||||
<div className="max-w-3xl mx-auto text-center">
|
<div className="max-w-3xl mx-auto text-center">
|
||||||
<h2 className="text-2xl font-bold text-white mb-6">Get In Touch</h2>
|
<h2 className="text-2xl font-bold text-white mb-6">Get In Touch</h2>
|
||||||
<p className="text-surface-300 mb-8">
|
<p className="text-surface-300 mb-8">
|
||||||
Have questions, feedback, or want to contribute? We'd love to
|
Have questions, feedback, or want to contribute? We'd love to hear from you.
|
||||||
hear from you.
|
|
||||||
</p>
|
</p>
|
||||||
<div className="flex flex-col sm:flex-row gap-4 justify-center">
|
<div className="flex flex-col sm:flex-row gap-4 justify-center">
|
||||||
<a
|
<a
|
||||||
@@ -158,13 +141,17 @@ export default function AboutPage() {
|
|||||||
Email Us
|
Email Us
|
||||||
</a>
|
</a>
|
||||||
<a
|
<a
|
||||||
href="#"
|
href="https://discord.gg/dashcaddy"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
className="px-6 py-3 rounded-lg border border-surface-700 hover:border-surface-500 text-surface-300 font-medium transition-colors"
|
className="px-6 py-3 rounded-lg border border-surface-700 hover:border-surface-500 text-surface-300 font-medium transition-colors"
|
||||||
>
|
>
|
||||||
Join Discord
|
Join Discord
|
||||||
</a>
|
</a>
|
||||||
<a
|
<a
|
||||||
href="#"
|
href="https://github.com/dashcaddy"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
className="px-6 py-3 rounded-lg border border-surface-700 hover:border-surface-500 text-surface-300 font-medium transition-colors"
|
className="px-6 py-3 rounded-lg border border-surface-700 hover:border-surface-500 text-surface-300 font-medium transition-colors"
|
||||||
>
|
>
|
||||||
GitHub
|
GitHub
|
||||||
@@ -194,4 +181,4 @@ export default function AboutPage() {
|
|||||||
<Footer />
|
<Footer />
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,114 @@
|
|||||||
|
import Navbar from "@/components/Navbar";
|
||||||
|
import Footer from "@/components/Footer";
|
||||||
|
import type { Metadata } from "next";
|
||||||
|
|
||||||
|
export const metadata: Metadata = {
|
||||||
|
title: "Privacy Policy - DashCaddy",
|
||||||
|
description:
|
||||||
|
"How DashCaddy handles your data. We believe in privacy — your server, your data, never leaving your network.",
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function PrivacyPage() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Navbar />
|
||||||
|
<main className="flex-1">
|
||||||
|
<section className="pt-32 pb-20 px-4">
|
||||||
|
<div className="max-w-3xl mx-auto">
|
||||||
|
<h1 className="text-4xl font-bold text-white mb-8">
|
||||||
|
Privacy Policy
|
||||||
|
</h1>
|
||||||
|
<div className="space-y-6 text-surface-300 leading-relaxed">
|
||||||
|
<p className="text-surface-400 text-sm">
|
||||||
|
Last updated: June 2025
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2 className="text-xl font-semibold text-white">
|
||||||
|
Your Server, Your Data
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
DashCaddy runs entirely on your own hardware. We do not operate
|
||||||
|
any cloud services, and DashCaddy never phones home. All data
|
||||||
|
— container configurations, DNS records, SSL certificates, and
|
||||||
|
usage statistics — stays on your server.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2 className="text-xl font-semibold text-white">
|
||||||
|
What We Collect
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
When you purchase a premium license, our payment processor
|
||||||
|
(Stripe) collects standard billing information. We receive only
|
||||||
|
your email address and a license key — no credit card numbers
|
||||||
|
touch our servers.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
During license activation, your server sends a one-time machine
|
||||||
|
fingerprint to generate a unique license key. This fingerprint
|
||||||
|
contains no personal information and is used solely to bind your
|
||||||
|
license to your hardware.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2 className="text-xl font-semibold text-white">
|
||||||
|
License Server
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
Premium features require a license server URL to validate your
|
||||||
|
subscription. When you configure this, your server will make a
|
||||||
|
brief HTTPS call to our license server to verify your key is
|
||||||
|
active. The call includes only your license key and machine
|
||||||
|
identifier — no content of your services is ever transmitted.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
The license server is hosted on infrastructure we control. We
|
||||||
|
do not sell, share, or monetise any data from this process.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2 className="text-xl font-semibold text-white">
|
||||||
|
Cookies
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
The DashCaddy dashboard itself uses no tracking cookies. The
|
||||||
|
license server uses a single HttpOnly session cookie during
|
||||||
|
your browser session to manage authenticated license
|
||||||
|
management operations. No third-party analytics or advertising
|
||||||
|
cookies are used anywhere in the product.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2 className="text-xl font-semibold text-white">
|
||||||
|
Third Parties
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
DashCaddy's premium checkout is processed by Stripe, Inc. Their
|
||||||
|
privacy policy governs any data you share with them. We do not
|
||||||
|
receive your payment card details under any circumstances.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2 className="text-xl font-semibold text-white">
|
||||||
|
Changes to This Policy
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
If this policy changes, the date at the top of the page will
|
||||||
|
reflect the update. We will never retroactively change how we
|
||||||
|
handle data already collected.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2 className="text-xl font-semibold text-white">Contact</h2>
|
||||||
|
<p>
|
||||||
|
Questions about privacy? Email{" "}
|
||||||
|
<a
|
||||||
|
href="mailto:privacy@dashcaddy.net"
|
||||||
|
className="text-brand-400 hover:text-brand-300"
|
||||||
|
>
|
||||||
|
privacy@dashcaddy.net
|
||||||
|
</a>
|
||||||
|
.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
<Footer />
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,119 @@
|
|||||||
|
import Navbar from "@/components/Navbar";
|
||||||
|
import Footer from "@/components/Footer";
|
||||||
|
import type { Metadata } from "next";
|
||||||
|
|
||||||
|
export const metadata: Metadata = {
|
||||||
|
title: "Terms of Service - DashCaddy",
|
||||||
|
description:
|
||||||
|
"The terms under which you may use DashCaddy. Plain language, no fine print surprises.",
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function TermsPage() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Navbar />
|
||||||
|
<main className="flex-1">
|
||||||
|
<section className="pt-32 pb-20 px-4">
|
||||||
|
<div className="max-w-3xl mx-auto">
|
||||||
|
<h1 className="text-4xl font-bold text-white mb-8">
|
||||||
|
Terms of Service
|
||||||
|
</h1>
|
||||||
|
<div className="space-y-6 text-surface-300 leading-relaxed">
|
||||||
|
<p className="text-surface-400 text-sm">
|
||||||
|
Last updated: June 2025
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2 className="text-xl font-semibold text-white">
|
||||||
|
Acceptance of Terms
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
By purchasing or using DashCaddy, you agree to these terms. If
|
||||||
|
you do not agree, do not use the software.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2 className="text-xl font-semibold text-white">
|
||||||
|
License Grant
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
DashCaddy is provided under a commercial license. A valid
|
||||||
|
license key grants you the right to use premium features on one
|
||||||
|
server installation. Licenses are bound to your hardware and
|
||||||
|
are not transferable. A free tier covering core features is
|
||||||
|
available without a license.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2 className="text-xl font-semibold text-white">
|
||||||
|
Permitted Use
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
You may use DashCaddy to manage your own servers or those of
|
||||||
|
your clients. You may not redistribute, resell, or sublicense
|
||||||
|
the software. You may not reverse engineer the license
|
||||||
|
validation system.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2 className="text-xl font-semibold text-white">
|
||||||
|
Subscription & Billing
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
Subscriptions are billed in advance on a monthly, quarterly,
|
||||||
|
or annual basis depending on your plan. Cancelling a
|
||||||
|
subscription stops future billing; you retain access to
|
||||||
|
premium features until the end of your current billing
|
||||||
|
period. No refunds are offered for partial periods, unless
|
||||||
|
required by applicable law.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2 className="text-xl font-semibold text-white">
|
||||||
|
Service Availability
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
DashCaddy is software you run on your own infrastructure. We
|
||||||
|
do not guarantee uptime for the license validation server. If
|
||||||
|
our license server is temporarily unavailable, premium
|
||||||
|
features gracefully degrade — your services continue to run
|
||||||
|
normally; they simply stop enforcing license eligibility
|
||||||
|
checks until connectivity is restored.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2 className="text-xl font-semibold text-white">
|
||||||
|
Disclaimer
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
DashCaddy is provided "as is" without warranty of any kind.
|
||||||
|
We are not liable for any damages arising from the use of this
|
||||||
|
software. It is your responsibility to ensure your
|
||||||
|
configuration is secure and your backups are current.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2 className="text-xl font-semibold text-white">
|
||||||
|
Account Termination
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
We reserve the right to revoke a license key if it is used in
|
||||||
|
violation of these terms, including use on more servers than
|
||||||
|
the license permits, or attempting to circumvent license
|
||||||
|
validation.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2 className="text-xl font-semibold text-white">
|
||||||
|
Contact
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
Questions? Email{" "}
|
||||||
|
<a
|
||||||
|
href="mailto:legal@dashcaddy.net"
|
||||||
|
className="text-brand-400 hover:text-brand-300"
|
||||||
|
>
|
||||||
|
legal@dashcaddy.net
|
||||||
|
</a>
|
||||||
|
.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
<Footer />
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -19,16 +19,15 @@ export default function Footer() {
|
|||||||
links: [
|
links: [
|
||||||
{ label: 'Getting Started', href: '/docs' },
|
{ label: 'Getting Started', href: '/docs' },
|
||||||
{ label: 'API Reference', href: '/docs#api' },
|
{ label: 'API Reference', href: '/docs#api' },
|
||||||
{ label: 'Community', href: '#' },
|
{ label: 'Discord', href: 'https://discord.gg/dashcaddy' },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Support',
|
title: 'Support',
|
||||||
links: [
|
links: [
|
||||||
{ label: 'Contact', href: 'mailto:support@dashcaddy.net' },
|
{ label: 'Contact', href: 'mailto:support@dashcaddy.net' },
|
||||||
{ label: 'Discord', href: '#' },
|
{ label: 'Privacy Policy', href: '/privacy' },
|
||||||
{ label: 'Privacy Policy', href: '#' },
|
{ label: 'Terms of Service', href: '/terms' },
|
||||||
{ label: 'Terms of Service', href: '#' },
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
@@ -41,7 +40,7 @@ export default function Footer() {
|
|||||||
</svg>
|
</svg>
|
||||||
),
|
),
|
||||||
label: 'Discord',
|
label: 'Discord',
|
||||||
href: '#',
|
href: 'https://discord.gg/dashcaddy',
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -126,4 +125,4 @@ export default function Footer() {
|
|||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user