Skip to content
85 linesCodeBlameRaw

Pick any line to see why it is the way it is: the commit, the pull request and issue it came from, and what the agent was thinking.

Automations: rules in .g1t/automations that act when something happens1/**
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look2 * g1t's logo: G1T in 5×7 pixel capitals, the 1 in lavender. Each pixel is
3 * its own square, 0.8 of its cell. The icon is the 1 alone. The same
4 * shapes as the favicon and the brand files in .g1t/brand and public/brand.
5 * The product name stays "g1t" in text; only the artwork is capitals.
Automations: rules in .g1t/automations that act when something happens6 */
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look7
8const G = [".###.", "#...#", "#....", "#.###", "#...#", "#...#", ".###."];
9const ONE = ["..#..", ".##..", "#.#..", "..#..", "..#..", "..#..", "#####"];
10const T = ["#####", "..#..", "..#..", "..#..", "..#..", "..#..", "..#.."];
11
12type Pixel = { x: number; y: number; one: boolean };
13
14function pixels(rows: string[], dx: number, one: boolean): Pixel[] {
15 return rows.flatMap((row, y) => [...row].flatMap((c, x) => (c === "#" ? [{ x: dx + x, y, one }] : [])));
16}
17
18/** G at 0, the 1 at 6, the T at 10: its bar tucks in over the 1's foot. */
19const WORD = [...pixels(G, 0, false), ...pixels(ONE, 6, true), ...pixels(T, 10, false)];
20const ICON = pixels(ONE, 0, true);
21
22/** Cells of 10 units, squares of 8, centred. */
23function Pixels({ of }: { of: Pixel[] }) {
24 return of.map((p) => (
25 <rect
26 key={`${p.x}.${p.y}`}
27 x={p.x * 10 + 1}
28 y={p.y * 10 + 1}
29 width="8"
30 height="8"
You choose how g1t looks: Auto follows your system, Light and Dark stay put, set from the account menu, the phone's You and help sheet, Settings → Account or the command palette; the page is drawn in your choice from the first byte, every colour has a light value that reads at 4.5:1 or better, code and diffs are highlighted for both, diagrams and the document editor follow along, the product tour and the g1t mark's avatar stay dark, and Dark is what you see until you choose; the workspaces guide says how.31 fill={p.one ? "var(--color-accent)" : "currentColor"}
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look32 />
33 ));
34}
35
36/**
37 * The icon: the pixel 1, centred in a square. `tight` crops to the ink, for
38 * setting it beside type, where it must stand on the baseline.
39 */
The logo stands on the baseline beside its name40export function Mark({ className, tight = false }: { className?: string; tight?: boolean }) {
Automations: rules in .g1t/automations that act when something happens41 return (
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look42 <svg viewBox={tight ? "1 1 48 68" : "-15 -5 80 80"} className={className} aria-hidden="true">
43 <Pixels of={ICON} />
Automations: rules in .g1t/automations that act when something happens44 </svg>
45 );
46}
47
The logo stands on the baseline beside its name48/**
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look49 * The wordmark as one picture, sized by its font size: a cell is 0.125em,
50 * so the letters stand 0.85em tall on the baseline, about the height of
51 * the type around them.
The logo stands on the baseline beside its name52 */
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look53export function Logo({ className = "text-[1.5rem]" }: { className?: string }) {
Automations: rules in .g1t/automations that act when something happens54 return (
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look55 <span className={`inline-flex items-baseline leading-none text-fg ${className}`}>
56 <svg
57 viewBox="1 1 148 68"
58 role="img"
59 aria-label="g1t"
60 className="h-[0.85em] w-auto shrink-0 self-baseline"
61 >
62 <Pixels of={WORD} />
63 </svg>
Automations: rules in .g1t/automations that act when something happens64 </span>
65 );
66}
status.g1t.sh with incident management, invites that land you in the workspace, settings as pages, usage without quotas67
68const FOUR = ["...#.", "..##.", ".#.#.", "#..#.", "#####", "...#.", "...#."];
69const ZERO = [".###.", "#...#", "#...#", "#...#", "#...#", "#...#", ".###."];
70/** 4 at 0, the 0 at 6, 4 at 12: the logo's cells and spacing. */
71const FOUR_O_FOUR = [...pixels(FOUR, 0, false), ...pixels(ZERO, 6, true), ...pixels(FOUR, 12, false)];
72
73/**
74 * 404 in the logo's pixels, the 0 in lavender where the logo has its 1.
75 * Sized by its font size, like the wordmark.
76 */
77export function Pixel404({ className = "text-[4rem]" }: { className?: string }) {
78 return (
79 <span className={`inline-flex leading-none text-fg ${className}`}>
80 <svg viewBox="1 1 168 68" role="img" aria-label="404" className="h-[0.85em] w-auto shrink-0" shapeRendering="crispEdges">
81 <Pixels of={FOUR_O_FOUR} />
82 </svg>
83 </span>
84 );
85}

This file's history is long; its oldest lines are credited to the oldest commit read.