Skip to content

g1t/apps/web/app/routes.ts

196 lines11,369 bytesCodeBlame

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.

Initial g1t: services, event bus, intents and attempts1import { type RouteConfig, index, route } from "@react-router/dev/routes";
2
3export default [
4 index("routes/home.tsx"),
5 route("login", "routes/login.tsx"),
API and MCP server, Rust identity service, registration, site redesign6 route("register", "routes/register.tsx"),
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look7 // An invite link: who sent it, then sign-up or joining. `invite` is reserved.
8 route("invite/:code", "routes/invite.tsx"),
Initial g1t: services, event bus, intents and attempts9 route("logout", "routes/logout.tsx"),
Email verification, password reset, and Git for AI scale positioning10 route("verify", "routes/verify.tsx"),
11 route("forgot", "routes/forgot.tsx"),
12 route("reset", "routes/reset.tsx"),
Device sign-in replaces registering and minting tokens over the API13 route("device", "routes/device.tsx"),
OAuth 2.1 sign-in for MCP clients and other applications14 route("oauth/authorize", "routes/oauth-authorize.tsx"),
Initial g1t: services, event bus, intents and attempts15 route("new", "routes/new.tsx"),
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look16 // GitHub: signing in with it, and bringing repositories across through
17 // g1t's GitHub App. `auth` and `integrations` are reserved names.
18 route("new/github", "routes/new-github.tsx"),
19 route("auth/github", "routes/auth-github.ts"),
20 route("auth/github/callback", "routes/auth-github-callback.tsx"),
21 route("auth/github/username", "routes/auth-github-username.tsx"),
22 route("integrations/github/install", "routes/github-install.ts"),
23 route("integrations/github/setup", "routes/github-setup.tsx"),
status.g1t.sh with incident management, invites that land you in the workspace, settings as pages, usage without quotas24 // Your own settings: one page each, so links can name the one they mean.
25 // `/settings` goes to the first; an old link's `#anchor` to its page.
26 route("settings", "routes/settings/layout.tsx", [
27 index("routes/settings/index.tsx"),
28 route("profile", "routes/settings/profile.tsx"),
29 route("emails", "routes/settings/emails.tsx"),
Inbox on the site: reasons, a reason filter, Subscribe, Watch and settings30 route("notifications", "routes/settings/notifications.tsx"),
status.g1t.sh with incident management, invites that land you in the workspace, settings as pages, usage without quotas31 route("invites", "routes/settings/invites.tsx"),
32 route("keys", "routes/settings/keys.tsx"),
33 route("tokens", "routes/settings/tokens.tsx"),
34 route("github", "routes/settings/github.tsx"),
35 route("applications", "routes/settings/applications.tsx"),
36 route("security-log", "routes/settings/security-log.tsx"),
37 ]),
38 // The account menu's header: name, primary email and invites left.
39 route("settings/menu.json", "routes/settings-menu-json.ts"),
Agents and memory, checks and conflicts, profiles, slug renames, custom domains40 // People, apart from workspaces: `u` is a reserved name.
41 route("u/:username", "routes/user.tsx"),
API and MCP server, Rust identity service, registration, site redesign42 route("explore", "routes/explore.tsx", { id: "explore" }),
Prices keep themselves current with what g1t pays43 route("pricing", "routes/pricing.tsx"),
Search across all of g1t, Explore, and a command palette44 route("search", "routes/search.tsx"),
Inbox: a bell in the top bar opens it beside the page, and /inbox holds it all45 // Each person's inbox, and what its panel in the top bar fetches.
46 route("inbox", "routes/inbox.tsx"),
47 route("inbox.json", "routes/inbox-json.ts"),
Search across all of g1t, Explore, and a command palette48 // What the command palette shows as someone types.
49 route("search.json", "routes/search-json.ts"),
Agents as a team: lifecycle, merge queue, billing and a new shell50 route("workspaces/new", "routes/workspace/new.tsx"),
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look51 // Trust pages: reserved names, like the rest above.
52 route("policies", "routes/policies.tsx"),
53 route("policies/:policy", "routes/policy.tsx"),
54 route("security", "routes/security.tsx"),
55 route("support", "routes/support.tsx"),
status.g1t.sh with incident management, invites that land you in the workspace, settings as pages, usage without quotas56 // Status moved to status.g1t.sh (apps/status); old links go there.
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look57 route("status", "routes/status.tsx"),
58 route("status.json", "routes/status-json.ts"),
59 route(".well-known/security.txt", "routes/security-txt.ts"),
The g1t CLI 0.1.0 is downloadable: g1t.sh/downloads/cli/latest/, five platforms with SHA256SUMS60 // Releases of the self-hosted runner and the g1t CLI, from R2.
61 route("downloads/:tool/*", "routes/downloads-runner.ts"),
Agents as a team: lifecycle, merge queue, billing and a new shell62 // A workspace's own pages sit under `-`, which no repository can be named.
63 route(":owner", "routes/workspace/layout.tsx", [
64 index("routes/workspace/overview.tsx"),
Navigation: the workspace's own page with tabs, pins and recent in the sidebar65 // Its tabs: Overview (above), Projects, Packages, Teams, People, Insights.
66 route("-/projects", "routes/workspace/projects.tsx"),
Agents as a team: lifecycle, merge queue, billing and a new shell67 route("-/people", "routes/workspace/people.tsx"),
Navigation: the workspace's own page with tabs, pins and recent in the sidebar68 route("-/insights", "routes/workspace/tab-soon.tsx", { id: "routes/workspace/insights" }),
69 // Pinning its projects, for the person signed in.
70 route("-/pins", "routes/workspace/pins.ts"),
71 // Pages that moved: Members is People, and the overview is the workspace.
72 route("-/members", "routes/workspace/moved.ts", { id: "routes/workspace/moved-members" }),
73 route("-/overview", "routes/workspace/moved.ts", { id: "routes/workspace/moved-overview" }),
Teams and CODEOWNERS, labels and milestones, dependency updates, the security suite, and a clearer top bar74 // Teams: the list, a new one, and each team's pages.
75 route("-/teams", "routes/workspace/teams.tsx"),
76 route("-/teams/new", "routes/workspace/team-new.tsx"),
77 route("-/teams/:team", "routes/workspace/team/layout.tsx", [
78 index("routes/workspace/team/members.tsx"),
79 route("teams", "routes/workspace/team/teams.tsx"),
80 route("repositories", "routes/workspace/team/repositories.tsx"),
81 route("settings", "routes/workspace/team/settings.tsx"),
82 ]),
Agents as a team: lifecycle, merge queue, billing and a new shell83 route("-/tokens", "routes/workspace/tokens.tsx"),
Usage, like a hosting provider's: what agents cost, per day, task, repository and pull request84 route("-/usage", "routes/workspace/usage.tsx"),
Agents as a team: lifecycle, merge queue, billing and a new shell85 route("-/billing", "routes/workspace/billing.tsx"),
The statement is a month at a time, a line per kind of charge86 route("-/billing/entries", "routes/workspace/statement-entries.ts"),
87 route("-/billing/statement.csv", "routes/workspace/statement-csv.ts"),
Integrations: your own model provider, alerts that open issues, tickets agents read88 route("-/integrations", "routes/workspace/integrations.tsx"),
Webhooks: every event, to your own addresses, signed and retried89 route("-/webhooks", "routes/workspace/webhooks.tsx"),
GitHub Actions on g1t, part three: .g1t/workflows, the pages, the docs90 route("-/secrets", "routes/workspace/secrets.tsx"),
Fast pages, required checks on the branch, self-hosted runners, honest incidents91 route("-/runners", "routes/workspace/runners.tsx"),
Packages, with a container registry on g1t.sh; workspaces deleted whole and kept 30 days; Members for every member92 route("-/packages", "routes/workspace/packages.tsx"),
93 route("-/packages/:ecosystem/*", "routes/workspace/package.tsx"),
Agents as a team: lifecycle, merge queue, billing and a new shell94 route("-/settings", "routes/workspace/settings.tsx"),
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look95 route("-/repositories", "routes/workspace/repositories.tsx"),
Agents and memory, checks and conflicts, profiles, slug renames, custom domains96 route("-/agents", "routes/workspace/agents.tsx"),
97 route("-/memory", "routes/workspace/memory.tsx"),
Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API98 route("-/context", "routes/workspace/context.tsx"),
99 route("-/security", "routes/workspace/security.tsx"),
Teams and CODEOWNERS, labels and milestones, dependency updates, the security suite, and a clearer top bar100 route("-/security/patterns", "routes/workspace/security-patterns.tsx"),
101 route("-/security/bypass-requests", "routes/workspace/security-bypass.tsx"),
102 route("-/security/settings", "routes/workspace/security-settings.tsx"),
Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API103 route("-/audit", "routes/workspace/audit.tsx"),
104 route("-/audit/export", "routes/workspace/audit-export.ts"),
105 route("-/guardrails", "routes/workspace/guardrails.tsx"),
A flat project menu with Code first, views as tabs, and Stripe for every owner106 // What the workspace will have across its projects.
107 route("-/soon/:feature", "routes/workspace/soon.tsx"),
Agents as a team: lifecycle, merge queue, billing and a new shell108 ]),
109 // Why a line is the way it is, fetched by the blame view.
110 route(":owner/:repo/why/:hash", "routes/repo/why.ts"),
Agents and memory, checks and conflicts, profiles, slug renames, custom domains111 // A project's agent runs as JSON, and stopping or messaging one.
112 route(":owner/:repo/agents.json", "routes/repo/agents-live.ts"),
Teams and CODEOWNERS, labels and milestones, dependency updates, the security suite, and a clearer top bar113 // Its branch names, for changing the branch a pull request merges into.
114 route(":owner/:repo/branches.json", "routes/repo/branch-names.ts"),
Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API115 // What a project's agent runs did, from the audit log, for the Agent panel.
116 route(":owner/:repo/audit.json", "routes/repo/audit-live.ts"),
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look117 // An invitation to a repository, answered by someone who cannot see it yet.
118 route(":owner/:repo/invitations", "routes/repo/invitations.tsx"),
Inbox on the site: reasons, a reason filter, Subscribe, Watch and settings119 // Subscribing to its issues and pull requests, and watching it.
120 route(":owner/:repo/notifications", "routes/repo/notifications.ts"),
Fast pages, required checks on the branch, self-hosted runners, honest incidents121 // A starter CI workflow, opened as a pull request (components/add-ci.tsx).
122 route(":owner/:repo/add-ci", "routes/repo/add-ci.ts"),
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look123 // A screenshot of a project's production, for its overview.
124 route(":owner/:repo/production.jpg", "routes/repo/production-screenshot.ts"),
Projects: what a workspace builds and runs, first on every page125 // A project: its overview first, its repository's code under Code. The
126 // 1:1 project of a repository has the repository's name, so every
127 // repository address below keeps working.
Initial g1t: services, event bus, intents and attempts128 route(":owner/:repo", "routes/repo/layout.tsx", [
Projects: what a workspace builds and runs, first on every page129 index("routes/repo/overview.tsx"),
130 route("code", "routes/repo/code.tsx"),
Initial g1t: services, event bus, intents and attempts131 route("tree/:ref/*", "routes/repo/tree.tsx"),
132 route("blob/:ref/*", "routes/repo/blob.tsx"),
Download ZIP from the Code button; a slimmer lifecycle panel; agent steps say what was done, not sandbox paths133 route("archive/*", "routes/repo/archive.ts"),
API and MCP server, Rust identity service, registration, site redesign134 route("commits", "routes/repo/commits.tsx"),
Branches and Tags pages, each file's last commit, and the branch menu on files135 route("branches", "routes/repo/branches.tsx"),
136 route("tags", "routes/repo/tags.tsx"),
Compare: any two branches, the commits one has that the other does not, and the diff, with Open a pull request137 route("compare/*", "routes/repo/compare.tsx", { id: "routes/repo/compare-range" }),
138 route("compare", "routes/repo/compare.tsx"),
Agents as a team: lifecycle, merge queue, billing and a new shell139 route("commit/:hash", "routes/repo/commit.tsx"),
Teams and CODEOWNERS, labels and milestones, dependency updates, the security suite, and a clearer top bar140 route("labels", "routes/repo/labels.tsx"),
141 route("milestones", "routes/repo/milestones.tsx"),
142 route("milestones/:number", "routes/repo/milestone.tsx"),
Issues and pull requests replace intents and attempts143 route("issues", "routes/repo/issues.tsx"),
144 route("issues/new", "routes/repo/issue-new.tsx"),
145 route("issues/:number", "routes/repo/issue.tsx"),
146 route("pulls", "routes/repo/pulls.tsx"),
Pull requests from branches147 route("pulls/new", "routes/repo/pull-new.tsx"),
Issues and pull requests replace intents and attempts148 route("pull/:number", "routes/repo/pull.tsx"),
Agents as a team: lifecycle, merge queue, billing and a new shell149 route("queue", "routes/repo/queue.tsx"),
Agents and memory, checks and conflicts, profiles, slug renames, custom domains150 route("agents", "routes/repo/agents.tsx"),
Usage, Billing settings and prepaid AI credit; fixes from the UX audit151 route("usage", "routes/repo/usage.tsx"),
Agents and memory, checks and conflicts, profiles, slug renames, custom domains152 route("agents/runs/:id", "routes/repo/agents-run.tsx"),
153 route("sessions", "routes/repo/sessions.tsx"),
154 route("sessions/:number", "routes/repo/session.tsx"),
155 route("memory", "routes/repo/memory.tsx"),
GitHub Actions on g1t, part three: .g1t/workflows, the pages, the docs156 route("actions", "routes/repo/actions.tsx"),
157 route("actions/runs/:id", "routes/repo/actions-run.tsx"),
Actions: workflow_run, workflow.completed, artifacts on the run page, Node 24158 route("actions/runs/:id/artifacts/:name", "routes/repo/actions-artifact.ts"),
GitHub Actions on g1t, part three: .g1t/workflows, the pages, the docs159 route("actions/jobs/:job/log", "routes/repo/actions-log.ts"),
Deployments: a preview for every pull request, production on g1t.page160 route("deployments", "routes/repo/deployments.tsx"),
161 route("deployments/:id", "routes/repo/deployment.tsx"),
Teams and CODEOWNERS, labels and milestones, dependency updates, the security suite, and a clearer top bar162 // Security: an overview, then a page for each part. Old links to
163 // `security?tab=…` are sent on by the overview.
164 route("security", "routes/repo/security-overview.tsx"),
165 route("security/secret-scanning", "routes/repo/security-secrets.tsx"),
166 route("security/secret-scanning/patterns", "routes/repo/security-patterns.tsx"),
167 route("security/secret-scanning/:id", "routes/repo/security-secret.tsx"),
168 route("security/code-scanning", "routes/repo/security-code.tsx"),
169 route("security/code-scanning/setup", "routes/repo/security-code-setup.ts"),
170 route("security/code-scanning/:number", "routes/repo/security-code-alert.tsx"),
171 route("security/vulnerabilities", "routes/repo/security.tsx"),
172 route("security/dependency-graph", "routes/repo/security-graph.tsx"),
173 route("security/dependency-graph/sbom.json", "routes/repo/security-sbom.ts"),
174 route("security/dependency-updates", "routes/repo/security-updates.tsx"),
175 route("security/pulls/:number", "routes/repo/security-pull.tsx"),
176 route("security/settings", "routes/repo/security-settings.tsx"),
Agents as a team: lifecycle, merge queue, billing and a new shell177 route("plans", "routes/repo/plans.tsx"),
178 route("plans/:id", "routes/repo/plan.tsx"),
179 route("settings", "routes/repo/settings.tsx"),
Projects: what a workspace builds and runs, first on every page180 route("settings/repository", "routes/repo/settings-repository.tsx"),
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look181 route("settings/access", "routes/repo/settings-access.tsx"),
182 route("settings/branches", "routes/repo/settings-branches.tsx"),
Webhooks: every event, to your own addresses, signed and retried183 route("settings/webhooks", "routes/repo/webhooks.tsx"),
GitHub Actions on g1t, part three: .g1t/workflows, the pages, the docs184 route("settings/secrets", "routes/repo/secrets.tsx"),
Fast pages, required checks on the branch, self-hosted runners, honest incidents185 route("settings/runners", "routes/repo/settings-runners.tsx"),
Secrets and variables: one list, rows per environment, for workflows and deployments186 route("settings/deployments", "routes/repo/settings-deployments.tsx"),
Agents and memory, checks and conflicts, profiles, slug renames, custom domains187 route("settings/domains", "routes/repo/settings-domains.tsx"),
Project dependencies: addresses, preview stacks, Affects, and agents who know188 route("settings/dependencies", "routes/repo/settings-dependencies.tsx"),
Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API189 route("settings/guardrails", "routes/repo/settings-guardrails.tsx"),
190 route("settings/agents", "routes/repo/settings-agents.tsx"),
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales191 // What the project will have: one page for each Soon in its menu.
192 route("soon/:feature", "routes/repo/soon.tsx"),
Initial g1t: services, event bus, intents and attempts193 ]),
Webhooks: every event, to your own addresses, signed and retried194 // Anything else: a 404 that still knows who is signed in.
195 route("*", "routes/not-found.tsx"),
Initial g1t: services, event bus, intents and attempts196] satisfies RouteConfig;