feat: 添加项目详情 Markdown 渲染支持及项目添加脚本

- 新增 MarkdownContent 组件支持 Markdown 渲染
- 新增 scripts 目录下的项目添加工具脚本
- 更新项目详情页面支持 Markdown 内容显示
- 更新依赖包支持 Markdown 解析

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-12-27 17:19:39 +08:00
co-authored by Claude
parent a0cca1f171
commit bf69555978
7 changed files with 1765 additions and 31 deletions
+7 -10
View File
@@ -1,6 +1,7 @@
'use client'
import Link from 'next/link'
import { MarkdownContent } from './MarkdownContent'
interface ProjectDetailProps {
project: {
@@ -127,18 +128,14 @@ export function ProjectDetail({ project, locale }: ProjectDetailProps) {
</header>
{/* Article Content */}
<article className="prose prose-lg dark:prose-invert max-w-none prose-headings:font-display prose-a:text-blue-600 dark:prose-a:text-blue-400 hover:prose-a:text-blue-800 dark:hover:prose-a:text-blue-300 prose-img:border-2 prose-img:border-black dark:prose-img:border-gray-600 prose-img:shadow-brutal dark:prose-img:shadow-none prose-ul:marker:text-black prose-ul:dark:marker:text-white">
<article className="max-w-4xl mx-auto">
{/* Lead paragraph */}
<p className="lead font-display text-xl mb-8">{displayDescription}</p>
<p className="lead font-display text-xl mb-8 text-gray-700 dark:text-gray-300">
{displayDescription}
</p>
{/* Full content */}
{displayContent && (
<div
dangerouslySetInnerHTML={{
__html: displayContent.replace(/\n/g, '<br />'),
}}
/>
)}
{/* Full content with Markdown rendering */}
{displayContent && <MarkdownContent content={displayContent} />}
{/* Installation section if GitHub link exists */}
{project.links.some((l) => l.type === 'GITHUB') && (