g1t/apps/web/app/lib/changelog.ts
| 1 | /** |
| 2 | * What is new on g1t, newest first, for the corner of mission control that |
| 3 | * says so. Short and specific: what changed, and where to see it. Add an |
| 4 | * entry in the same change that ships the feature. |
| 5 | */ |
| 6 | export type ChangelogEntry = { |
| 7 | /** `YYYY-MM-DD`. */ |
| 8 | date: string; |
| 9 | title: string; |
| 10 | about: string; |
| 11 | /** Docs, or a page on g1t; `{workspace}` and `{project}` are filled in where known. */ |
| 12 | href: string; |
| 13 | }; |
| 14 | |
| 15 | export const CHANGELOG: ChangelogEntry[] = [ |
| 16 | { |
| 17 | date: "2026-10-04", |
| 18 | title: "Agents and memory", |
| 19 | about: "Watch every agent run live, stop or message it, and see what agents learned about each project.", |
| 20 | href: "/{workspace}/-/agents", |
| 21 | }, |
| 22 | { |
| 23 | date: "2026-10-04", |
| 24 | title: "Checks and conflicts", |
| 25 | about: "Workflow statuses on every pull request, and conflicts found before you press merge.", |
| 26 | href: "https://docs.g1t.sh/guides/pull-requests/", |
| 27 | }, |
| 28 | { |
| 29 | date: "2026-10-04", |
| 30 | title: "Profiles", |
| 31 | about: "Your name, bio and everything you opened, in one place.", |
| 32 | href: "/settings", |
| 33 | }, |
| 34 | { |
| 35 | date: "2026-10-04", |
| 36 | title: "Custom domains", |
| 37 | about: "Serve production on your own domain, with its certificate handled for you.", |
| 38 | href: "https://docs.g1t.sh/guides/deployments/", |
| 39 | }, |
| 40 | { |
| 41 | date: "2026-10-04", |
| 42 | title: "Rename a workspace", |
| 43 | about: "Old addresses redirect for 90 days, so links and clones keep working.", |
| 44 | href: "/{workspace}/-/settings", |
| 45 | }, |
| 46 | { |
| 47 | date: "2026-10-04", |
| 48 | title: "Workspace names and icons", |
| 49 | about: "Give a workspace a display name and an icon of its own.", |
| 50 | href: "/{workspace}/-/settings", |
| 51 | }, |
| 52 | ]; |
| 53 | |
| 54 | /** An entry's link, with the workspace filled in; null when it needs one and there is none. */ |
| 55 | export function changelogHref(entry: ChangelogEntry, workspace: string | null): string | null { |
| 56 | if (!entry.href.includes("{workspace}")) return entry.href; |
| 57 | return workspace ? entry.href.replaceAll("{workspace}", workspace) : null; |
| 58 | } |