diff --git a/packages/twenty-website/src/app/_components/releases/Release.tsx b/packages/twenty-website/src/app/_components/releases/Release.tsx
index ac3d952a0..f64d54dad 100644
--- a/packages/twenty-website/src/app/_components/releases/Release.tsx
+++ b/packages/twenty-website/src/app/_components/releases/Release.tsx
@@ -1,10 +1,8 @@
'use client';
+import { JSXElementConstructor, ReactElement } from 'react';
import styled from '@emotion/styled';
import { Gabarito } from 'next/font/google';
-import { compileMDX } from 'next-mdx-remote/rsc';
-import remarkBehead from 'remark-behead';
-import gfm from 'remark-gfm';
import { Theme } from '@/app/_components/ui/theme/theme';
import { ReleaseNote } from '@/app/releases/api/route';
@@ -91,24 +89,13 @@ const gabarito = Gabarito({
variable: '--font-gabarito',
});
-export const Release = async ({ release }: { release: ReleaseNote }) => {
- let mdxSource;
- try {
- mdxSource = await compileMDX({
- source: release.content,
- options: {
- mdxOptions: {
- development: process.env.NODE_ENV === 'development',
- remarkPlugins: [gfm, [remarkBehead, { depth: 2 }]],
- },
- },
- });
- mdxSource = mdxSource.content;
- } catch (error) {
- console.error('An error occurred during MDX rendering:', error);
- mdxSource = `
Oops! Something went wrong.
${error}`;
- }
-
+export const Release = ({
+ release,
+ mdxReleaseContent,
+}: {
+ release: ReleaseNote;
+ mdxReleaseContent: ReactElement>;
+}) => {
return (
@@ -119,8 +106,7 @@ export const Release = async ({ release }: { release: ReleaseNote }) => {
: release.date}
-
- {mdxSource}
+ {mdxReleaseContent}
);
};
diff --git a/packages/twenty-website/src/app/releases/get-releases.tsx b/packages/twenty-website/src/app/releases/get-releases.tsx
index 5b215b043..584977bcb 100644
--- a/packages/twenty-website/src/app/releases/get-releases.tsx
+++ b/packages/twenty-website/src/app/releases/get-releases.tsx
@@ -1,5 +1,9 @@
+import { JSXElementConstructor, ReactElement } from 'react';
import fs from 'fs';
import matter from 'gray-matter';
+import { compileMDX } from 'next-mdx-remote/rsc';
+import remarkBehead from 'remark-behead';
+import gfm from 'remark-gfm';
import { ReleaseNote } from '@/app/releases/api/route';
import { compareSemanticVersions } from '@/shared-utils/compareSemanticVersions';
@@ -45,3 +49,23 @@ export async function getReleases(baseUrl?: string): Promise {
return releasenotes;
}
+
+export async function getMdxReleasesContent(
+ releases: ReleaseNote[],
+): Promise>[]> {
+ const mdxSourcesPromises = releases.map(async (release) => {
+ const mdxSource = await compileMDX<{ title: string; position?: number }>({
+ source: release.content,
+ options: {
+ parseFrontmatter: true,
+ mdxOptions: {
+ development: process.env.NODE_ENV === 'development',
+ remarkPlugins: [gfm, [remarkBehead, { depth: 2 }]],
+ },
+ },
+ });
+ return mdxSource.content;
+ });
+
+ return await Promise.all(mdxSourcesPromises);
+}
diff --git a/packages/twenty-website/src/app/releases/page.tsx b/packages/twenty-website/src/app/releases/page.tsx
index b6e5dfdcc..51eb7709a 100644
--- a/packages/twenty-website/src/app/releases/page.tsx
+++ b/packages/twenty-website/src/app/releases/page.tsx
@@ -5,7 +5,10 @@ import { Line } from '@/app/_components/releases/Line';
import { Release } from '@/app/_components/releases/Release';
import { Title } from '@/app/_components/releases/StyledTitle';
import { ContentContainer } from '@/app/_components/ui/layout/ContentContainer';
-import { getReleases } from '@/app/releases/get-releases';
+import {
+ getMdxReleasesContent,
+ getReleases,
+} from '@/app/releases/get-releases';
export const metadata: Metadata = {
title: 'Twenty - Releases',
@@ -14,6 +17,7 @@ export const metadata: Metadata = {
const Home = async () => {
const releases = await getReleases();
+ const mdxReleasesContent = await getMdxReleasesContent(releases);
return (
@@ -21,7 +25,10 @@ const Home = async () => {
{releases.map((note, index) => (
-
+
{index != releases.length - 1 && }
))}