Sat Jun 01 2024
技術スタック紹介
以下の技術を使用しています
- Next.js
- Tailwind CSS
- Biome
- Valibot
- Shiki
- remark
public
内のmdファイルに記事を書き、slugページで↓のように取得し表示しています
const Schema = v.object({
date: v.date(),
value: v.string(),
});
async function getPostBySlug(slug: string) {
const filename = `./public/${slug}/index.md`;
const { content, data } = matter(await readFile(filename, "utf8"));
const file = await formatMarkdown(content);
return v.parse(Schema, { content, ...file, ...data });
}
export default async function PostPage(props: {
params: Promise<{ slug: string }>;
}) {
const params = await props.params;
const data = await getPostBySlug(params.slug);
return (
<ArticleLayout
renderHeaderRight={() => {
return (
<Text className="font-semibold text-xs">
{data.date.toDateString()}
</Text>
);
}}
>
<Markdown>{data.value}</Markdown>
</ArticleLayout>
);
}