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 g1t is young and these policies change as it does. Changes take effect when they're posted here, so check back
65 from time to time. 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}