How cchhaan/next-mdx-blog works
这是一个可配置的 Next.js MDX 个人博客:访客浏览四类内容及分类、标签、归档,并可搜索和评论;管理员可登录管理内容、设置站点及上传图片。另有练习题生成、判分与历史记录,以及预留的 AI 笔记问答。图中按产品能力归组;README 描述了部分未采样模块,相关内部调用仅在有明确证据时连线。
Main entry points: admin.ts 管理员认证 · practice-client.tsx 练习页面 · admin 管理界面 · app 内容与索引页
Components 32
内容浏览
检索与互动
后台管理
- 管理界面
src/app/admin - 登录接口
src/app/api/admin/login/route.ts - 管理员认证
src/lib/admin.ts - 内容管理接口
src/app/api/admin/content/route.ts - 内容写入管理
src/lib/content-admin.ts - 站点设置面板
src/components/settings/settings-panel.tsx - 设置接口
src/app/api/admin/settings/route.ts - 设置读写
src/lib/settings.ts - 图片上传接口
src/app/api/admin/upload/route.ts - 图片读取接口
src/app/api/files/[key]/route.ts - 文件存储
src/lib/db.ts
练习与问答
- 练习页面
src/components/practice/practice-client.tsx - 题目生成接口
src/app/api/practice/generate/route.ts - 答案判分接口
src/app/api/practice/[id]/grade/route.ts - 练习记录接口
src/app/api/practice/history/route.ts - 记录详情接口
src/app/api/practice/[id]/route.ts - 练习生成与判分
src/lib/ai/practice.ts - 练习记录存储
src/lib/practice-db.ts - 问答接口
src/app/api/chat/route.ts - 问答入口
src/lib/ai/index.ts - 笔记检索预留
src/lib/ai/retriever.ts - 模型客户端
src/lib/ai/client.ts
Other components
- 访客
- GitHub Discussions
Connections 39
- 访客 → 内容与索引页: 浏览
- 内容与索引页 → MDX 内容加载: 读取内容
- 内容与索引页 → 站点默认配置: 读取默认值
- 内容与索引页 → 文章详情: 呈现详情
- 访客 → 搜索弹窗: 搜索
- 搜索弹窗 → 搜索接口: 请求查询
- 搜索接口 → MDX 内容加载: 加载文章
- 搜索接口 → 加权搜索: 执行检索
- 文章详情 → Giscus 评论: 呈现评论
- Giscus 评论 → GitHub Discussions: 加载评论
- 管理界面 → 登录接口: 提交口令
- 登录接口 → 管理员认证: 验证并设会话
- 管理界面 → 内容管理接口: 保存或删除
- 内容管理接口 → 管理员认证: 检查登录
- 内容管理接口 → 内容写入管理: 写入或删除
- 管理界面 → 设置接口: 读取或保存
- 设置接口 → 管理员认证: 检查登录
- 设置接口 → 设置读写: 读写设置
- 管理界面 → 图片上传接口: 上传图片
- 图片上传接口 → 管理员认证: 检查登录
- 图片上传接口 → 文件存储: 保存文件
- 图片读取接口 → 文件存储: 读取文件
- 访客 → 练习页面: 使用练习
- 练习页面 → 题目生成接口: 生成题目
- 题目生成接口 → 管理员认证: 检查登录
- 题目生成接口 → 练习生成与判分: 获取今日题目
- 练习页面 → 答案判分接口: 提交答案
- 答案判分接口 → 管理员认证: 检查登录
- 答案判分接口 → 练习生成与判分: 提交并判分
- 练习页面 → 练习记录接口: 查看历史
- 练习记录接口 → 管理员认证: 检查登录
- 练习记录接口 → 练习记录存储: 读取记录
- 练习页面 → 记录详情接口: 查看记录详情
- 记录详情接口 → 管理员认证: 检查登录
- 记录详情接口 → 练习记录存储: 读取记录与答案
- 访客 → 问答接口: 提问
- 问答接口 → 问答入口: 转交问题
- 问答入口 → 笔记检索预留: 预留检索
- 问答入口 → 模型客户端: 预留模型调用