feat: add MDX support and blog functionality
- Updated next.config.ts to include MDX support with new page extensions. - Added dependencies for MDX in package.json. - Refactored Home component to include BlogList. - Adjusted layout and styling in Projects and Timeline components. - Implemented dynamic blog post routing with generateStaticParams and BlogPost component. - Created BlogLayout for consistent blog page structure. - Added initial blog post in MDX format. - Developed BlogList component to display a list of blog posts. - Introduced blog utility functions to read and parse MDX files.
This commit is contained in:
parent
deca6506a9
commit
35f2c41d7b
11 changed files with 431 additions and 5 deletions
30
src/app/blog/[slug/]/page.tsx
Normal file
30
src/app/blog/[slug/]/page.tsx
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
import { notFound } from "next/navigation";
|
||||
import { readdirSync } from "fs";
|
||||
import { join } from "path";
|
||||
|
||||
export async function generateStaticParams() {
|
||||
const blogDir = join(process.cwd(), "src/app/blog/posts");
|
||||
const files = readdirSync(blogDir).filter((file) => file.endsWith(".mdx"));
|
||||
|
||||
return files.map((file) => ({
|
||||
slug: file.replace(".mdx", ""),
|
||||
}));
|
||||
}
|
||||
|
||||
export default async function BlogPost({
|
||||
params,
|
||||
}: {
|
||||
params: Promise<{ slug: string }>;
|
||||
}) {
|
||||
const { slug } = await params;
|
||||
|
||||
try {
|
||||
const Post = (
|
||||
await import(`@/app/blog/posts/${slug}.mdx`)
|
||||
).default;
|
||||
|
||||
return <Post />;
|
||||
} catch {
|
||||
notFound();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue