244 lines · 12.5 KB
import { createFileRoute } from "@tanstack/react-router";
import { Fact, LegalPage, LegalSection, MailLink, Operator } from "~/components/legal/LegalPage";
import { getLegalInfo } from "~/fns/legal";
import { TextLink } from "~/ui/TextLink";
import { seo } from "~/utils/seo";

export const Route = createFileRoute("/privacy")({
  loader: () => getLegalInfo(),
  head: ({ match }) => ({
    meta: seo({
      origin: match.context.publicUrl,
      path: "/privacy",
      title: "Privacy Policy · gitfor",
      description: "What gitfor collects, why, who processes it and your rights.",
    }),
  }),
  component: PrivacyPage,
});

const COLLECTED = [
  {
    what: "Account data",
    detail:
      "Username, email addresses (primary and added), password hash (PBKDF2; we never store the password), display name, bio, website, avatar, two-factor and passkey public credentials, and, if you sign in with GitHub, your GitHub user id, login and verified email.",
  },
  {
    what: "Content",
    detail:
      "Repositories and their history, LFS objects, issues, pull requests, reviews, comments, discussions, reactions, releases and attachments, wikis, projects, CI workflow files, logs and artifacts, Sites files, and secrets you store (encrypted at rest).",
  },
  {
    what: "Credentials metadata",
    detail:
      "Personal access tokens, deploy tokens, agent tokens and OAuth grants: we keep a hash, name, scopes, creation, expiry and last-use times, never the plaintext after it is shown to you once.",
  },
  {
    what: "Security and request data",
    detail:
      "IP address and user agent on sessions and sign-in notices, a coarse IP bucket for rate limiting, Turnstile challenge results on signup and sign-in, and short-lived request logs kept by Cloudflare for operating and securing the service.",
  },