diff --git a/packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx b/packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx
index 5725423a87..28f2557a70 100644
--- a/packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx
+++ b/packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx
@@ -340,9 +340,9 @@ const SettingsAdminConfigVariableDetails = lazy(() =>
})),
);
-const SettingsReleases = lazy(() =>
- import('~/pages/settings/releases/SettingsReleases').then((module) => ({
- default: module.SettingsReleases,
+const SettingsUpdates = lazy(() =>
+ import('~/pages/settings/updates/SettingsUpdates').then((module) => ({
+ default: module.SettingsUpdates,
})),
);
@@ -625,7 +625,7 @@ export const SettingsRoutes = ({ isAdminPageEnabled }: SettingsRoutesProps) => (
/>
}
>
- } />
+ } />
diff --git a/packages/twenty-front/src/modules/settings/hooks/useSettingsNavigationItems.tsx b/packages/twenty-front/src/modules/settings/hooks/useSettingsNavigationItems.tsx
index cb036f4614..f31b084dfd 100644
--- a/packages/twenty-front/src/modules/settings/hooks/useSettingsNavigationItems.tsx
+++ b/packages/twenty-front/src/modules/settings/hooks/useSettingsNavigationItems.tsx
@@ -202,8 +202,8 @@ const useSettingsNavigationItems = (): SettingsNavigationSection[] => {
isHidden: !isAdminEnabled,
},
{
- label: t`Releases`,
- path: SettingsPath.Releases,
+ label: t`Updates`,
+ path: SettingsPath.Updates,
Icon: IconRocket,
isHidden: !permissionMap[PermissionFlagType.WORKSPACE],
},
diff --git a/packages/twenty-front/src/pages/settings/releases/SettingsReleases.tsx b/packages/twenty-front/src/pages/settings/releases/SettingsReleases.tsx
deleted file mode 100644
index 56beaf9b6a..0000000000
--- a/packages/twenty-front/src/pages/settings/releases/SettingsReleases.tsx
+++ /dev/null
@@ -1,47 +0,0 @@
-import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer';
-import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer';
-import { TabList } from '@/ui/layout/tab-list/components/TabList';
-import { t } from '@lingui/core/macro';
-import { SettingsPath } from 'twenty-shared/types';
-import { getSettingsPath } from 'twenty-shared/utils';
-import { IconFlask, IconRocket } from 'twenty-ui/display';
-
-import { SettingsReleasesTabContent } from './components';
-import { SETTINGS_RELEASES_TABS, SETTINGS_RELEASES_TABS_ID } from './constants';
-
-export const SettingsReleases = () => {
- const tabs = [
- {
- id: SETTINGS_RELEASES_TABS.CHANGELOG,
- title: t`Changelog`,
- Icon: IconRocket,
- },
- {
- id: SETTINGS_RELEASES_TABS.LAB,
- title: t`Lab`,
- Icon: IconFlask,
- },
- ];
-
- return (
-
-
-
-
-
-
- );
-};
diff --git a/packages/twenty-front/src/pages/settings/releases/components/SettingsReleasesChangelogContent.tsx b/packages/twenty-front/src/pages/settings/releases/components/SettingsReleasesChangelogContent.tsx
deleted file mode 100644
index 81dfa6c605..0000000000
--- a/packages/twenty-front/src/pages/settings/releases/components/SettingsReleasesChangelogContent.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-import styled from '@emotion/styled';
-import React, { useEffect, useState } from 'react';
-import rehypeStringify from 'rehype-stringify';
-import remarkParse from 'remark-parse';
-import remarkRehype from 'remark-rehype';
-import { type PluggableList, unified } from 'unified';
-import { visit } from 'unist-util-visit';
-
-import { ScrollWrapper } from '@/ui/utilities/scroll/components/ScrollWrapper';
-import { formatToHumanReadableDate } from '~/utils/date-utils';
-
-type ReleaseNote = {
- slug: string;
- date: string;
- release: string;
- content: string;
- html: string;
-};
-
-const StyledReleaseContainer = styled.div`
- img {
- margin: ${({ theme }) => theme.spacing(6)} 0px 0px;
- max-width: 100%;
- }
-
- p img {
- margin: 0px;
- }
-
- h3 {
- color: ${({ theme }) => theme.font.color.primary};
- margin: ${({ theme }) => theme.spacing(6)} 0px 0px;
- }
- code {
- background: ${({ theme }) => theme.background.tertiary};
- padding: 4px;
- border-radius: 4px;
- }
- p {
- color: ${({ theme }) => theme.font.color.secondary};
- font-family: Inter, sans-serif;
- font-size: ${({ theme }) => theme.font.size.md};
- line-height: 19.5px;
- font-weight: ${({ theme }) => theme.font.weight.regular};
- margin: ${({ theme }) => theme.spacing(6)} 0px 0px;
- text-align: justify;
- }
-
- li {
- color: ${({ theme }) => theme.font.color.secondary};
- }
-
- li strong {
- color: ${({ theme }) => theme.font.color.primary};
- }
-`;
-
-const StyledReleaseHeader = styled.h2`
- color: ${({ theme }) => theme.font.color.primary};
- font-weight: ${({ theme }) => theme.font.weight.medium};
- line-height: 18px;
- font-size: ${({ theme }) => theme.font.size.md};
- margin: 0;
- margin-top: ${({ theme }) => theme.spacing(10)};
-
- &:first-of-type {
- margin-top: 0;
- }
-`;
-
-const StyledReleaseDate = styled.span`
- font-weight: ${({ theme }) => theme.font.weight.regular};
- font-size: 12px;
- line-height: 18px;
- color: ${({ theme }) => theme.font.color.tertiary};
-`;
-
-export const SettingsReleasesChangelogContent = () => {
- const [releases, setReleases] = useState([]);
-
- useEffect(() => {
- fetch('https://twenty.com/api/releases').then(async (res) => {
- const json = await res.json();
- for (const release of json) {
- release.html = String(
- await unified()
- .use([remarkParse, remarkRehype, rehypeStringify] as PluggableList)
- .use(() => (tree: any) => {
- visit(tree, (node) => {
- if (node.tagName === 'h1' || node.tagName === 'h2') {
- node.tagName = 'h3';
- }
- });
- })
- .process(release.content),
- );
- }
- setReleases(json);
- });
- }, []);
-
- return (
-
-
- {releases.map((release) => (
-
- {release.release}
-
- {formatToHumanReadableDate(release.date)}
-
-
-
- ))}
-
-
- );
-};
diff --git a/packages/twenty-front/src/pages/settings/releases/components/SettingsReleasesTabContent.tsx b/packages/twenty-front/src/pages/settings/releases/components/SettingsReleasesTabContent.tsx
deleted file mode 100644
index 7ce6e1fc8c..0000000000
--- a/packages/twenty-front/src/pages/settings/releases/components/SettingsReleasesTabContent.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-import { SettingsLabContent } from '@/settings/lab/components/SettingsLabContent';
-import { activeTabIdComponentState } from '@/ui/layout/tab-list/states/activeTabIdComponentState';
-import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue';
-import {
- SETTINGS_RELEASES_TABS,
- SETTINGS_RELEASES_TABS_ID,
-} from '../constants';
-import { SettingsReleasesChangelogContent } from './SettingsReleasesChangelogContent';
-
-export const SettingsReleasesTabContent = () => {
- const activeTabId = useRecoilComponentValue(
- activeTabIdComponentState,
- SETTINGS_RELEASES_TABS_ID,
- );
-
- switch (activeTabId) {
- case SETTINGS_RELEASES_TABS.CHANGELOG:
- return ;
- case SETTINGS_RELEASES_TABS.LAB:
- return ;
- default:
- return ;
- }
-};
diff --git a/packages/twenty-front/src/pages/settings/releases/components/index.ts b/packages/twenty-front/src/pages/settings/releases/components/index.ts
deleted file mode 100644
index c5644b31ec..0000000000
--- a/packages/twenty-front/src/pages/settings/releases/components/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export { SettingsReleasesChangelogContent } from './SettingsReleasesChangelogContent';
-export { SettingsReleasesTabContent } from './SettingsReleasesTabContent';
diff --git a/packages/twenty-front/src/pages/settings/releases/constants/SettingsReleasesTabs.ts b/packages/twenty-front/src/pages/settings/releases/constants/SettingsReleasesTabs.ts
deleted file mode 100644
index 10a877fa62..0000000000
--- a/packages/twenty-front/src/pages/settings/releases/constants/SettingsReleasesTabs.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export const SETTINGS_RELEASES_TABS = {
- CHANGELOG: 'changelog',
- LAB: 'lab',
-};
diff --git a/packages/twenty-front/src/pages/settings/releases/constants/SettingsReleasesTabsId.ts b/packages/twenty-front/src/pages/settings/releases/constants/SettingsReleasesTabsId.ts
deleted file mode 100644
index 2cd50b2c81..0000000000
--- a/packages/twenty-front/src/pages/settings/releases/constants/SettingsReleasesTabsId.ts
+++ /dev/null
@@ -1 +0,0 @@
-export const SETTINGS_RELEASES_TABS_ID = 'settings-releases-tabs';
diff --git a/packages/twenty-front/src/pages/settings/releases/constants/index.ts b/packages/twenty-front/src/pages/settings/releases/constants/index.ts
deleted file mode 100644
index e03e3fecec..0000000000
--- a/packages/twenty-front/src/pages/settings/releases/constants/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export { SETTINGS_RELEASES_TABS } from './SettingsReleasesTabs';
-export { SETTINGS_RELEASES_TABS_ID } from './SettingsReleasesTabsId';
diff --git a/packages/twenty-front/src/pages/settings/releases/index.ts b/packages/twenty-front/src/pages/settings/releases/index.ts
deleted file mode 100644
index 75f0132c83..0000000000
--- a/packages/twenty-front/src/pages/settings/releases/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { SettingsReleases } from './SettingsReleases';
diff --git a/packages/twenty-front/src/pages/settings/updates/SettingsUpdates.tsx b/packages/twenty-front/src/pages/settings/updates/SettingsUpdates.tsx
new file mode 100644
index 0000000000..9453024d50
--- /dev/null
+++ b/packages/twenty-front/src/pages/settings/updates/SettingsUpdates.tsx
@@ -0,0 +1,64 @@
+import { SettingsCard } from '@/settings/components/SettingsCard';
+import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer';
+import { SettingsLabContent } from '@/settings/lab/components/SettingsLabContent';
+import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer';
+import { useTheme } from '@emotion/react';
+import styled from '@emotion/styled';
+import { t } from '@lingui/core/macro';
+import { SettingsPath } from 'twenty-shared/types';
+import { getSettingsPath } from 'twenty-shared/utils';
+import { H2Title, IconTransform } from 'twenty-ui/display';
+import { Section } from 'twenty-ui/layout';
+
+const StyledCardLink = styled.a`
+ text-decoration: none;
+`;
+
+export const SettingsUpdates = () => {
+ const theme = useTheme();
+
+ return (
+
+
+
+
+
+
+ }
+ title={t`Read changelog`}
+ />
+
+
+
+
+
+
+ );
+};
diff --git a/packages/twenty-shared/src/types/SettingsPath.ts b/packages/twenty-shared/src/types/SettingsPath.ts
index fbdc70aba7..68bb8aec34 100644
--- a/packages/twenty-shared/src/types/SettingsPath.ts
+++ b/packages/twenty-shared/src/types/SettingsPath.ts
@@ -26,7 +26,7 @@ export enum SettingsPath {
NewApprovedAccessDomain = 'domains/approved-access-domain/new',
NewEmailingDomain = 'domains/emailing-domain/new',
EmailingDomainDetail = 'domains/emailing-domain/:domainId',
- Releases = 'releases',
+ Updates = 'updates',
AI = 'ai',
AINewAgent = 'ai/new-agent',
AIAgentDetail = 'ai/agents/:agentId',
diff --git a/packages/twenty-ui/src/display/icon/components/TablerIcons.ts b/packages/twenty-ui/src/display/icon/components/TablerIcons.ts
index e757458171..520633a8cd 100644
--- a/packages/twenty-ui/src/display/icon/components/TablerIcons.ts
+++ b/packages/twenty-ui/src/display/icon/components/TablerIcons.ts
@@ -357,6 +357,7 @@ export {
IconTimeDuration60,
IconTimelineEvent,
IconTool,
+ IconTransform,
IconTrash,
IconTrashOff,
IconTrashX,
diff --git a/packages/twenty-ui/src/display/index.ts b/packages/twenty-ui/src/display/index.ts
index 5fa83cd63c..713bdd57a0 100644
--- a/packages/twenty-ui/src/display/index.ts
+++ b/packages/twenty-ui/src/display/index.ts
@@ -422,6 +422,7 @@ export {
IconTimeDuration60,
IconTimelineEvent,
IconTool,
+ IconTransform,
IconTrash,
IconTrashOff,
IconTrashX,