From 14dc5cac5c237dd64480da85c4983d1375465adf Mon Sep 17 00:00:00 2001 From: Josh Panka Date: Fri, 16 Oct 2026 13:14:15 -0400 Subject: [PATCH] feat: the privacy policy and terms of service, linked from the footer Two pages on the marketing site, /privacy and /terms, written for what the product does: a self-hosted install sends us nothing but the sign-in, keys are never pooled, rows go to the providers the person configured under their keys, the software is Apache 2.0 and an install is governed by that licence. The operator is Obris LLC, the law Massachusetts, the mailboxes privacy@, support@ and security@. The footer is regrouped by what the information is: the fine print on the left (the copyright naming Obris LLC, the licence, Privacy, Terms) and the places to go next on the right (Docs, GitHub); on a phone the groups stack with the links first. "All rights reserved" is gone, since the licence says otherwise. The sitemap lists both pages. --- .../marketing/src/app/_components/Footer.tsx | 38 +++-- .../src/app/_components/LegalPage.tsx | 38 +++++ web/apps/marketing/src/app/privacy/page.tsx | 131 ++++++++++++++++ web/apps/marketing/src/app/sitemap.ts | 7 +- web/apps/marketing/src/app/terms/page.tsx | 141 ++++++++++++++++++ 5 files changed, 342 insertions(+), 13 deletions(-) create mode 100644 web/apps/marketing/src/app/_components/LegalPage.tsx create mode 100644 web/apps/marketing/src/app/privacy/page.tsx create mode 100644 web/apps/marketing/src/app/terms/page.tsx diff --git a/web/apps/marketing/src/app/_components/Footer.tsx b/web/apps/marketing/src/app/_components/Footer.tsx index f8e0aaf9b..6886b521a 100644 --- a/web/apps/marketing/src/app/_components/Footer.tsx +++ b/web/apps/marketing/src/app/_components/Footer.tsx @@ -1,23 +1,37 @@ -import { DOCS_URL } from "../_lib/urls"; +import Link from "next/link"; + +import { DOCS_URL, GITHUB_URL } from "../_lib/urls"; import { GithubLink } from "./GithubLink"; +/** Two groups, which is the information: the fine print (who holds the + * copyright, the licence that qualifies it, the two legal pages) on the + * left in the quiet tone, and the places to go next (docs, the code) on + * the right. On a phone the groups + * stack, links first and fine print last, in their order of importance + * rather than their DOM order. No "all rights reserved": the software is + * Apache 2.0 and the line would say otherwise. */ export function Footer() { + const quiet = "transition-colors hover:text-ink dark:hover:text-paper"; return ( diff --git a/web/apps/marketing/src/app/_components/LegalPage.tsx b/web/apps/marketing/src/app/_components/LegalPage.tsx new file mode 100644 index 000000000..3b6fdaf78 --- /dev/null +++ b/web/apps/marketing/src/app/_components/LegalPage.tsx @@ -0,0 +1,38 @@ +import type { ReactNode } from "react"; + +import { Footer } from "./Footer"; +import { Navbar } from "./Navbar"; + +/** The shell the two legal pages share: the site chrome around a + * narrow reading measure. Sections are plain h2 + paragraphs so the + * text, not the layout, carries the page. */ +export function LegalPage({ title, effective, children }: { title: string; effective: string; children: ReactNode }) { + return ( + <> + +
+

{title}

+

Effective {effective}

+
{children}
+
+