Redesign legal pages with readable paragraph layout and updated contact info.
Privacy Policy and Terms now share a document layout with table of contents, plain-paragraph copy, and beenvoice.soconnor.dev contact details for App Store review. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -11,7 +11,10 @@ export const metadata: Metadata = {
|
|||||||
|
|
||||||
export default function PrivacyPolicyPage() {
|
export default function PrivacyPolicyPage() {
|
||||||
return (
|
return (
|
||||||
<LegalPageShell title="Privacy Policy">
|
<LegalPageShell
|
||||||
|
title="Privacy Policy"
|
||||||
|
description={`How ${brand.name} collects, uses, and protects your data across the web and mobile apps.`}
|
||||||
|
>
|
||||||
<PrivacyPolicyContent />
|
<PrivacyPolicyContent />
|
||||||
</LegalPageShell>
|
</LegalPageShell>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -11,7 +11,10 @@ export const metadata: Metadata = {
|
|||||||
|
|
||||||
export default function TermsOfServicePage() {
|
export default function TermsOfServicePage() {
|
||||||
return (
|
return (
|
||||||
<LegalPageShell title="Terms of Service">
|
<LegalPageShell
|
||||||
|
title="Terms of Service"
|
||||||
|
description={`The rules for using ${brand.name} on the web and mobile apps.`}
|
||||||
|
>
|
||||||
<TermsOfServiceContent />
|
<TermsOfServiceContent />
|
||||||
</LegalPageShell>
|
</LegalPageShell>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -0,0 +1,101 @@
|
|||||||
|
import Link from "next/link";
|
||||||
|
|
||||||
|
import { cn } from "~/lib/utils";
|
||||||
|
|
||||||
|
export type LegalSection = {
|
||||||
|
id: string;
|
||||||
|
title: string;
|
||||||
|
children: React.ReactNode;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Body copy for legal pages — explicit styles (no typography plugin). */
|
||||||
|
export function LegalParagraph({
|
||||||
|
className,
|
||||||
|
children,
|
||||||
|
}: {
|
||||||
|
className?: string;
|
||||||
|
children: React.ReactNode;
|
||||||
|
}) {
|
||||||
|
return (
|
||||||
|
<p
|
||||||
|
className={cn(
|
||||||
|
"text-muted-foreground text-[15px] leading-7",
|
||||||
|
className,
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
</p>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function LegalSectionBody({ children }: { children: React.ReactNode }) {
|
||||||
|
return (
|
||||||
|
<div className="flex flex-col gap-6 [&_a]:text-foreground [&_a]:font-medium [&_a]:underline [&_a]:underline-offset-4">
|
||||||
|
{children}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function LegalTableOfContents({ sections }: { sections: LegalSection[] }) {
|
||||||
|
return (
|
||||||
|
<nav aria-label="Table of contents" className="text-sm">
|
||||||
|
<p className="text-foreground mb-3 font-medium">On this page</p>
|
||||||
|
<ol className="space-y-2">
|
||||||
|
{sections.map((section) => (
|
||||||
|
<li key={section.id}>
|
||||||
|
<Link
|
||||||
|
href={`#${section.id}`}
|
||||||
|
className="text-muted-foreground hover:text-foreground block leading-snug transition-colors"
|
||||||
|
>
|
||||||
|
{section.title}
|
||||||
|
</Link>
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ol>
|
||||||
|
</nav>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function LegalSectionBlock({
|
||||||
|
section,
|
||||||
|
isLast,
|
||||||
|
}: {
|
||||||
|
section: LegalSection;
|
||||||
|
isLast: boolean;
|
||||||
|
}) {
|
||||||
|
return (
|
||||||
|
<section
|
||||||
|
id={section.id}
|
||||||
|
className={cn("scroll-mt-24", !isLast && "border-border border-b")}
|
||||||
|
>
|
||||||
|
<div className="px-6 pt-8 pb-4 sm:px-8">
|
||||||
|
<h2 className="text-foreground text-lg font-semibold tracking-tight sm:text-xl">
|
||||||
|
{section.title}
|
||||||
|
</h2>
|
||||||
|
</div>
|
||||||
|
<div className="px-6 pb-10 sm:px-8">
|
||||||
|
<LegalSectionBody>{section.children}</LegalSectionBody>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function LegalDocument({ sections }: { sections: LegalSection[] }) {
|
||||||
|
return (
|
||||||
|
<div className="grid gap-8 lg:grid-cols-[minmax(0,13rem)_minmax(0,1fr)] lg:items-start">
|
||||||
|
<aside className="bg-card border-border rounded-lg border p-4 lg:sticky lg:top-8">
|
||||||
|
<LegalTableOfContents sections={sections} />
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
<article className="bg-card border-border overflow-hidden rounded-lg border shadow-sm">
|
||||||
|
{sections.map((section, index) => (
|
||||||
|
<LegalSectionBlock
|
||||||
|
key={section.id}
|
||||||
|
section={section}
|
||||||
|
isLast={index === sections.length - 1}
|
||||||
|
/>
|
||||||
|
))}
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -2,38 +2,49 @@ import Link from "next/link";
|
|||||||
import { ArrowLeft } from "lucide-react";
|
import { ArrowLeft } from "lucide-react";
|
||||||
|
|
||||||
import { Button } from "~/components/ui/button";
|
import { Button } from "~/components/ui/button";
|
||||||
|
import { Logo } from "~/components/branding/logo";
|
||||||
import { LEGAL_LAST_UPDATED } from "~/lib/legal";
|
import { LEGAL_LAST_UPDATED } from "~/lib/legal";
|
||||||
|
|
||||||
type LegalPageShellProps = {
|
type LegalPageShellProps = {
|
||||||
title: string;
|
title: string;
|
||||||
|
description?: string;
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
};
|
};
|
||||||
|
|
||||||
export function LegalPageShell({ title, children }: LegalPageShellProps) {
|
export function LegalPageShell({
|
||||||
|
title,
|
||||||
|
description,
|
||||||
|
children,
|
||||||
|
}: LegalPageShellProps) {
|
||||||
return (
|
return (
|
||||||
<div className="bg-background min-h-screen">
|
<div className="bg-background min-h-screen">
|
||||||
<div className="bg-card border-b">
|
<header className="border-border bg-card/80 border-b backdrop-blur-sm">
|
||||||
<div className="container mx-auto max-w-4xl px-6 py-6">
|
<div className="container mx-auto flex max-w-6xl flex-col gap-6 px-4 py-6 sm:px-6 sm:py-8">
|
||||||
<div className="flex items-center gap-4">
|
<div className="flex flex-wrap items-center justify-between gap-4">
|
||||||
|
<Logo size="sm" />
|
||||||
<Link href="/">
|
<Link href="/">
|
||||||
<Button variant="outline" size="sm">
|
<Button variant="outline" size="sm">
|
||||||
<ArrowLeft className="mr-2 h-4 w-4" />
|
<ArrowLeft className="mr-2 h-4 w-4" />
|
||||||
Back
|
Back to app
|
||||||
</Button>
|
</Button>
|
||||||
</Link>
|
</Link>
|
||||||
<div>
|
</div>
|
||||||
<h1 className="text-2xl font-bold">{title}</h1>
|
|
||||||
|
<div className="max-w-3xl space-y-2">
|
||||||
|
<h1 className="text-3xl font-bold tracking-tight sm:text-4xl">{title}</h1>
|
||||||
|
{description ? (
|
||||||
|
<p className="text-muted-foreground text-base leading-relaxed">{description}</p>
|
||||||
|
) : null}
|
||||||
<p className="text-muted-foreground text-sm">
|
<p className="text-muted-foreground text-sm">
|
||||||
Last updated: {LEGAL_LAST_UPDATED}
|
Last updated {LEGAL_LAST_UPDATED}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</header>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="container mx-auto max-w-4xl px-6 py-8">
|
<main className="container mx-auto max-w-6xl px-4 py-8 sm:px-6 sm:py-10">
|
||||||
<div className="space-y-6">{children}</div>
|
{children}
|
||||||
</div>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,373 +1,192 @@
|
|||||||
import Link from "next/link";
|
|
||||||
|
|
||||||
import { Card, CardContent, CardHeader, CardTitle } from "~/components/ui/card";
|
|
||||||
import {
|
import {
|
||||||
LEGAL_PRIVACY_EMAIL,
|
LEGAL_PRIVACY_EMAIL,
|
||||||
LEGAL_TERMS_EMAIL,
|
|
||||||
LEGAL_WEBSITE,
|
LEGAL_WEBSITE,
|
||||||
} from "~/lib/legal";
|
} from "~/lib/legal";
|
||||||
import { brand } from "~/lib/branding";
|
import { brand } from "~/lib/branding";
|
||||||
|
import {
|
||||||
|
LegalDocument,
|
||||||
|
LegalParagraph,
|
||||||
|
type LegalSection,
|
||||||
|
} from "~/components/legal/legal-document";
|
||||||
|
|
||||||
|
const sections: LegalSection[] = [
|
||||||
|
{
|
||||||
|
id: "introduction",
|
||||||
|
title: "Introduction",
|
||||||
|
children: (
|
||||||
|
<>
|
||||||
|
<LegalParagraph>
|
||||||
|
This Privacy Policy explains how {brand.name} collects, uses, and protects
|
||||||
|
information when you use our invoicing platform, including the web app and mobile
|
||||||
|
app (the “Service”).
|
||||||
|
</LegalParagraph>
|
||||||
|
<LegalParagraph>
|
||||||
|
If you have questions about this policy, email us at{" "}
|
||||||
|
<a href={`mailto:${LEGAL_PRIVACY_EMAIL}`}>{LEGAL_PRIVACY_EMAIL}</a>.
|
||||||
|
</LegalParagraph>
|
||||||
|
</>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "information-we-collect",
|
||||||
|
title: "Information we collect",
|
||||||
|
children: (
|
||||||
|
<>
|
||||||
|
<LegalParagraph>
|
||||||
|
When you create an account and use the Service, you provide information such as
|
||||||
|
your name, email address, business details, client records, invoice content, and
|
||||||
|
time entries. This is the data you enter to run your invoicing workflow.
|
||||||
|
</LegalParagraph>
|
||||||
|
<LegalParagraph>
|
||||||
|
You may also add payment instructions that appear on invoices, such as bank
|
||||||
|
transfer details. We do not process card payments on your behalf.
|
||||||
|
</LegalParagraph>
|
||||||
|
<LegalParagraph>
|
||||||
|
We also collect some technical information automatically so the Service stays
|
||||||
|
secure and reliable. This can include your IP address, device and browser or app
|
||||||
|
details, log and diagnostic data, and session cookies that keep you signed in.
|
||||||
|
Some deployments may use optional, privacy-focused analytics.
|
||||||
|
</LegalParagraph>
|
||||||
|
</>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "how-we-use-information",
|
||||||
|
title: "How we use information",
|
||||||
|
children: (
|
||||||
|
<>
|
||||||
|
<LegalParagraph>
|
||||||
|
We use your information to provide and operate the Service, authenticate your
|
||||||
|
account, send transactional messages such as password resets, respond to support
|
||||||
|
requests, monitor security and performance, and meet legal obligations.
|
||||||
|
</LegalParagraph>
|
||||||
|
</>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "how-we-share",
|
||||||
|
title: "How we share information",
|
||||||
|
children: (
|
||||||
|
<>
|
||||||
|
<LegalParagraph>
|
||||||
|
We do not sell your personal information. We share it only when needed to run the
|
||||||
|
Service or when the law requires it.
|
||||||
|
</LegalParagraph>
|
||||||
|
<LegalParagraph>
|
||||||
|
We work with service providers that host our infrastructure, deliver transactional
|
||||||
|
email, support single sign-on when enabled on your instance, and optionally provide
|
||||||
|
privacy-focused analytics. These vendors may process your information only to
|
||||||
|
perform services for us.
|
||||||
|
</LegalParagraph>
|
||||||
|
<LegalParagraph>
|
||||||
|
We may disclose information if we believe it is reasonably necessary to comply with
|
||||||
|
law, respond to a valid legal request, or protect the security and integrity of the
|
||||||
|
Service.
|
||||||
|
</LegalParagraph>
|
||||||
|
<LegalParagraph>
|
||||||
|
If we are involved in a merger, acquisition, or sale of assets, your information
|
||||||
|
may be transferred as part of that transaction, subject to continued protection
|
||||||
|
consistent with this policy.
|
||||||
|
</LegalParagraph>
|
||||||
|
</>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "security-retention",
|
||||||
|
title: "Security and retention",
|
||||||
|
children: (
|
||||||
|
<>
|
||||||
|
<LegalParagraph>
|
||||||
|
We use reasonable safeguards to protect information, including encryption in
|
||||||
|
transit, access controls, and secure authentication. No method of transmission or
|
||||||
|
storage is completely secure.
|
||||||
|
</LegalParagraph>
|
||||||
|
<LegalParagraph>
|
||||||
|
We retain information for as long as you have an account or as needed to provide
|
||||||
|
the Service. We may keep certain records longer when required by law or for
|
||||||
|
legitimate purposes such as fraud prevention or dispute resolution.
|
||||||
|
</LegalParagraph>
|
||||||
|
</>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "your-rights",
|
||||||
|
title: "Your rights",
|
||||||
|
children: (
|
||||||
|
<>
|
||||||
|
<LegalParagraph>
|
||||||
|
Depending on where you live, you may have the right to access, correct, delete, or
|
||||||
|
export your personal information, or to object to or restrict certain processing.
|
||||||
|
</LegalParagraph>
|
||||||
|
<LegalParagraph>
|
||||||
|
To exercise these rights, contact us at{" "}
|
||||||
|
<a href={`mailto:${LEGAL_PRIVACY_EMAIL}`}>{LEGAL_PRIVACY_EMAIL}</a>. We will
|
||||||
|
respond within a reasonable timeframe and as required by applicable law.
|
||||||
|
</LegalParagraph>
|
||||||
|
</>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "cookies",
|
||||||
|
title: "Cookies",
|
||||||
|
children: (
|
||||||
|
<>
|
||||||
|
<LegalParagraph>
|
||||||
|
We use cookies and similar technologies to keep you signed in, remember
|
||||||
|
preferences such as theme, and, when enabled on a deployment, measure usage with
|
||||||
|
privacy-focused analytics.
|
||||||
|
</LegalParagraph>
|
||||||
|
<LegalParagraph>
|
||||||
|
You can control cookies through your browser settings. If you disable essential
|
||||||
|
cookies, some parts of the Service may not work correctly.
|
||||||
|
</LegalParagraph>
|
||||||
|
</>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "other",
|
||||||
|
title: "Other disclosures",
|
||||||
|
children: (
|
||||||
|
<>
|
||||||
|
<LegalParagraph>
|
||||||
|
The Service may link to third-party websites or integrate with services you
|
||||||
|
configure, such as single sign-on. Those services have their own privacy policies,
|
||||||
|
and we are not responsible for their practices.
|
||||||
|
</LegalParagraph>
|
||||||
|
<LegalParagraph>
|
||||||
|
The Service is not intended for children under 13. If you believe a child has
|
||||||
|
provided us personal information, contact us and we will delete it.
|
||||||
|
</LegalParagraph>
|
||||||
|
<LegalParagraph>
|
||||||
|
Your information may be processed in countries other than your own. Where required,
|
||||||
|
we use appropriate safeguards for international transfers.
|
||||||
|
</LegalParagraph>
|
||||||
|
<LegalParagraph>
|
||||||
|
We may update this policy from time to time. If we make material changes, we will
|
||||||
|
post the updated policy on the Service and may notify you by email. Continued use
|
||||||
|
after changes take effect means you accept the updated policy.
|
||||||
|
</LegalParagraph>
|
||||||
|
</>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "contact",
|
||||||
|
title: "Contact",
|
||||||
|
children: (
|
||||||
|
<>
|
||||||
|
<LegalParagraph>
|
||||||
|
For privacy questions or requests, email{" "}
|
||||||
|
<a href={`mailto:${LEGAL_PRIVACY_EMAIL}`}>{LEGAL_PRIVACY_EMAIL}</a> or visit{" "}
|
||||||
|
<a href={LEGAL_WEBSITE} target="_blank" rel="noopener noreferrer">
|
||||||
|
{LEGAL_WEBSITE.replace(/^https?:\/\//, "")}
|
||||||
|
</a>
|
||||||
|
.
|
||||||
|
</LegalParagraph>
|
||||||
|
</>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
export function PrivacyPolicyContent() {
|
export function PrivacyPolicyContent() {
|
||||||
return (
|
return <LegalDocument sections={sections} />;
|
||||||
<>
|
|
||||||
<Card>
|
|
||||||
<CardHeader>
|
|
||||||
<CardTitle>Introduction</CardTitle>
|
|
||||||
</CardHeader>
|
|
||||||
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
|
|
||||||
<p>
|
|
||||||
{brand.name} ("we", "our", or "us") is
|
|
||||||
committed to protecting your privacy. This Privacy Policy explains
|
|
||||||
how we collect, use, disclose, and safeguard your information when
|
|
||||||
you use our invoicing platform and services.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Please read this Privacy Policy carefully. If you do not agree with
|
|
||||||
the terms of this Privacy Policy, please do not access or use our
|
|
||||||
Service.
|
|
||||||
</p>
|
|
||||||
</CardContent>
|
|
||||||
</Card>
|
|
||||||
|
|
||||||
<Card>
|
|
||||||
<CardHeader>
|
|
||||||
<CardTitle>Information We Collect</CardTitle>
|
|
||||||
</CardHeader>
|
|
||||||
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
|
|
||||||
<h4>Personal Information</h4>
|
|
||||||
<p>
|
|
||||||
We may collect personal information that you voluntarily provide to
|
|
||||||
us when you:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>Register for an account</li>
|
|
||||||
<li>Create invoices or manage client information</li>
|
|
||||||
<li>Track time entries and billing activity</li>
|
|
||||||
<li>Contact us for support</li>
|
|
||||||
<li>Subscribe to our newsletters or communications</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<p>This personal information may include:</p>
|
|
||||||
<ul>
|
|
||||||
<li>Name and contact information (email, phone, address)</li>
|
|
||||||
<li>Business information and tax details</li>
|
|
||||||
<li>Client information you input into the system</li>
|
|
||||||
<li>Financial information related to your invoices</li>
|
|
||||||
<li>
|
|
||||||
Payment information (processed securely by third-party providers)
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h4>Automatically Collected Information</h4>
|
|
||||||
<p>
|
|
||||||
We may automatically collect certain information when you visit our
|
|
||||||
Service:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
Device information (IP address, browser type, operating system)
|
|
||||||
</li>
|
|
||||||
<li>Usage data (pages visited, time spent, features used)</li>
|
|
||||||
<li>Log files and analytics data</li>
|
|
||||||
<li>Cookies and similar tracking technologies</li>
|
|
||||||
</ul>
|
|
||||||
</CardContent>
|
|
||||||
</Card>
|
|
||||||
|
|
||||||
<Card>
|
|
||||||
<CardHeader>
|
|
||||||
<CardTitle>How We Use Your Information</CardTitle>
|
|
||||||
</CardHeader>
|
|
||||||
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
|
|
||||||
<p>We use the information we collect to:</p>
|
|
||||||
<ul>
|
|
||||||
<li>Provide, operate, and maintain our Service</li>
|
|
||||||
<li>Process your transactions and manage your account</li>
|
|
||||||
<li>Improve and personalize your experience</li>
|
|
||||||
<li>Communicate with you about your account and our services</li>
|
|
||||||
<li>Send you technical notices and support messages</li>
|
|
||||||
<li>Respond to your comments, questions, and requests</li>
|
|
||||||
<li>Monitor usage and analyze trends</li>
|
|
||||||
<li>
|
|
||||||
Detect, prevent, and address technical issues and security
|
|
||||||
breaches
|
|
||||||
</li>
|
|
||||||
<li>Comply with legal obligations</li>
|
|
||||||
</ul>
|
|
||||||
</CardContent>
|
|
||||||
</Card>
|
|
||||||
|
|
||||||
<Card>
|
|
||||||
<CardHeader>
|
|
||||||
<CardTitle>How We Share Your Information</CardTitle>
|
|
||||||
</CardHeader>
|
|
||||||
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
|
|
||||||
<p>
|
|
||||||
We do not sell, trade, or rent your personal information to third
|
|
||||||
parties. We may share your information in the following
|
|
||||||
circumstances:
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h4>Service Providers</h4>
|
|
||||||
<p>
|
|
||||||
We may share your information with trusted third-party service
|
|
||||||
providers who assist us in operating our Service, such as:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>Cloud hosting and storage providers</li>
|
|
||||||
<li>Payment processors</li>
|
|
||||||
<li>Email service providers</li>
|
|
||||||
<li>Analytics and monitoring services</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h4>Legal Requirements</h4>
|
|
||||||
<p>
|
|
||||||
We may disclose your information if required to do so by law or in
|
|
||||||
response to:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>Legal processes (subpoenas, court orders)</li>
|
|
||||||
<li>Government requests</li>
|
|
||||||
<li>Law enforcement investigations</li>
|
|
||||||
<li>Protection of our rights, property, or safety</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h4>Business Transfers</h4>
|
|
||||||
<p>
|
|
||||||
In the event of a merger, acquisition, or sale of assets, your
|
|
||||||
information may be transferred as part of that transaction.
|
|
||||||
</p>
|
|
||||||
</CardContent>
|
|
||||||
</Card>
|
|
||||||
|
|
||||||
<Card>
|
|
||||||
<CardHeader>
|
|
||||||
<CardTitle>Data Security</CardTitle>
|
|
||||||
</CardHeader>
|
|
||||||
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
|
|
||||||
<p>
|
|
||||||
We implement appropriate technical and organizational security
|
|
||||||
measures to protect your information:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>Encryption of data in transit and at rest</li>
|
|
||||||
<li>Secure access controls and authentication</li>
|
|
||||||
<li>Regular security assessments and updates</li>
|
|
||||||
<li>Employee training on data protection</li>
|
|
||||||
<li>Incident response procedures</li>
|
|
||||||
</ul>
|
|
||||||
<p>
|
|
||||||
However, no method of transmission over the internet or electronic
|
|
||||||
storage is 100% secure. While we strive to protect your information,
|
|
||||||
we cannot guarantee absolute security.
|
|
||||||
</p>
|
|
||||||
</CardContent>
|
|
||||||
</Card>
|
|
||||||
|
|
||||||
<Card>
|
|
||||||
<CardHeader>
|
|
||||||
<CardTitle>Data Retention</CardTitle>
|
|
||||||
</CardHeader>
|
|
||||||
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
|
|
||||||
<p>
|
|
||||||
We retain your personal information only for as long as necessary to
|
|
||||||
fulfill the purposes outlined in this Privacy Policy, unless a
|
|
||||||
longer retention period is required by law.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Factors we consider when determining retention periods include:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>The nature and sensitivity of the information</li>
|
|
||||||
<li>Legal and regulatory requirements</li>
|
|
||||||
<li>Business and operational needs</li>
|
|
||||||
<li>Your account status and activity</li>
|
|
||||||
</ul>
|
|
||||||
</CardContent>
|
|
||||||
</Card>
|
|
||||||
|
|
||||||
<Card>
|
|
||||||
<CardHeader>
|
|
||||||
<CardTitle>Your Rights and Choices</CardTitle>
|
|
||||||
</CardHeader>
|
|
||||||
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
|
|
||||||
<p>
|
|
||||||
Depending on your location, you may have the following rights
|
|
||||||
regarding your personal information:
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h4>Access and Portability</h4>
|
|
||||||
<ul>
|
|
||||||
<li>Request access to your personal information</li>
|
|
||||||
<li>Receive a copy of your data in a portable format</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h4>Correction and Updates</h4>
|
|
||||||
<ul>
|
|
||||||
<li>Correct inaccurate or incomplete information</li>
|
|
||||||
<li>Update your account information at any time</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h4>Deletion</h4>
|
|
||||||
<ul>
|
|
||||||
<li>Request deletion of your personal information</li>
|
|
||||||
<li>Close your account and remove your data</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h4>Restriction and Objection</h4>
|
|
||||||
<ul>
|
|
||||||
<li>Restrict the processing of your information</li>
|
|
||||||
<li>Object to certain uses of your data</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
To exercise these rights, please contact us using the information
|
|
||||||
provided in the "Contact Us" section below.
|
|
||||||
</p>
|
|
||||||
</CardContent>
|
|
||||||
</Card>
|
|
||||||
|
|
||||||
<Card>
|
|
||||||
<CardHeader>
|
|
||||||
<CardTitle>Cookies and Tracking Technologies</CardTitle>
|
|
||||||
</CardHeader>
|
|
||||||
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
|
|
||||||
<p>We use cookies and similar technologies to:</p>
|
|
||||||
<ul>
|
|
||||||
<li>Remember your preferences and settings</li>
|
|
||||||
<li>Authenticate your account</li>
|
|
||||||
<li>Analyze usage patterns and improve our Service</li>
|
|
||||||
<li>Provide personalized content and features</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
You can control cookies through your browser settings. However,
|
|
||||||
disabling cookies may affect the functionality of our Service.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h4>Types of Cookies We Use</h4>
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<strong>Essential Cookies:</strong> Required for the Service to
|
|
||||||
function properly
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<strong>Analytics Cookies:</strong> Help us understand how you use
|
|
||||||
our Service
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<strong>Preference Cookies:</strong> Remember your settings and
|
|
||||||
preferences
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</CardContent>
|
|
||||||
</Card>
|
|
||||||
|
|
||||||
<Card>
|
|
||||||
<CardHeader>
|
|
||||||
<CardTitle>Third-Party Links and Services</CardTitle>
|
|
||||||
</CardHeader>
|
|
||||||
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
|
|
||||||
<p>
|
|
||||||
Our Service may contain links to third-party websites or integrate
|
|
||||||
with third-party services. We are not responsible for the privacy
|
|
||||||
practices of these third parties.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
We encourage you to read the privacy policies of any third-party
|
|
||||||
services you use in connection with our Service.
|
|
||||||
</p>
|
|
||||||
</CardContent>
|
|
||||||
</Card>
|
|
||||||
|
|
||||||
<Card>
|
|
||||||
<CardHeader>
|
|
||||||
<CardTitle>Children's Privacy</CardTitle>
|
|
||||||
</CardHeader>
|
|
||||||
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
|
|
||||||
<p>
|
|
||||||
Our Service is not intended for children under the age of 13. We do
|
|
||||||
not knowingly collect personal information from children under 13.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
If you are a parent or guardian and believe your child has provided
|
|
||||||
us with personal information, please contact us immediately so we
|
|
||||||
can remove such information.
|
|
||||||
</p>
|
|
||||||
</CardContent>
|
|
||||||
</Card>
|
|
||||||
|
|
||||||
<Card>
|
|
||||||
<CardHeader>
|
|
||||||
<CardTitle>International Data Transfers</CardTitle>
|
|
||||||
</CardHeader>
|
|
||||||
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
|
|
||||||
<p>
|
|
||||||
Your information may be transferred to and processed in countries
|
|
||||||
other than your own. We ensure that such transfers comply with
|
|
||||||
applicable data protection laws.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
When we transfer your information internationally, we implement
|
|
||||||
appropriate safeguards to protect your data, including:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>Standard contractual clauses</li>
|
|
||||||
<li>Adequacy decisions by relevant authorities</li>
|
|
||||||
<li>Certified privacy frameworks</li>
|
|
||||||
</ul>
|
|
||||||
</CardContent>
|
|
||||||
</Card>
|
|
||||||
|
|
||||||
<Card>
|
|
||||||
<CardHeader>
|
|
||||||
<CardTitle>Changes to This Privacy Policy</CardTitle>
|
|
||||||
</CardHeader>
|
|
||||||
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
|
|
||||||
<p>
|
|
||||||
We may update this Privacy Policy from time to time. We will notify
|
|
||||||
you of any material changes by:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>Posting the updated policy on our Service</li>
|
|
||||||
<li>Sending you an email notification</li>
|
|
||||||
<li>Displaying a prominent notice on our Service</li>
|
|
||||||
</ul>
|
|
||||||
<p>
|
|
||||||
Your continued use of our Service after any changes indicates your
|
|
||||||
acceptance of the updated Privacy Policy.
|
|
||||||
</p>
|
|
||||||
</CardContent>
|
|
||||||
</Card>
|
|
||||||
|
|
||||||
<Card>
|
|
||||||
<CardHeader>
|
|
||||||
<CardTitle>Contact Us</CardTitle>
|
|
||||||
</CardHeader>
|
|
||||||
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
|
|
||||||
<p>
|
|
||||||
If you have questions about this Privacy Policy or our privacy
|
|
||||||
practices, please contact us at:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
Email:{" "}
|
|
||||||
<a href={`mailto:${LEGAL_PRIVACY_EMAIL}`}>{LEGAL_PRIVACY_EMAIL}</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
Website:{" "}
|
|
||||||
<a href={LEGAL_WEBSITE} target="_blank" rel="noopener noreferrer">
|
|
||||||
{LEGAL_WEBSITE}
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<p>
|
|
||||||
We will respond to your inquiries within a reasonable timeframe and
|
|
||||||
in accordance with applicable law.
|
|
||||||
</p>
|
|
||||||
</CardContent>
|
|
||||||
</Card>
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,291 +1,235 @@
|
|||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
|
|
||||||
import { Card, CardContent, CardHeader, CardTitle } from "~/components/ui/card";
|
|
||||||
import {
|
import {
|
||||||
LEGAL_PRIVACY_EMAIL,
|
LEGAL_PRIVACY_EMAIL,
|
||||||
LEGAL_TERMS_EMAIL,
|
LEGAL_TERMS_EMAIL,
|
||||||
LEGAL_WEBSITE,
|
LEGAL_WEBSITE,
|
||||||
} from "~/lib/legal";
|
} from "~/lib/legal";
|
||||||
import { brand } from "~/lib/branding";
|
import { brand } from "~/lib/branding";
|
||||||
|
import {
|
||||||
|
LegalDocument,
|
||||||
|
LegalParagraph,
|
||||||
|
type LegalSection,
|
||||||
|
} from "~/components/legal/legal-document";
|
||||||
|
|
||||||
export function TermsOfServiceContent() {
|
const sections: LegalSection[] = [
|
||||||
return (
|
{
|
||||||
|
id: "agreement",
|
||||||
|
title: "Agreement to these terms",
|
||||||
|
children: (
|
||||||
<>
|
<>
|
||||||
<Card>
|
<LegalParagraph>
|
||||||
<CardHeader>
|
These Terms of Service (“Terms”) govern your use of the {brand.name}{" "}
|
||||||
<CardTitle>Agreement to Terms</CardTitle>
|
platform, including the web app and mobile app (the “Service”).
|
||||||
</CardHeader>
|
</LegalParagraph>
|
||||||
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
|
<LegalParagraph>
|
||||||
<p>
|
By accessing or using the Service, you agree to these Terms. If you do
|
||||||
These Terms of Service ("Terms") govern your use of the{" "}
|
not agree, do not use the Service.
|
||||||
{brand.name} platform and services (the "Service") operated
|
</LegalParagraph>
|
||||||
by {brand.name} ("us", "we", or "our").
|
</>
|
||||||
</p>
|
),
|
||||||
<p>
|
},
|
||||||
By accessing or using our Service, you agree to be bound by these
|
{
|
||||||
Terms. If you disagree with any part of these terms, then you may not
|
id: "service",
|
||||||
access the Service.
|
title: "The Service",
|
||||||
</p>
|
children: (
|
||||||
</CardContent>
|
<>
|
||||||
</Card>
|
<LegalParagraph>
|
||||||
|
{brand.name} helps you create and manage invoices, track clients and
|
||||||
<Card>
|
businesses, record billable time, and review basic financial summaries.
|
||||||
<CardHeader>
|
You may use the official hosted Service or connect the mobile app to a
|
||||||
<CardTitle>Description of Service</CardTitle>
|
self-hosted {brand.name} server you control.
|
||||||
</CardHeader>
|
</LegalParagraph>
|
||||||
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
|
<LegalParagraph>
|
||||||
<p>
|
The Service is a tool for your business records. We do not provide
|
||||||
{brand.name} is a web-based invoicing platform that allows users to:
|
legal, tax, or accounting advice, and you are responsible for the
|
||||||
</p>
|
accuracy of invoices and compliance with laws that apply to you.
|
||||||
<ul>
|
</LegalParagraph>
|
||||||
<li>Create and manage professional invoices</li>
|
</>
|
||||||
<li>Track client information and billing details</li>
|
),
|
||||||
<li>Clock time and convert entries into billable work</li>
|
},
|
||||||
<li>Monitor payment status and financial metrics</li>
|
{
|
||||||
<li>Generate reports and analytics</li>
|
id: "accounts",
|
||||||
<li>Manage business profiles and settings</li>
|
title: "Accounts and security",
|
||||||
</ul>
|
children: (
|
||||||
</CardContent>
|
<>
|
||||||
</Card>
|
<LegalParagraph>
|
||||||
|
When you create an account, you agree to provide accurate information
|
||||||
<Card>
|
and keep it up to date. You are responsible for activity under your
|
||||||
<CardHeader>
|
account and for keeping your credentials secure.
|
||||||
<CardTitle>User Accounts</CardTitle>
|
</LegalParagraph>
|
||||||
</CardHeader>
|
<LegalParagraph>
|
||||||
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
|
Notify us promptly if you suspect unauthorized access to your account.
|
||||||
<p>
|
We may suspend or restrict access if we believe your account is
|
||||||
When you create an account with us, you must provide information that
|
compromised or used in violation of these Terms.
|
||||||
is accurate, complete, and current at all times. You are responsible
|
</LegalParagraph>
|
||||||
for safeguarding the password and for all activities that occur
|
</>
|
||||||
under your account.
|
),
|
||||||
</p>
|
},
|
||||||
<p>
|
{
|
||||||
You agree not to disclose your password to any third party. You must
|
id: "acceptable-use",
|
||||||
notify us immediately upon becoming aware of any breach of security
|
title: "Acceptable use",
|
||||||
or unauthorized use of your account.
|
children: (
|
||||||
</p>
|
<>
|
||||||
</CardContent>
|
<LegalParagraph>
|
||||||
</Card>
|
You agree to use the Service lawfully and only for its intended
|
||||||
|
purpose. You may not use the Service to break the law, infringe
|
||||||
<Card>
|
others’ rights, transmit malware, attempt to gain unauthorized access,
|
||||||
<CardHeader>
|
interfere with the Service’s operation, or harass or harm others.
|
||||||
<CardTitle>Acceptable Use</CardTitle>
|
</LegalParagraph>
|
||||||
</CardHeader>
|
<LegalParagraph>
|
||||||
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
|
You may not use the Service to send spam, publish false or misleading
|
||||||
<p>You agree not to use the Service:</p>
|
information, or scrape or overload our systems without permission.
|
||||||
<ul>
|
</LegalParagraph>
|
||||||
<li>
|
</>
|
||||||
For any unlawful purpose or to solicit others to perform unlawful
|
),
|
||||||
acts
|
},
|
||||||
</li>
|
{
|
||||||
<li>
|
id: "data-privacy",
|
||||||
To violate any international, federal, provincial, or state
|
title: "Your data and privacy",
|
||||||
regulations, rules, laws, or local ordinances
|
children: (
|
||||||
</li>
|
<>
|
||||||
<li>
|
<LegalParagraph>
|
||||||
To infringe upon or violate our intellectual property rights or
|
Your privacy matters to us. Our{" "}
|
||||||
the intellectual property rights of others
|
<Link href="/privacy">Privacy Policy</Link> explains how we collect
|
||||||
</li>
|
and use information and is incorporated into these Terms.
|
||||||
<li>
|
</LegalParagraph>
|
||||||
To harass, abuse, insult, harm, defame, slander, disparage,
|
<LegalParagraph>
|
||||||
intimidate, or discriminate
|
You retain ownership of the content you enter into the Service, such as
|
||||||
</li>
|
clients, invoices, and time entries. We do not sell your personal
|
||||||
<li>To submit false or misleading information</li>
|
information. We may process your data as described in the Privacy
|
||||||
<li>
|
Policy to provide and secure the Service.
|
||||||
To upload or transmit viruses or any other type of malicious code
|
</LegalParagraph>
|
||||||
</li>
|
<LegalParagraph>
|
||||||
<li>To spam, phish, pharm, pretext, spider, crawl, or scrape</li>
|
You are responsible for maintaining your own backups of important
|
||||||
<li>For any obscene or immoral purpose</li>
|
business records. While we take reasonable steps to protect data, you
|
||||||
<li>
|
should not rely on the Service as your only copy of critical
|
||||||
To interfere with or circumvent the security features of the
|
information.
|
||||||
Service
|
</LegalParagraph>
|
||||||
</li>
|
</>
|
||||||
</ul>
|
),
|
||||||
</CardContent>
|
},
|
||||||
</Card>
|
{
|
||||||
|
id: "fees",
|
||||||
<Card>
|
title: "Fees",
|
||||||
<CardHeader>
|
children: (
|
||||||
<CardTitle>Data and Privacy</CardTitle>
|
<>
|
||||||
</CardHeader>
|
<LegalParagraph>
|
||||||
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
|
Access to the Service may be offered without charge today, but we
|
||||||
<p>
|
reserve the right to introduce fees for certain features or hosted
|
||||||
Your privacy is important to us. Please review our{" "}
|
plans in the future. If we do, we will provide reasonable notice
|
||||||
<Link href="/privacy">Privacy Policy</Link>, which also governs your
|
before any new fees apply to you.
|
||||||
use of the Service, to understand our practices.
|
</LegalParagraph>
|
||||||
</p>
|
<LegalParagraph>
|
||||||
<p>
|
The mobile app does not offer in-app purchases. If you run a
|
||||||
You retain ownership of your data. We will not sell, rent, or share
|
self-hosted instance, you are responsible for the costs and
|
||||||
your personal information with third parties without your explicit
|
administration of that environment.
|
||||||
consent, except as described in our Privacy Policy.
|
</LegalParagraph>
|
||||||
</p>
|
</>
|
||||||
<p>
|
),
|
||||||
You are responsible for backing up your data. While we implement
|
},
|
||||||
regular backups, we recommend you maintain your own copies of
|
{
|
||||||
important information.
|
id: "intellectual-property",
|
||||||
</p>
|
title: "Intellectual property",
|
||||||
</CardContent>
|
children: (
|
||||||
</Card>
|
<>
|
||||||
|
<LegalParagraph>
|
||||||
<Card>
|
The Service, including its software, design, and branding, is owned by{" "}
|
||||||
<CardHeader>
|
{brand.name} and its licensors and is protected by applicable
|
||||||
<CardTitle>Payment Terms</CardTitle>
|
intellectual property laws.
|
||||||
</CardHeader>
|
</LegalParagraph>
|
||||||
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
|
<LegalParagraph>
|
||||||
<p>
|
You may not copy, modify, or reverse engineer the Service except where
|
||||||
Some aspects of the Service may require payment. You will be charged
|
the law expressly allows. Our name and marks may not be used without
|
||||||
according to your subscription plan. All fees are non-refundable
|
our prior written permission.
|
||||||
unless otherwise stated.
|
</LegalParagraph>
|
||||||
</p>
|
</>
|
||||||
<p>
|
),
|
||||||
We may change our fees at any time. We will provide you with
|
},
|
||||||
reasonable notice of any fee changes by posting the new fees on the
|
{
|
||||||
Service or sending you email notification.
|
id: "termination",
|
||||||
</p>
|
title: "Termination",
|
||||||
<p>
|
children: (
|
||||||
If you fail to pay any fees when due, we may suspend or terminate
|
<>
|
||||||
your access to the Service until payment is made.
|
<LegalParagraph>
|
||||||
</p>
|
You may stop using the Service at any time. You may also contact us to
|
||||||
</CardContent>
|
request account deletion.
|
||||||
</Card>
|
</LegalParagraph>
|
||||||
|
<LegalParagraph>
|
||||||
<Card>
|
We may suspend or terminate your access if you violate these Terms, if
|
||||||
<CardHeader>
|
required by law, or if we discontinue the Service. Upon termination,
|
||||||
<CardTitle>Intellectual Property Rights</CardTitle>
|
your right to use the Service ends immediately, subject to any legal
|
||||||
</CardHeader>
|
obligations that require us to retain certain data.
|
||||||
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
|
</LegalParagraph>
|
||||||
<p>
|
</>
|
||||||
The Service and its original content, features, and functionality
|
),
|
||||||
are and will remain the exclusive property of {brand.name} and its
|
},
|
||||||
licensors. The Service is protected by copyright, trademark, and
|
{
|
||||||
other laws.
|
id: "disclaimers",
|
||||||
</p>
|
title: "Disclaimers and limitation of liability",
|
||||||
<p>
|
children: (
|
||||||
Our trademarks and trade dress may not be used in connection with
|
<>
|
||||||
any product or service without our prior written consent.
|
<LegalParagraph>
|
||||||
</p>
|
The Service is provided “as is” and “as available.” To the fullest
|
||||||
</CardContent>
|
extent permitted by law, we disclaim warranties of merchantability,
|
||||||
</Card>
|
fitness for a particular purpose, and non-infringement. We do not
|
||||||
|
guarantee that the Service will be uninterrupted or error-free.
|
||||||
<Card>
|
</LegalParagraph>
|
||||||
<CardHeader>
|
<LegalParagraph>
|
||||||
<CardTitle>Termination</CardTitle>
|
To the fullest extent permitted by law, {brand.name} and its
|
||||||
</CardHeader>
|
affiliates will not be liable for indirect, incidental, special,
|
||||||
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
|
consequential, or punitive damages, or for loss of profits, data, or
|
||||||
<p>
|
goodwill, arising from your use of the Service.
|
||||||
We may terminate or suspend your account and bar access to the
|
</LegalParagraph>
|
||||||
Service immediately, without prior notice or liability, under our
|
<LegalParagraph>
|
||||||
sole discretion, for any reason whatsoever and without limitation,
|
Nothing in these Terms limits liability that cannot be limited under
|
||||||
including but not limited to a breach of the Terms.
|
applicable law, including liability for fraud or for death or personal
|
||||||
</p>
|
injury caused by negligence.
|
||||||
<p>
|
</LegalParagraph>
|
||||||
If you wish to terminate your account, you may discontinue using the
|
</>
|
||||||
Service and contact us to request account deletion.
|
),
|
||||||
</p>
|
},
|
||||||
<p>
|
{
|
||||||
Upon termination, your right to use the Service will cease
|
id: "general",
|
||||||
immediately.
|
title: "General",
|
||||||
</p>
|
children: (
|
||||||
</CardContent>
|
<>
|
||||||
</Card>
|
<LegalParagraph>
|
||||||
|
These Terms are governed by the laws applicable where {brand.name}{" "}
|
||||||
<Card>
|
operates, without regard to conflict-of-law rules. If we do not
|
||||||
<CardHeader>
|
enforce a provision, that does not waive our right to enforce it
|
||||||
<CardTitle>Disclaimer of Warranties</CardTitle>
|
later.
|
||||||
</CardHeader>
|
</LegalParagraph>
|
||||||
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
|
<LegalParagraph>
|
||||||
<p>
|
We may update these Terms from time to time. If we make material
|
||||||
The information on this Service is provided on an "as is"
|
changes, we will post the updated Terms on the Service and may notify
|
||||||
basis. To the fullest extent permitted by law, we exclude all
|
you by email. Continued use after changes take effect means you accept
|
||||||
representations, warranties, and conditions relating to our Service
|
the revised Terms.
|
||||||
and the use of this Service.
|
</LegalParagraph>
|
||||||
</p>
|
</>
|
||||||
<p>
|
),
|
||||||
Nothing in this disclaimer will limit or exclude our or your
|
},
|
||||||
liability for death or personal injury resulting from negligence,
|
{
|
||||||
fraud, or fraudulent misrepresentation.
|
id: "contact",
|
||||||
</p>
|
title: "Contact",
|
||||||
</CardContent>
|
children: (
|
||||||
</Card>
|
<>
|
||||||
|
<LegalParagraph>
|
||||||
<Card>
|
Questions about these Terms:{" "}
|
||||||
<CardHeader>
|
<a href={`mailto:${LEGAL_TERMS_EMAIL}`}>{LEGAL_TERMS_EMAIL}</a>.
|
||||||
<CardTitle>Limitation of Liability</CardTitle>
|
Privacy questions:{" "}
|
||||||
</CardHeader>
|
<a href={`mailto:${LEGAL_PRIVACY_EMAIL}`}>{LEGAL_PRIVACY_EMAIL}</a>.
|
||||||
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
|
|
||||||
<p>
|
|
||||||
In no event shall {brand.name}, nor its directors, employees,
|
|
||||||
partners, agents, suppliers, or affiliates, be liable for any
|
|
||||||
indirect, incidental, special, consequential, or punitive damages,
|
|
||||||
including without limitation, loss of profits, data, use, goodwill, or
|
|
||||||
other intangible losses, resulting from your use of the Service.
|
|
||||||
</p>
|
|
||||||
</CardContent>
|
|
||||||
</Card>
|
|
||||||
|
|
||||||
<Card>
|
|
||||||
<CardHeader>
|
|
||||||
<CardTitle>Governing Law</CardTitle>
|
|
||||||
</CardHeader>
|
|
||||||
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
|
|
||||||
<p>
|
|
||||||
These Terms shall be interpreted and governed by the laws of the
|
|
||||||
jurisdiction in which {brand.name} operates, without regard to its
|
|
||||||
conflict of law provisions.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Our failure to enforce any right or provision of these Terms will
|
|
||||||
not be considered a waiver of those rights.
|
|
||||||
</p>
|
|
||||||
</CardContent>
|
|
||||||
</Card>
|
|
||||||
|
|
||||||
<Card>
|
|
||||||
<CardHeader>
|
|
||||||
<CardTitle>Changes to Terms</CardTitle>
|
|
||||||
</CardHeader>
|
|
||||||
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
|
|
||||||
<p>
|
|
||||||
We reserve the right, at our sole discretion, to modify or replace
|
|
||||||
these Terms at any time. If a revision is material, we will provide
|
|
||||||
at least 30 days notice prior to any new terms taking effect.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
What constitutes a material change will be determined at our sole
|
|
||||||
discretion. By continuing to access or use our Service after any
|
|
||||||
revisions become effective, you agree to be bound by the revised
|
|
||||||
terms.
|
|
||||||
</p>
|
|
||||||
</CardContent>
|
|
||||||
</Card>
|
|
||||||
|
|
||||||
<Card>
|
|
||||||
<CardHeader>
|
|
||||||
<CardTitle>Contact Information</CardTitle>
|
|
||||||
</CardHeader>
|
|
||||||
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
|
|
||||||
<p>
|
|
||||||
If you have any questions about these Terms of Service, please
|
|
||||||
contact us at:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
Email:{" "}
|
|
||||||
<a href={`mailto:${LEGAL_TERMS_EMAIL}`}>{LEGAL_TERMS_EMAIL}</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
Privacy inquiries:{" "}
|
|
||||||
<a href={`mailto:${LEGAL_PRIVACY_EMAIL}`}>{LEGAL_PRIVACY_EMAIL}</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
Website:{" "}
|
Website:{" "}
|
||||||
<a href={LEGAL_WEBSITE} target="_blank" rel="noopener noreferrer">
|
<a href={LEGAL_WEBSITE} target="_blank" rel="noopener noreferrer">
|
||||||
{LEGAL_WEBSITE}
|
{LEGAL_WEBSITE.replace(/^https?:\/\//, "")}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
.
|
||||||
</ul>
|
</LegalParagraph>
|
||||||
</CardContent>
|
|
||||||
</Card>
|
|
||||||
</>
|
</>
|
||||||
);
|
),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
export function TermsOfServiceContent() {
|
||||||
|
return <LegalDocument sections={sections} />;
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -1,5 +1,5 @@
|
|||||||
export const LEGAL_LAST_UPDATED = "June 18, 2026";
|
export const LEGAL_LAST_UPDATED = "June 18, 2026";
|
||||||
|
|
||||||
export const LEGAL_PRIVACY_EMAIL = "privacy@beenvoice.com";
|
export const LEGAL_PRIVACY_EMAIL = "privacy@soconnor.dev";
|
||||||
export const LEGAL_TERMS_EMAIL = "legal@beenvoice.com";
|
export const LEGAL_TERMS_EMAIL = "legal@soconnor.dev";
|
||||||
export const LEGAL_WEBSITE = "https://beenvoice.com";
|
export const LEGAL_WEBSITE = "https://beenvoice.soconnor.dev";
|
||||||
|
|||||||
Reference in New Issue
Block a user