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 attempts | 1 | import { type RouteConfig, index, route } from "@react-router/dev/routes"; |
| 2 | ||
| 3 | export default [ | |
| 4 | index("routes/home.tsx"), | |
| 5 | route("login", "routes/login.tsx"), | |
| API and MCP server, Rust identity service, registration, site redesign | 6 | route("register", "routes/register.tsx"), |
| Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look | 7 | // 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 attempts | 9 | route("logout", "routes/logout.tsx"), |
| Email verification, password reset, and Git for AI scale positioning | 10 | 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 API | 13 | route("device", "routes/device.tsx"), |
| OAuth 2.1 sign-in for MCP clients and other applications | 14 | route("oauth/authorize", "routes/oauth-authorize.tsx"), |
| Initial g1t: services, event bus, intents and attempts | 15 | route("new", "routes/new.tsx"), |
| Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look | 16 | // 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 quotas | 24 | // 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"), | |
| 30 | route("invites", "routes/settings/invites.tsx"), | |
| 31 | route("keys", "routes/settings/keys.tsx"), | |
| 32 | route("tokens", "routes/settings/tokens.tsx"), | |
| 33 | route("github", "routes/settings/github.tsx"), | |
| 34 | route("applications", "routes/settings/applications.tsx"), | |
| 35 | route("security-log", "routes/settings/security-log.tsx"), | |
| 36 | ]), | |
| 37 | // The account menu's header: name, primary email and invites left. | |
| 38 | route("settings/menu.json", "routes/settings-menu-json.ts"), | |
| Agents and memory, checks and conflicts, profiles, slug renames, custom domains | 39 | // People, apart from workspaces: `u` is a reserved name. |
| 40 | route("u/:username", "routes/user.tsx"), | |
| API and MCP server, Rust identity service, registration, site redesign | 41 | route("explore", "routes/explore.tsx", { id: "explore" }), |
| Prices keep themselves current with what g1t pays | 42 | route("pricing", "routes/pricing.tsx"), |
| Search across all of g1t, Explore, and a command palette | 43 | route("search", "routes/search.tsx"), |
| 44 | // What the command palette shows as someone types. | |
| 45 | route("search.json", "routes/search-json.ts"), | |
| Agents as a team: lifecycle, merge queue, billing and a new shell | 46 | route("workspaces/new", "routes/workspace/new.tsx"), |
| Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look | 47 | // Trust pages: reserved names, like the rest above. |
| 48 | route("policies", "routes/policies.tsx"), | |
| 49 | route("policies/:policy", "routes/policy.tsx"), | |
| 50 | route("security", "routes/security.tsx"), | |
| 51 | route("support", "routes/support.tsx"), | |
| status.g1t.sh with incident management, invites that land you in the workspace, settings as pages, usage without quotas | 52 | // 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 look | 53 | route("status", "routes/status.tsx"), |
| 54 | route("status.json", "routes/status-json.ts"), | |
| 55 | 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 SHA256SUMS | 56 | // Releases of the self-hosted runner and the g1t CLI, from R2. |
| 57 | route("downloads/:tool/*", "routes/downloads-runner.ts"), | |
| Agents as a team: lifecycle, merge queue, billing and a new shell | 58 | // A workspace's own pages sit under `-`, which no repository can be named. |
| 59 | route(":owner", "routes/workspace/layout.tsx", [ | |
| 60 | index("routes/workspace/overview.tsx"), | |
| 61 | route("-/people", "routes/workspace/people.tsx"), | |
| 62 | route("-/tokens", "routes/workspace/tokens.tsx"), | |
| Usage, like a hosting provider's: what agents cost, per day, task, repository and pull request | 63 | route("-/usage", "routes/workspace/usage.tsx"), |
| Agents as a team: lifecycle, merge queue, billing and a new shell | 64 | route("-/billing", "routes/workspace/billing.tsx"), |
| The statement is a month at a time, a line per kind of charge | 65 | route("-/billing/entries", "routes/workspace/statement-entries.ts"), |
| 66 | route("-/billing/statement.csv", "routes/workspace/statement-csv.ts"), | |
| Integrations: your own model provider, alerts that open issues, tickets agents read | 67 | route("-/integrations", "routes/workspace/integrations.tsx"), |
| Webhooks: every event, to your own addresses, signed and retried | 68 | route("-/webhooks", "routes/workspace/webhooks.tsx"), |
| GitHub Actions on g1t, part three: .g1t/workflows, the pages, the docs | 69 | route("-/secrets", "routes/workspace/secrets.tsx"), |
| Fast pages, required checks on the branch, self-hosted runners, honest incidents | 70 | route("-/runners", "routes/workspace/runners.tsx"), |
| Packages, with a container registry on g1t.sh; workspaces deleted whole and kept 30 days; Members for every member | 71 | route("-/packages", "routes/workspace/packages.tsx"), |
| 72 | route("-/packages/:ecosystem/*", "routes/workspace/package.tsx"), | |
| Agents as a team: lifecycle, merge queue, billing and a new shell | 73 | route("-/settings", "routes/workspace/settings.tsx"), |
| Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look | 74 | route("-/repositories", "routes/workspace/repositories.tsx"), |
| Agents and memory, checks and conflicts, profiles, slug renames, custom domains | 75 | route("-/agents", "routes/workspace/agents.tsx"), |
| 76 | 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 API | 77 | route("-/context", "routes/workspace/context.tsx"), |
| 78 | route("-/security", "routes/workspace/security.tsx"), | |
| 79 | route("-/audit", "routes/workspace/audit.tsx"), | |
| 80 | route("-/audit/export", "routes/workspace/audit-export.ts"), | |
| 81 | route("-/guardrails", "routes/workspace/guardrails.tsx"), | |
| A flat project menu with Code first, views as tabs, and Stripe for every owner | 82 | // What the workspace will have across its projects. |
| 83 | route("-/soon/:feature", "routes/workspace/soon.tsx"), | |
| Agents as a team: lifecycle, merge queue, billing and a new shell | 84 | ]), |
| 85 | // Why a line is the way it is, fetched by the blame view. | |
| 86 | route(":owner/:repo/why/:hash", "routes/repo/why.ts"), | |
| Agents and memory, checks and conflicts, profiles, slug renames, custom domains | 87 | // A project's agent runs as JSON, and stopping or messaging one. |
| 88 | route(":owner/:repo/agents.json", "routes/repo/agents-live.ts"), | |
| Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API | 89 | // What a project's agent runs did, from the audit log, for the Agent panel. |
| 90 | 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 look | 91 | // An invitation to a repository, answered by someone who cannot see it yet. |
| 92 | route(":owner/:repo/invitations", "routes/repo/invitations.tsx"), | |
| Fast pages, required checks on the branch, self-hosted runners, honest incidents | 93 | // A starter CI workflow, opened as a pull request (components/add-ci.tsx). |
| 94 | 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 look | 95 | // A screenshot of a project's production, for its overview. |
| 96 | route(":owner/:repo/production.jpg", "routes/repo/production-screenshot.ts"), | |
| Projects: what a workspace builds and runs, first on every page | 97 | // A project: its overview first, its repository's code under Code. The |
| 98 | // 1:1 project of a repository has the repository's name, so every | |
| 99 | // repository address below keeps working. | |
| Initial g1t: services, event bus, intents and attempts | 100 | route(":owner/:repo", "routes/repo/layout.tsx", [ |
| Projects: what a workspace builds and runs, first on every page | 101 | index("routes/repo/overview.tsx"), |
| 102 | route("code", "routes/repo/code.tsx"), | |
| Initial g1t: services, event bus, intents and attempts | 103 | route("tree/:ref/*", "routes/repo/tree.tsx"), |
| 104 | route("blob/:ref/*", "routes/repo/blob.tsx"), | |
| API and MCP server, Rust identity service, registration, site redesign | 105 | route("commits", "routes/repo/commits.tsx"), |
| Agents as a team: lifecycle, merge queue, billing and a new shell | 106 | route("commit/:hash", "routes/repo/commit.tsx"), |
| Issues and pull requests replace intents and attempts | 107 | route("issues", "routes/repo/issues.tsx"), |
| 108 | route("issues/new", "routes/repo/issue-new.tsx"), | |
| 109 | route("issues/:number", "routes/repo/issue.tsx"), | |
| 110 | route("pulls", "routes/repo/pulls.tsx"), | |
| Pull requests from branches | 111 | route("pulls/new", "routes/repo/pull-new.tsx"), |
| Issues and pull requests replace intents and attempts | 112 | route("pull/:number", "routes/repo/pull.tsx"), |
| Agents as a team: lifecycle, merge queue, billing and a new shell | 113 | route("queue", "routes/repo/queue.tsx"), |
| Agents and memory, checks and conflicts, profiles, slug renames, custom domains | 114 | route("agents", "routes/repo/agents.tsx"), |
| 115 | route("agents/runs/:id", "routes/repo/agents-run.tsx"), | |
| 116 | route("sessions", "routes/repo/sessions.tsx"), | |
| 117 | route("sessions/:number", "routes/repo/session.tsx"), | |
| 118 | route("memory", "routes/repo/memory.tsx"), | |
| GitHub Actions on g1t, part three: .g1t/workflows, the pages, the docs | 119 | route("actions", "routes/repo/actions.tsx"), |
| 120 | route("actions/runs/:id", "routes/repo/actions-run.tsx"), | |
| Actions: workflow_run, workflow.completed, artifacts on the run page, Node 24 | 121 | route("actions/runs/:id/artifacts/:name", "routes/repo/actions-artifact.ts"), |
| GitHub Actions on g1t, part three: .g1t/workflows, the pages, the docs | 122 | route("actions/jobs/:job/log", "routes/repo/actions-log.ts"), |
| Deployments: a preview for every pull request, production on g1t.page | 123 | route("deployments", "routes/repo/deployments.tsx"), |
| 124 | route("deployments/:id", "routes/repo/deployment.tsx"), | |
| Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API | 125 | route("security", "routes/repo/security.tsx"), |
| Agents as a team: lifecycle, merge queue, billing and a new shell | 126 | route("plans", "routes/repo/plans.tsx"), |
| 127 | route("plans/:id", "routes/repo/plan.tsx"), | |
| 128 | route("settings", "routes/repo/settings.tsx"), | |
| Projects: what a workspace builds and runs, first on every page | 129 | route("settings/repository", "routes/repo/settings-repository.tsx"), |
| Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look | 130 | route("settings/access", "routes/repo/settings-access.tsx"), |
| 131 | route("settings/branches", "routes/repo/settings-branches.tsx"), | |
| Webhooks: every event, to your own addresses, signed and retried | 132 | route("settings/webhooks", "routes/repo/webhooks.tsx"), |
| GitHub Actions on g1t, part three: .g1t/workflows, the pages, the docs | 133 | route("settings/secrets", "routes/repo/secrets.tsx"), |
| Fast pages, required checks on the branch, self-hosted runners, honest incidents | 134 | route("settings/runners", "routes/repo/settings-runners.tsx"), |
| Secrets and variables: one list, rows per environment, for workflows and deployments | 135 | route("settings/deployments", "routes/repo/settings-deployments.tsx"), |
| Agents and memory, checks and conflicts, profiles, slug renames, custom domains | 136 | route("settings/domains", "routes/repo/settings-domains.tsx"), |
| Project dependencies: addresses, preview stacks, Affects, and agents who know | 137 | 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 API | 138 | route("settings/guardrails", "routes/repo/settings-guardrails.tsx"), |
| 139 | route("settings/agents", "routes/repo/settings-agents.tsx"), | |
| A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales | 140 | // What the project will have: one page for each Soon in its menu. |
| 141 | route("soon/:feature", "routes/repo/soon.tsx"), | |
| Initial g1t: services, event bus, intents and attempts | 142 | ]), |
| Webhooks: every event, to your own addresses, signed and retried | 143 | // Anything else: a 404 that still knows who is signed in. |
| 144 | route("*", "routes/not-found.tsx"), | |
| Initial g1t: services, event bus, intents and attempts | 145 | ] satisfies RouteConfig; |