Update quote style and add markdown rendering

This commit is contained in:
neutrino2211
2025-10-12 16:43:47 +01:00
parent ec86ffbee7
commit 69fa5b0a81
2 changed files with 50 additions and 39 deletions

View File

@@ -1,7 +1,7 @@
import { notFound } from 'next/navigation';
import Link from 'next/link';
import { loadStories } from '@/utils/mdxLoader';
import { formatReadingTime } from '@/utils/readingTime';
import { notFound } from "next/navigation";
import Link from "next/link";
import { loadStories } from "@/utils/mdxLoader";
import { formatReadingTime } from "@/utils/readingTime";
interface StoryPageProps {
params: {
@@ -9,27 +9,30 @@ interface StoryPageProps {
};
}
import fs from 'fs';
import fs from "fs";
import { Metadata } from "next";
export async function generateStaticParams() {
const storiesDirectory = process.cwd() + '/src/content/stories';
const storiesDirectory = process.cwd() + "/src/content/stories";
try {
const filenames = fs.readdirSync(storiesDirectory);
return filenames.map((filename: string) => ({
slug: filename.replace(/\.mdx$/, ''),
slug: filename.replace(/\.mdx$/, ""),
}));
} catch {
return [];
}
}
export async function generateMetadata({ params }: StoryPageProps) {
export async function generateMetadata({
params,
}: StoryPageProps): Promise<Metadata> {
const story = await getStoryBySlug(params.slug);
if (!story) {
return {
title: 'Story Not Found',
title: "Story Not Found",
};
}
@@ -50,12 +53,14 @@ export async function generateMetadata({ params }: StoryPageProps) {
async function getStoryBySlug(slug: string) {
const stories = await loadStories();
return stories.find(story => story.id === slug.replace(/[^a-zA-Z0-9]/g, '-'));
return stories.find(
(story) => story.id === slug.replace(/[^a-zA-Z0-9]/g, "-"),
);
}
export default async function StoryPage({ params }: StoryPageProps) {
const story = await getStoryBySlug(params.slug);
if (!story) {
notFound();
}
@@ -122,16 +127,16 @@ export default async function StoryPage({ params }: StoryPageProps) {
<h1 className="text-3xl md:text-4xl font-bold text-gray-900 uppercase mb-4">
{story.title}
</h1>
<div className="flex gap-4 text-sm mb-6">
<span className="bg-yellow-200 text-black px-3 py-1 border-2 border-black font-bold">
{formatReadingTime(story.readTime)} read
</span>
<span className="bg-gray-200 text-black px-3 py-1 border-2 border-black font-bold">
{new Date(story.createdAt).toLocaleDateString('en-US', {
year: 'numeric',
month: 'long',
day: 'numeric'
{new Date(story.createdAt).toLocaleDateString("en-US", {
year: "numeric",
month: "long",
day: "numeric",
})}
</span>
</div>
@@ -153,4 +158,4 @@ export default async function StoryPage({ params }: StoryPageProps) {
</div>
</div>
);
}
}