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:
2026-06-18 02:44:43 -04:00
parent 5019a7597d
commit 4cd8ad3c4c
7 changed files with 546 additions and 665 deletions
+101
View File
@@ -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>
);
}
+26 -15
View File
@@ -2,38 +2,49 @@ import Link from "next/link";
import { ArrowLeft } from "lucide-react";
import { Button } from "~/components/ui/button";
import { Logo } from "~/components/branding/logo";
import { LEGAL_LAST_UPDATED } from "~/lib/legal";
type LegalPageShellProps = {
title: string;
description?: string;
children: React.ReactNode;
};
export function LegalPageShell({ title, children }: LegalPageShellProps) {
export function LegalPageShell({
title,
description,
children,
}: LegalPageShellProps) {
return (
<div className="bg-background min-h-screen">
<div className="bg-card border-b">
<div className="container mx-auto max-w-4xl px-6 py-6">
<div className="flex items-center gap-4">
<header className="border-border bg-card/80 border-b backdrop-blur-sm">
<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 flex-wrap items-center justify-between gap-4">
<Logo size="sm" />
<Link href="/">
<Button variant="outline" size="sm">
<ArrowLeft className="mr-2 h-4 w-4" />
Back
Back to app
</Button>
</Link>
<div>
<h1 className="text-2xl font-bold">{title}</h1>
<p className="text-muted-foreground text-sm">
Last updated: {LEGAL_LAST_UPDATED}
</p>
</div>
</div>
<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">
Last updated {LEGAL_LAST_UPDATED}
</p>
</div>
</div>
</div>
</header>
<div className="container mx-auto max-w-4xl px-6 py-8">
<div className="space-y-6">{children}</div>
</div>
<main className="container mx-auto max-w-6xl px-4 py-8 sm:px-6 sm:py-10">
{children}
</main>
</div>
);
}
+184 -365
View File
@@ -1,373 +1,192 @@
import Link from "next/link";
import { Card, CardContent, CardHeader, CardTitle } from "~/components/ui/card";
import {
LEGAL_PRIVACY_EMAIL,
LEGAL_TERMS_EMAIL,
LEGAL_WEBSITE,
} from "~/lib/legal";
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() {
return (
<>
<Card>
<CardHeader>
<CardTitle>Introduction</CardTitle>
</CardHeader>
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
<p>
{brand.name} (&quot;we&quot;, &quot;our&quot;, or &quot;us&quot;) 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 &quot;Contact Us&quot; 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&apos;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>
</>
);
return <LegalDocument sections={sections} />;
}
+224 -280
View File
@@ -1,291 +1,235 @@
import Link from "next/link";
import { Card, CardContent, CardHeader, CardTitle } from "~/components/ui/card";
import {
LEGAL_PRIVACY_EMAIL,
LEGAL_TERMS_EMAIL,
LEGAL_WEBSITE,
} from "~/lib/legal";
import { brand } from "~/lib/branding";
import {
LegalDocument,
LegalParagraph,
type LegalSection,
} from "~/components/legal/legal-document";
const sections: LegalSection[] = [
{
id: "agreement",
title: "Agreement to these terms",
children: (
<>
<LegalParagraph>
These Terms of Service (Terms) govern your use of the {brand.name}{" "}
platform, including the web app and mobile app (the Service).
</LegalParagraph>
<LegalParagraph>
By accessing or using the Service, you agree to these Terms. If you do
not agree, do not use the Service.
</LegalParagraph>
</>
),
},
{
id: "service",
title: "The Service",
children: (
<>
<LegalParagraph>
{brand.name} helps you create and manage invoices, track clients and
businesses, record billable time, and review basic financial summaries.
You may use the official hosted Service or connect the mobile app to a
self-hosted {brand.name} server you control.
</LegalParagraph>
<LegalParagraph>
The Service is a tool for your business records. We do not provide
legal, tax, or accounting advice, and you are responsible for the
accuracy of invoices and compliance with laws that apply to you.
</LegalParagraph>
</>
),
},
{
id: "accounts",
title: "Accounts and security",
children: (
<>
<LegalParagraph>
When you create an account, you agree to provide accurate information
and keep it up to date. You are responsible for activity under your
account and for keeping your credentials secure.
</LegalParagraph>
<LegalParagraph>
Notify us promptly if you suspect unauthorized access to your account.
We may suspend or restrict access if we believe your account is
compromised or used in violation of these Terms.
</LegalParagraph>
</>
),
},
{
id: "acceptable-use",
title: "Acceptable use",
children: (
<>
<LegalParagraph>
You agree to use the Service lawfully and only for its intended
purpose. You may not use the Service to break the law, infringe
others rights, transmit malware, attempt to gain unauthorized access,
interfere with the Services operation, or harass or harm others.
</LegalParagraph>
<LegalParagraph>
You may not use the Service to send spam, publish false or misleading
information, or scrape or overload our systems without permission.
</LegalParagraph>
</>
),
},
{
id: "data-privacy",
title: "Your data and privacy",
children: (
<>
<LegalParagraph>
Your privacy matters to us. Our{" "}
<Link href="/privacy">Privacy Policy</Link> explains how we collect
and use information and is incorporated into these Terms.
</LegalParagraph>
<LegalParagraph>
You retain ownership of the content you enter into the Service, such as
clients, invoices, and time entries. We do not sell your personal
information. We may process your data as described in the Privacy
Policy to provide and secure the Service.
</LegalParagraph>
<LegalParagraph>
You are responsible for maintaining your own backups of important
business records. While we take reasonable steps to protect data, you
should not rely on the Service as your only copy of critical
information.
</LegalParagraph>
</>
),
},
{
id: "fees",
title: "Fees",
children: (
<>
<LegalParagraph>
Access to the Service may be offered without charge today, but we
reserve the right to introduce fees for certain features or hosted
plans in the future. If we do, we will provide reasonable notice
before any new fees apply to you.
</LegalParagraph>
<LegalParagraph>
The mobile app does not offer in-app purchases. If you run a
self-hosted instance, you are responsible for the costs and
administration of that environment.
</LegalParagraph>
</>
),
},
{
id: "intellectual-property",
title: "Intellectual property",
children: (
<>
<LegalParagraph>
The Service, including its software, design, and branding, is owned by{" "}
{brand.name} and its licensors and is protected by applicable
intellectual property laws.
</LegalParagraph>
<LegalParagraph>
You may not copy, modify, or reverse engineer the Service except where
the law expressly allows. Our name and marks may not be used without
our prior written permission.
</LegalParagraph>
</>
),
},
{
id: "termination",
title: "Termination",
children: (
<>
<LegalParagraph>
You may stop using the Service at any time. You may also contact us to
request account deletion.
</LegalParagraph>
<LegalParagraph>
We may suspend or terminate your access if you violate these Terms, if
required by law, or if we discontinue the Service. Upon termination,
your right to use the Service ends immediately, subject to any legal
obligations that require us to retain certain data.
</LegalParagraph>
</>
),
},
{
id: "disclaimers",
title: "Disclaimers and limitation of liability",
children: (
<>
<LegalParagraph>
The Service is provided as is and as available. To the fullest
extent permitted by law, we disclaim warranties of merchantability,
fitness for a particular purpose, and non-infringement. We do not
guarantee that the Service will be uninterrupted or error-free.
</LegalParagraph>
<LegalParagraph>
To the fullest extent permitted by law, {brand.name} and its
affiliates will not be liable for indirect, incidental, special,
consequential, or punitive damages, or for loss of profits, data, or
goodwill, arising from your use of the Service.
</LegalParagraph>
<LegalParagraph>
Nothing in these Terms limits liability that cannot be limited under
applicable law, including liability for fraud or for death or personal
injury caused by negligence.
</LegalParagraph>
</>
),
},
{
id: "general",
title: "General",
children: (
<>
<LegalParagraph>
These Terms are governed by the laws applicable where {brand.name}{" "}
operates, without regard to conflict-of-law rules. If we do not
enforce a provision, that does not waive our right to enforce it
later.
</LegalParagraph>
<LegalParagraph>
We may update these Terms from time to time. If we make material
changes, we will post the updated Terms on the Service and may notify
you by email. Continued use after changes take effect means you accept
the revised Terms.
</LegalParagraph>
</>
),
},
{
id: "contact",
title: "Contact",
children: (
<>
<LegalParagraph>
Questions about these Terms:{" "}
<a href={`mailto:${LEGAL_TERMS_EMAIL}`}>{LEGAL_TERMS_EMAIL}</a>.
Privacy questions:{" "}
<a href={`mailto:${LEGAL_PRIVACY_EMAIL}`}>{LEGAL_PRIVACY_EMAIL}</a>.
Website:{" "}
<a href={LEGAL_WEBSITE} target="_blank" rel="noopener noreferrer">
{LEGAL_WEBSITE.replace(/^https?:\/\//, "")}
</a>
.
</LegalParagraph>
</>
),
},
];
export function TermsOfServiceContent() {
return (
<>
<Card>
<CardHeader>
<CardTitle>Agreement to Terms</CardTitle>
</CardHeader>
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
<p>
These Terms of Service (&quot;Terms&quot;) govern your use of the{" "}
{brand.name} platform and services (the &quot;Service&quot;) operated
by {brand.name} (&quot;us&quot;, &quot;we&quot;, or &quot;our&quot;).
</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
access the Service.
</p>
</CardContent>
</Card>
<Card>
<CardHeader>
<CardTitle>Description of Service</CardTitle>
</CardHeader>
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
<p>
{brand.name} is a web-based invoicing platform that allows users to:
</p>
<ul>
<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>
<li>Manage business profiles and settings</li>
</ul>
</CardContent>
</Card>
<Card>
<CardHeader>
<CardTitle>User Accounts</CardTitle>
</CardHeader>
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
<p>
When you create an account with us, you must provide information that
is accurate, complete, and current at all times. You are responsible
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
notify us immediately upon becoming aware of any breach of security
or unauthorized use of your account.
</p>
</CardContent>
</Card>
<Card>
<CardHeader>
<CardTitle>Acceptable Use</CardTitle>
</CardHeader>
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
<p>You agree not to use the Service:</p>
<ul>
<li>
For any unlawful purpose or to solicit others to perform unlawful
acts
</li>
<li>
To violate any international, federal, provincial, or state
regulations, rules, laws, or local ordinances
</li>
<li>
To infringe upon or violate our intellectual property rights or
the intellectual property rights of others
</li>
<li>
To harass, abuse, insult, harm, defame, slander, disparage,
intimidate, or discriminate
</li>
<li>To submit false or misleading information</li>
<li>
To upload or transmit viruses or any other type of malicious code
</li>
<li>To spam, phish, pharm, pretext, spider, crawl, or scrape</li>
<li>For any obscene or immoral purpose</li>
<li>
To interfere with or circumvent the security features of the
Service
</li>
</ul>
</CardContent>
</Card>
<Card>
<CardHeader>
<CardTitle>Data and Privacy</CardTitle>
</CardHeader>
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
<p>
Your privacy is important to us. Please review our{" "}
<Link href="/privacy">Privacy Policy</Link>, which also governs your
use of the Service, to understand our practices.
</p>
<p>
You retain ownership of your data. We will not sell, rent, or share
your personal information with third parties without your explicit
consent, except as described in our Privacy Policy.
</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.
</p>
</CardContent>
</Card>
<Card>
<CardHeader>
<CardTitle>Payment Terms</CardTitle>
</CardHeader>
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
<p>
Some aspects of the Service may require payment. You will be charged
according to your subscription plan. All fees are non-refundable
unless otherwise stated.
</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.
</p>
<p>
If you fail to pay any fees when due, we may suspend or terminate
your access to the Service until payment is made.
</p>
</CardContent>
</Card>
<Card>
<CardHeader>
<CardTitle>Intellectual Property Rights</CardTitle>
</CardHeader>
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
<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.
</p>
<p>
Our trademarks and trade dress may not be used in connection with
any product or service without our prior written consent.
</p>
</CardContent>
</Card>
<Card>
<CardHeader>
<CardTitle>Termination</CardTitle>
</CardHeader>
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
<p>
We may terminate or suspend your account and bar access to the
Service immediately, without prior notice or liability, under our
sole discretion, for any reason whatsoever and without limitation,
including but not limited to a breach of the Terms.
</p>
<p>
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
immediately.
</p>
</CardContent>
</Card>
<Card>
<CardHeader>
<CardTitle>Disclaimer of Warranties</CardTitle>
</CardHeader>
<CardContent className="prose prose-sm max-w-none dark:prose-invert">
<p>
The information on this Service is provided on an &quot;as is&quot;
basis. To the fullest extent permitted by law, we exclude all
representations, warranties, and conditions relating to our Service
and the use of this Service.
</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.
</p>
</CardContent>
</Card>
<Card>
<CardHeader>
<CardTitle>Limitation of Liability</CardTitle>
</CardHeader>
<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:{" "}
<a href={LEGAL_WEBSITE} target="_blank" rel="noopener noreferrer">
{LEGAL_WEBSITE}
</a>
</li>
</ul>
</CardContent>
</Card>
</>
);
return <LegalDocument sections={sections} />;
}