这是一个基于 Next.js + TypeScript + Tailwind CSS 构建的个人展示型网站,使用 Markdown 文件 维护个人资料、技术栈和项目内容。
- 个人资料 / 技术栈展示
- 项目列表自动读取
content/projects/*.md - 项目详情页通过
slug动态生成 - 所有核心内容都由 Markdown 驱动
- 新增项目时,只需要新增一个 Markdown 文件即可自动出现在网站中
- Next.js App Router
- TypeScript
- Tailwind CSS
- gray-matter
- react-markdown
- remark-gfm
npm install
npm run dev生产构建:
npm run build
npm run start说明:由于项目启用了 Next.js standalone 输出,npm run start 会直接运行生成后的 .next/standalone/server.js,更适合生产环境与 Docker 部署。
项目已经提供以下容器部署文件:
Dockerfile.dockerignorecompose.yaml
默认部署端口为:
3000docker build -t viewra .
docker run --name viewra -p 3000:3000 viewra运行后访问:
http://localhost:3000docker compose up -d --build停止服务:
docker compose down- 容器内服务端口固定为
3000 compose.yaml已将宿主机3000映射到容器3000next.config.ts已开启standalone输出,便于生成更适合生产部署的镜像- 示例内容目录
content/会一并打包进镜像,容器启动后可直接读取 Markdown 内容
public/
avatars/
images/
content/
profile.md
projects/
atlas-design-system.md
observability-workbench.md
src/
app/
page.tsx
profile/page.tsx
projects/page.tsx
projects/[slug]/page.tsx
components/
MarkdownRenderer.tsx
Navbar.tsx
ProfileHero.tsx
ProjectCard.tsx
Tag.tsx
TechStackGrid.tsx
lib/
markdown.ts
profile.ts
projects.ts
types/
content.ts编辑文件:
content/profile.md当前示例使用 frontmatter + markdown 正文:
---
name: Alex Chen
title: Full-Stack Engineer · Product Builder · DX Advocate
avatar: /avatars/profile-avatar.svg
email: hello@example.dev
location: Shanghai, China
socials:
- label: GitHub
href: https://github.com/your-handle
techStack:
Frontend:
- Next.js
- TypeScript
---
这里写你的个人介绍正文。name: 姓名 / 昵称title: 职业定位或个人标题avatar: 头像路径(可选)email: 联系邮箱(可选)location: 所在地(可选)socials: 社交链接数组(可选)techStack: 技术栈分类对象(可选),默认建议使用Frontend、Backend、Database、Tools、DevOps、Others,也支持你自定义新的分类名称
在以下目录新增一个 Markdown 文件:
content/projects/your-project.md项目 frontmatter 需要包含以下字段:
---
title: 你的项目名称
slug: your-project
summary: 用一句中文简介概括项目的目标、价值或核心能力。
tags:
- Next.js
- TypeScript
cover: /images/your-project-cover.svg
status: 已上线
date: 2026-03-01
repo: https://github.com/your-handle/your-project
demo: https://your-project.example.com
---
这里写项目的详细介绍正文,例如:项目背景、核心亮点、技术实现方式、上线效果与业务价值。title: 项目名称slug: 项目标识,用于详情页路由summary: 项目列表页展示的简介,推荐直接使用中文简介tags: 技术标签数组cover: 封面图路径(可选)status: 项目状态(可选)date: 日期,建议使用YYYY-MM-DDrepo: 仓库地址(可选)demo: 在线演示地址(可选)
项目正文推荐直接使用中文撰写,例如:项目背景、亮点、实现方式、上线效果等,这样可以直接用于中文展示型网站。
项目列表会自动按 date 倒序排列。
- 日期越新,越靠前
- 如果日期缺失或格式无效,会自动排在后面
slug保持唯一,避免详情页冲突date建议统一使用 ISO 格式,例如2026-03-07cover、repo、demo这些可选字段可以省略,页面会自动优雅降级- 项目正文推荐使用标准 Markdown 语法,代码块、引用、列表、链接等样式已经处理
- 默认浅色主题
- 简洁、技术感、偏专业展示风格
- 页面留白充足,适合个人品牌展示与项目介绍
你可以直接替换示例内容,把它作为正式个人网站继续维护。