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.

g1t.sh
118 linesCodeBlameRaw
1/**
2 * What a project will have and does not yet: the pages the project menu
3 * shows as Soon, each with a page of its own saying what it will be. One
4 * place, so the menu and those pages never disagree.
5 *
6 * Each entry says what it is for, what it will do, and what to use today,
7 * so a Soon is a promise someone can read, not a greyed-out word.
8 */
9
10export type RoadmapItem = {
11 /** In the address: `/<owner>/<project>/soon/<key>`. */
12 key: string;
13 title: string;
14 /**
15 * Where it lives: a project page whose tabs it joins, a page of its own
16 * in the project's sidebar ("Project"), or the workspace, for what spans
17 * projects (Insights).
18 */
19 section: "Code" | "Issues" | "Deployments" | "Observability" | "Security" | "Insights" | "Project" | "Workspace";
20 /** One line, for the menu's tooltip and the page's lead. */
21 summary: string;
22 /** Why it matters, in two or three sentences. */
23 why: string;
24 /** What it will do. */
25 plans: string[];
26 /** What to use until it exists: a project page, by its path under the project. */
27 today?: { label: string; path: string };
28};
29
30export const ROADMAP: RoadmapItem[] = [
31 // --- Code ---------------------------------------------------------------
32 // Nothing: code is not docs. Docs is its own workspace mode, filterable
33 // by project there, and a project never gets a Docs tab.
34
35 // --- Deployments ----------------------------------------------------------
36 {
37 key: "environments",
38 title: "Environments",
39 section: "Deployments",
40 summary: "Staging, production and others, with approvers and branch rules.",
41 why: "Production and previews exist today. Environments add the rest: staging, QA, per-customer, each with its own variables, approvers and rules for what may deploy there.",
42 plans: [
43 "Named environments with their own variables and secrets",
44 "Required approvers before a deploy",
45 "Branch rules: what may deploy where",
46 "Promote a deployment from one environment to the next",
47 ],
48 today: { label: "Deployments", path: "deployments" },
49 },
50
51 // --- Pages of their own in the project's sidebar ----------------------
52 {
53 key: "analytics",
54 title: "Analytics",
55 section: "Project",
56 summary: "Who visits the deployed apps, without cookies.",
57 why: "Visits, pages and referrers for each app, private by design, from Cloudflare's own analytics.",
58 plans: ["Visits, pages, referrers and countries", "No cookies, no personal data", "Per deployment and per preview"],
59 },
60 {
61 key: "firewall",
62 title: "Firewall",
63 section: "Project",
64 summary: "Rules for who may reach the project's deployed apps.",
65 why: "Deployed apps run on Cloudflare. Rate limits, bot protection and IP rules, per app and environment.",
66 plans: ["Rate limits and bot protection", "IP and country rules", "Password-protected previews"],
67 today: { label: "Deployments", path: "deployments" },
68 },
69 {
70 key: "flags",
71 title: "Flags",
72 section: "Project",
73 summary: "Turn features on per environment or per user, without a deploy.",
74 why: "Ship code dark and turn it on when ready, for some users first, at the edge, with no deploy.",
75 plans: ["Flags read at the edge by deployed apps", "Rollouts by percentage, user or environment", "Reminders to clean up flags once fully on"],
76 today: { label: "Deployments", path: "deployments" },
77 },
78
79 // --- Security -------------------------------------------------------------
80 // The overview, secret scanning, code scanning, vulnerabilities and the
81 // dependency graph are built: see routes/repo/security-*.tsx.
82
83 // --- Observe ------------------------------------------------------------
84 {
85 key: "uptime",
86 title: "Uptime",
87 section: "Observability",
88 summary: "Checks that the app answers, from around the world.",
89 why: "Know the app is down before your users tell you, and who was told.",
90 plans: ["Checks from many places", "Alerts by email and webhook", "A public status page"],
91 },
92
93 // --- Insights -------------------------------------------------------------
94 {
95 key: "delivery",
96 title: "Delivery",
97 section: "Insights",
98 summary: "Lead time, deploy frequency, change failure rate and time to restore.",
99 why: "The four numbers that say how well a team ships, measured from what actually happened in g1t.",
100 plans: ["DORA metrics from merges and deployments", "Review and queue time", "Trends by week and by project"],
101 },
102 {
103 key: "costs",
104 title: "Costs",
105 section: "Insights",
106 summary: "What the project costs, by workflow run, sandbox, build and app.",
107 why: "Usage is charged by the workspace; here it is broken down for one project, so you can see what each part of the work costs.",
108 plans: ["Cost by kind of work and by issue", "Cost per merged change", "Budgets per project"],
109 },
110];
111
112export function roadmapItem(key: string): RoadmapItem | undefined {
113 return ROADMAP.find((item) => item.key === key);
114}
115
116export function roadmapIn(section: RoadmapItem["section"]): RoadmapItem[] {
117 return ROADMAP.filter((item) => item.section === section);
118}