File
Blob: src/client/pages/terms.tsx
| 1 | import type { ReactNode } from "react"; |
| 2 | import { Link } from "react-router"; |
| 3 | |
| 4 | import { ContactEmail } from "@/client/components/ui/contact-email"; |
| 5 | import { useClientConfig } from "@/client/lib/config"; |
| 6 | |
| 7 | const 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 | |
| 14 | export 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 | }; |