Skip to content

Where people and agents ship software together. The open-source git platform for the whole job: issues, agents, checks and deploys to the edge.

86 linesCodeBlameRaw
1import { ArrowRight } from "lucide-react";
2import { Link } from "react-router";
3
4import type { Route } from "./+types/policies";
5import { PoliciesDraft } from "../components/policies-draft";
6import { TrustPage } from "../components/trust-page";
7import { CONTACT, POLICIES, POLICIES_UPDATED, POLICY_HISTORY, longDate } from "../lib/legal";
8import { page } from "../lib/meta";
9import { Card } from "../components/ui/card";
10
11export function meta(args: Route.MetaArgs) {
12 return page(args, {
13 title: "Policies · g1t",
14 description:
15 "g1t's Terms of Service, Privacy Policy, Acceptable Use Policy, refunds and subprocessors, in plain language, with every change listed.",
16 });
17}
18
19export default function Policies() {
20 return (
21 <TrustPage
22 eyebrow="Policies"
23 title="The rules we both play by"
24 lede={
25 <p>
26 What you agree to when you use g1t, and what we promise in return, written to be read. Last
27 updated {longDate(POLICIES_UPDATED)}.
28 </p>
29 }
30 >
31 <PoliciesDraft />
32 <ul className="grid gap-3 sm:grid-cols-2">
33 {POLICIES.map((policy) => (
34 <li key={policy.slug}>
35 <Link
36 to={`/policies/${policy.slug}`}
37 className="group flex h-full flex-col rounded-xl border border-line bg-surface p-5 transition-colors hover:border-line-strong hover:bg-raised"
38 >
39 <span className="flex items-center justify-between gap-3 font-medium">
40 {policy.title}
41 <ArrowRight size={15} className="shrink-0 text-faint transition-transform group-hover:translate-x-0.5 group-hover:text-fg" />
42 </span>
43 <span className="mt-1.5 text-sm text-muted">{policy.summary}</span>
44 </Link>
45 </li>
46 ))}
47 <li>
48 <Link
49 to="/security"
50 className="group flex h-full flex-col rounded-xl border border-line bg-surface p-5 transition-colors hover:border-line-strong hover:bg-raised"
51 >
52 <span className="flex items-center justify-between gap-3 font-medium">
53 Security and disclosure
54 <ArrowRight size={15} className="shrink-0 text-faint transition-transform group-hover:translate-x-0.5 group-hover:text-fg" />
55 </span>
56 <span className="mt-1.5 text-sm text-muted">How g1t protects code and accounts, and how to report a vulnerability.</span>
57 </Link>
58 </li>
59 </ul>
60
61 <section className="mt-14 max-w-3xl">
62 <h2 className="text-xl font-semibold tracking-tight">Changes</h2>
63 <p className="mt-2 text-sm text-muted">
64 We'll tell you before material changes take effect: by email to account holders and here, at least 30 days
65 ahead, unless the law or a security problem needs a change sooner. Every change is listed below.
66 </p>
67 <Card asChild tone="plain" divided className="mt-5">
68 <ol>
69 {POLICY_HISTORY.map((entry) => (
70 <li key={entry.date + entry.change} className="flex flex-col gap-1 px-4 py-3 text-sm sm:flex-row sm:gap-6">
71 <time dateTime={entry.date} className="shrink-0 font-mono text-xs leading-6 text-faint sm:w-28">
72 {entry.date}
73 </time>
74 <span className="text-fg/90">{entry.change}</span>
75 </li>
76 ))}
77 </ol>
78 </Card>
79 <p className="mt-6 text-sm text-muted">
80 Questions about a policy: <a className="text-accent hover:underline" href={`mailto:${CONTACT.legal}`}>{CONTACT.legal}</a>.
81 About your information: <a className="text-accent hover:underline" href={`mailto:${CONTACT.privacy}`}>{CONTACT.privacy}</a>.
82 </p>
83 </section>
84 </TrustPage>
85 );
86}