Skip to content
File

Blob: src/client/pages/terms.tsx

typescript156 lines
1import type { ReactNode } from "react";
2import { Link } from "react-router";
3 
4import { ContactEmail } from "@/client/components/ui/contact-email";
5import { useClientConfig } from "@/client/lib/config";
6 
7const Section = ({ title, children }: { title: string; children: ReactNode }) => (
8 <section className="mt-12">
9 <h2 className="mb-4 font-display text-xl font-semibold text-zinc-100">{title}</h2>
10 <div className="space-y-4 text-base leading-[1.7] text-zinc-300">{children}</div>
11 </section>
12);
13 
14export const TermsPage = () => {
15 const config = useClientConfig();
16 if (!config || config.status !== "ok") return null;
17 const { operatorName, operatorContactEmail } = config;
18 
19 return (
20 <div className="mx-auto max-w-2xl py-12 sm:py-20">
21 <p className="mb-6 text-[11px] font-medium uppercase tracking-[0.18em] text-zinc-500">Terms of service</p>
22
23 <h1 className="mb-6 font-display text-[clamp(2rem,5.5vw,3.25rem)] font-semibold leading-[1.05] tracking-tight text-zinc-100">
24 Terms of service
25 </h1>
26
27 <p className="mb-10 text-sm text-zinc-500">Effective April 27, 2026.</p>
28
29 <p className="max-w-[60ch] text-base leading-[1.7] text-zinc-300">
30 These terms govern your use of tessera, a single sign-on service operated by {operatorName} ("we", "us"). By
31 accepting an invite, signing in, or otherwise using tessera you agree to these terms. If you do not agree, do
32 not use the service.
33 </p>
34
35 <Section title="The service">
36 <p>
37 tessera is an OAuth 2.1 and OpenID Connect provider. It authenticates users on behalf of applications
38 registered by an administrator and issues identity tokens that those applications can verify. tessera is
39 intended to be operated as private infrastructure for a small group of invited users.
40 </p>
41 </Section>
42
43 <Section title="Eligibility and accounts">
44 <p>
45 tessera is invite-only. You may use the service only if an administrator has minted an invite for your email
46 address and you accept it. You must be at least 13 years old. Signing in with Google or GitHub does not create
47 an account; you must already have a tessera account and have explicitly linked that identity from your account
48 page.
49 </p>
50 <p>
51 You are responsible for keeping your password and any linked identity providers secure. You are responsible
52 for all activity that occurs under your account. Notify us promptly at{" "}
53 <ContactEmail address={operatorContactEmail} /> if you believe your account has been accessed without your
54 authorization.
55 </p>
56 </Section>
57
58 <Section title="Acceptable use">
59 <p>You agree not to:</p>
60 <ul className="list-disc space-y-2 pl-6">
61 <li>Use tessera to violate any law or any third party's rights.</li>
62 <li>Attempt to access another user's account or to bypass authentication, rate limits, or invite gates.</li>
63 <li>
64 Probe, scan, or test the vulnerability of the service or related infrastructure without prior written
65 permission.
66 </li>
67 <li>
68 Submit automated traffic intended to disrupt the service or to enumerate accounts, invites, or OAuth
69 clients.
70 </li>
71 <li>
72 Reverse engineer, decompile, or otherwise attempt to extract source code from the running service, except to
73 the extent permitted by law. (The tessera source itself is published under its own license; this clause
74 concerns the operating service.)
75 </li>
76 </ul>
77 <p>
78 We may suspend or terminate access for any user who violates these rules or whose use of the service creates a
79 security or operational risk.
80 </p>
81 </Section>
82
83 <Section title="Third-party identity providers">
84 <p>
85 If you choose to link a Google or GitHub identity to your tessera account, your use of those providers is also
86 governed by the providers' own terms. We are not responsible for the availability or behavior of third-party
87 identity providers.
88 </p>
89 </Section>
90
91 <Section title="Privacy">
92 <p>
93 Our handling of personal information is described in the{" "}
94 <Link
95 to="/privacy"
96 className="text-zinc-100 underline decoration-zinc-700 underline-offset-[6px] transition-colors hover:text-accent-400 hover:decoration-accent-500/60"
97 >
98 privacy policy
99 </Link>
100 , which is incorporated into these terms by reference.
101 </p>
102 </Section>
103
104 <Section title="Service availability and changes">
105 <p>
106 tessera is provided on a best-effort basis and may be unavailable from time to time for maintenance, upgrades,
107 or reasons outside our control. We may add, remove, or change features at any time. We may also update these
108 terms; material changes will be communicated through the service or by email.
109 </p>
110 </Section>
111
112 <Section title="No warranty">
113 <p>
114 tessera is provided "as is" and "as available" without warranties of any kind, whether express or implied,
115 including warranties of merchantability, fitness for a particular purpose, non-infringement, and that the
116 service will be uninterrupted or error-free. You use the service at your own risk.
117 </p>
118 </Section>
119
120 <Section title="Limitation of liability">
121 <p>
122 To the maximum extent permitted by law, {operatorName} and its operators will not be liable for any indirect,
123 incidental, special, consequential, or punitive damages, or for any loss of profits, revenues, data, or
124 goodwill, arising out of or in connection with your use of the service. Our total liability for any claim
125 arising from these terms or the service is limited to one hundred US dollars (US $100).
126 </p>
127 </Section>
128
129 <Section title="Termination">
130 <p>
131 You may stop using tessera at any time and may delete your account by emailing{" "}
132 <ContactEmail address={operatorContactEmail} /> from the address on file. We may suspend or terminate your
133 account for any reason, including violation of these terms or operational necessity. Upon termination, your
134 right to use the service ends immediately; provisions that by their nature should survive termination,
135 including disclaimers, limitations of liability, and governing law, will survive.
136 </p>
137 </Section>
138
139 <Section title="Governing law and disputes">
140 <p>
141 These terms are governed by the laws of the State of California, without regard to its conflict-of-laws rules.
142 The exclusive venue for any dispute arising out of these terms or the service is the state and federal courts
143 located in San Francisco County, California, and you consent to the personal jurisdiction of those courts.
144 Nothing in these terms limits any rights you may have under applicable consumer protection laws.
145 </p>
146 </Section>
147
148 <Section title="Contact">
149 <p>
150 Questions about these terms can be sent to <ContactEmail address={operatorContactEmail} />.
151 </p>
152 </Section>
153 </div>
154 );
155};