flagon-io/g1t

public

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/apps/web/app/lib/changelog.ts

86 lines3,326 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.

Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API1/**
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 */
6export 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
15export const CHANGELOG: ChangelogEntry[] = [
16 {
Catching up with main takes seconds when the two sides touched different files17 date: "2026-10-05",
Team plan, an open-source pool, monthly trials and honest metering; the sidebar for everyone; a workspace that stays put18 title: "Browse public projects in the sidebar",
19 about:
20 "Public projects, Explore, Search and profiles use the sidebar whether you are signed in or not. A page you cannot see says so plainly, the same for private and missing, with a way to sign in or switch account.",
21 href: "https://docs.g1t.sh/guides/git/#browsing-without-an-account",
22 },
23 {
24 date: "2026-10-05",
25 title: "The Team plan, and free open source",
26 about:
27 "Team is $20 a month per workspace, never per person, with $5 of usage credit, 50 GB of private storage and a year of audit log. Work on public repositories is paid by g1t's open-source pool first, trials renew monthly, and no card is charged under $5.",
28 href: "/pricing",
29 },
30 {
31 date: "2026-10-05",
Prices are what g1t pays plus 20%, from the first second32 title: "Cost plus 20%, on everything",
33 about:
34 "Sandbox time is charged at cost plus 20% from the first second, with no free minutes. Runs on your own model provider no longer carry a $0.10 fee: they pay only their sandbox time.",
35 href: "/pricing",
36 },
37 {
38 date: "2026-10-05",
Catching up with main takes seconds when the two sides touched different files39 title: "Catch up in seconds",
40 about:
41 "Catch up with main merges it in at once when the two changed different files. When they overlap, the merge box shows g1t-agent at work, step by step.",
42 href: "https://docs.g1t.sh/guides/pull-requests/#catching-up",
43 },
44 {
Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API45 date: "2026-10-04",
46 title: "Agents and memory",
47 about: "Watch every agent run live, stop or message it, and see what agents learned about each project.",
48 href: "/{workspace}/-/agents",
49 },
50 {
51 date: "2026-10-04",
52 title: "Checks and conflicts",
53 about: "Workflow statuses on every pull request, and conflicts found before you press merge.",
54 href: "https://docs.g1t.sh/guides/pull-requests/",
55 },
56 {
57 date: "2026-10-04",
58 title: "Profiles",
59 about: "Your name, bio and everything you opened, in one place.",
60 href: "/settings",
61 },
62 {
63 date: "2026-10-04",
64 title: "Custom domains",
65 about: "Serve production on your own domain, with its certificate handled for you.",
66 href: "https://docs.g1t.sh/guides/deployments/",
67 },
68 {
69 date: "2026-10-04",
70 title: "Rename a workspace",
71 about: "Old addresses redirect for 90 days, so links and clones keep working.",
72 href: "/{workspace}/-/settings",
73 },
74 {
75 date: "2026-10-04",
76 title: "Workspace names and icons",
77 about: "Give a workspace a display name and an icon of its own.",
78 href: "/{workspace}/-/settings",
79 },
80];
81
82/** An entry's link, with the workspace filled in; null when it needs one and there is none. */
83export function changelogHref(entry: ChangelogEntry, workspace: string | null): string | null {
84 if (!entry.href.includes("{workspace}")) return entry.href;
85 return workspace ? entry.href.replaceAll("{workspace}", workspace) : null;
86}