This PR introduces Keystatic to let us edit twenty.com's content with a CMS. For now, we'll focus on creating release notes through Keystatic as it uses quite simple Markdown. Other types of content will need some refactoring to work with Keystatic. https://github.com/user-attachments/assets/e9f85bbf-daff-4b41-bc97-d1baf63758b2 --------- Co-authored-by: Félix Malfait <felix@twenty.com>
34 lines
1.1 KiB
TypeScript
34 lines
1.1 KiB
TypeScript
import { Background } from '@/app/_components/oss-friends/Background';
|
|
import { Card, OssData } from '@/app/_components/oss-friends/Card';
|
|
import { CardContainer } from '@/app/_components/oss-friends/CardContainer';
|
|
import { ContentContainer } from '@/app/_components/oss-friends/ContentContainer';
|
|
import { Header } from '@/app/_components/oss-friends/Header';
|
|
|
|
export const metadata = {
|
|
title: 'Twenty - OSS friends',
|
|
description:
|
|
'At Twenty, we are proud to be part of a global open-source movement. Here are some of our fellow open source friends.',
|
|
icons: '/images/core/logo.svg',
|
|
};
|
|
|
|
export const dynamic = 'force-dynamic';
|
|
|
|
export default async function OssFriends() {
|
|
const ossList = await fetch('https://formbricks.com/api/oss-friends');
|
|
|
|
const listJson = await ossList.json();
|
|
|
|
return (
|
|
<Background>
|
|
<ContentContainer>
|
|
<Header />
|
|
<CardContainer>
|
|
{listJson.data.map((data: OssData, index: number) => (
|
|
<Card key={index} data={data} />
|
|
))}
|
|
</CardContainer>
|
|
</ContentContainer>
|
|
</Background>
|
|
);
|
|
}
|