g1t/apps/sudo/app/routes.ts

36 lines1,748 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.

Billing accounts, terms and enterprises; g1t is no longer free1import { type RouteConfig, index, route } from "@react-router/dev/routes";
2
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales3import { soonItems } from "./lib/nav.ts";
4
Billing accounts, terms and enterprises; g1t is no longer free5export default [
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales6 index("routes/overview.tsx"),
7 route("workspaces", "routes/workspaces.tsx"),
Packages, with a container registry on g1t.sh; workspaces deleted whole and kept 30 days; Members for every member8 route("workspaces/deleted", "routes/deleted-workspaces.tsx"),
Billing on Stripe's pages, month-end charges, warnings; sudo by workspace9 route("workspaces/:slug", "routes/workspace.tsx"),
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look10 route("users/:username", "routes/user.tsx"),
Billing on Stripe's pages, month-end charges, warnings; sudo by workspace11 route("enterprises", "routes/enterprises.tsx"),
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look12 route("invites", "routes/invites.tsx"),
Billing accounts, terms and enterprises; g1t is no longer free13 route("enterprises/new", "routes/new-enterprise.tsx"),
Billing on Stripe's pages, month-end charges, warnings; sudo by workspace14 route("enterprises/:id", "routes/enterprise.tsx"),
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales15 route("reach-out", "routes/reach-out.tsx"),
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look16 route("requests", "routes/requests.tsx"),
17 route("overages", "routes/overages.tsx"),
18 route("velocity", "routes/velocity.tsx"),
Git storage hardened, pages in tens of milliseconds, honest security alerts, and costs reconciled daily19 route("costs", "routes/costs.tsx"),
Costs: Cloudflare's subscriptions read from Cloudflare each day, the estimate only until then; sudo's costs split into Costs & margin and Bill & pricing20 route("costs/bill", "routes/costs-bill.tsx"),
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look21 route("abuse", "routes/abuse.tsx"),
sudo: Invoices, Audit log, and follow-ups due22 route("invoices", "routes/invoices.tsx"),
Stripe webhooks, enterprise invoices, and sudo for both23 route("stripe", "routes/stripe.tsx"),
sudo: Invoices, Audit log, and follow-ups due24 route("audit", "routes/audit.tsx"),
Fast pages, required checks on the branch, self-hosted runners, honest incidents25 route("timezone", "routes/timezone.tsx"),
status.g1t.sh with incident management, invites that land you in the workspace, settings as pages, usage without quotas26 route("incidents", "routes/incidents.tsx"),
27 route("incidents/new", "routes/incident-new.tsx"),
28 route("incidents/maintenance/new", "routes/maintenance-new.tsx"),
29 route("incidents/maintenance/:id", "routes/maintenance.tsx"),
30 route("incidents/:id", "routes/incident.tsx"),
31 route("incidents/:id/postmortem", "routes/incident-postmortem.tsx"),
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales32 // What sudo will have: one placeholder page each, from lib/nav.ts.
33 ...soonItems().map((item) => route(item.to.slice(1), "routes/soon.tsx", { id: `soon${item.to.replace(/\//g, "-")}` })),
Billing on Stripe's pages, month-end charges, warnings; sudo by workspace34 // Before sudo was organised around workspaces, everything was an account.
35 route("accounts/*", "routes/legacy-accounts.tsx"),
Billing accounts, terms and enterprises; g1t is no longer free36] satisfies RouteConfig;