personal-homepage/docs/ui-design-spec.md

597 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# SepComet 个人主页 UI 设计文档
> 关联文档:`REQUIREMENTS.md`、`design-system/sepcomet/MASTER.md`
>
> 本文档用于确定本项目的页面风格、信息架构、视觉规则与组件边界。
> 如与自动生成的 `design-system/sepcomet/MASTER.md` 有冲突,以本文档为准。
---
## 1. 项目定位
### 1.1 产品目标
SepComet 个人主页是一个**公开、静态、数据驱动**的个人站点,用于:
- 展示个人身份与长期输出
- 呈现开发日志与精选项目
- 提供可分享的求职/展示入口
- 通过 Markdown / JSON 数据驱动页面更新
### 1.2 用户印象目标
访问者打开首页后,应感知到:
1. 这是一个**持续记录开发过程**的工程师主页
2. 内容真实、结构清楚、便于快速浏览
3. 项目与日志都不是装饰,而是核心内容
4. 站点风格有开发者气质,但不走重特效路线
### 1.3 设计关键词
- 工程编辑部
- 内容优先
- 理性克制
- 数据驱动
- 轻技术感
- 可读性优先
---
## 2. 主题方向
### 2.1 最终方向
本项目采用:
## **工程编辑部风格 + 少量终端技术感**
即:
- 整体以**浅色、清晰、排版感强**的编辑式布局为主
- 在局部模块中引入**等宽字体、状态标签、深色数据面板**等技术感元素
- 避免做成纯作品集站点,也避免做成后台仪表盘
### 2.2 风格原则
- 首页优先表达“**我持续在做事**”,而不是“我会做炫酷页面”
- 日志与项目同等重要,不让任何一方沦为陪衬
- 动效只做轻反馈,不做强打断
- 组件层次清楚,便于后续按数据模型扩展
---
## 3. 信息架构
### 3.1 页面结构
站点包含以下页面:
- `/` 首页
- `/logs` 开发日志列表页
- `/logs/[slug]` 日志详情页
- `/projects` 项目展示页
- `/shares` 分享链接页
### 3.2 导航结构
顶部导航建议包含:
- Home
- Logs
- Projects
- Shares
- GitHub / Gitea外链
导航设计要求:
- 桌面端采用悬浮式头部
- 移动端折叠菜单
- 当前页面有明确激活态
---
## 4. 首页设计
## 4.1 页面目标
首页不是单纯名片,而是“**个人概览页 + 内容入口页**”。
首页负责完成三件事:
1. 快速建立人物认知
2. 把访问者引导到日志与项目
3. 展示持续产出的证据
## 4.2 模块顺序
首页建议按以下顺序排列:
1. Hero
2. Latest Logs
3. Featured Projects
4. Gitea Activity
5. Recent Shares可选
6. Footer
## 4.3 Hero
### 内容组成
- 头像
- 名字SepComet
- 一句话身份说明
- 2~3 行简介
- 社交链接按钮
- 右侧状态卡 / 数据摘要
### 文案方向
建议语气:
- 客观
- 稳定
- 不装饰性夸张
示例表达方向:
- `Unity 开发者 / 正在构建数据驱动的个人主页与工具链`
- `记录开发过程,整理项目输出,把日常构建沉淀成可浏览的公开主页`
### 视觉布局
桌面端采用左右结构:
- 左:身份与文案
- 右:状态卡 / 技术摘要
移动端改为单列。
## 4.4 Latest Logs
### 目标
让访问者在首页直接看到“最近在做什么”。
### 展示策略
- 展示最近 3~5 条
- 每张卡片包含:
- 标题
- 日期
- repo
- tags
- summary
### 设计要求
- 日期与 repo 使用等宽字体
- summary 限制在 2~3 行
- 卡片应支持整块点击
- hover 只做边框/阴影反馈
## 4.5 Featured Projects
### 目标
让访问者快速识别代表性项目与技术方向。
### 每个项目卡片包含
- 封面图
- 名称
- 描述
- 标签
- 外链按钮组
- Gitea Repo
- Demo如有
- Download如有
### 设计要求
- 封面图使用固定宽高比
- Featured 项目可带小型状态标签
- 网格排版优先整齐、稳定,不使用复杂瀑布流
## 4.6 Gitea Activity
### 目标
补足“真实活跃开发中”的信号。
### 内容组成
- 贡献热力图
- 最近活动列表
- 前往 Gitea 主页链接
### 视觉策略
- 该模块允许使用**深色面板**
- 与首页浅色主背景形成对比
- 热力图必须有 legend不允许只靠颜色传达信息
## 4.7 Recent Shares可选
如果首页首版内容密度过高,可不放在首页,只保留 `/shares` 页面与导航入口。
如放首页,建议仅展示最近 2~3 条。
---
## 5. 页面级设计规范
## 5.1 `/logs`
### 页面目标
提供清楚、可扫描的开发日志索引。
### 布局建议
- 顶部:页标题 + 简介
- 中部:时间倒序日志列表
- 预留筛选区域(后续可扩展)
### 推荐样式
采用“**时间线 + 卡片**”混合形式:
- 左侧:日期轨道
- 右侧:日志卡片
这样可强化“开发记录”的时间连续性。
### 日志卡必须包含
- 标题
- 日期
- tags
- summary
- repo
## 5.2 `/logs/[slug]`
### 页面目标
正文阅读体验优先。
### 内容顺序
1. 标题
2. 日期 / repo / commit links
3. tags
4. Markdown 正文
5. 返回列表入口
### 设计要求
- 正文最大宽度控制在舒适阅读范围
- Markdown 使用统一排版,不手写零散样式
- 代码块、引用、列表、标题层级需统一
## 5.3 `/projects`
### 页面目标
作为结构化项目索引页,而非花哨作品集墙。
### 页面内容
- 页头说明
- 项目卡片网格
- 可预留筛选能力
### 卡片层级
1. 名称
2. 描述
3. 标签
4. 外链操作
## 5.4 `/shares`
### 页面目标
承载 Seafile 分享资源的公开入口。
### 展示形式
更接近“资源列表页”,而非项目卡片页。
每条资源包含:
- 文件名
- 描述
- 时间
- 跳转链接
---
## 6. 视觉系统
## 6.1 色板
### 基础色
| Token | 值 | 用途 |
|------|------|------|
| `--bg` | `#FAFAFA` | 页面背景 |
| `--surface` | `#FFFFFF` | 卡片背景 |
| `--text` | `#09090B` | 主文本 |
| `--muted` | `#52525B` | 次级文本 |
| `--border` | `#E4E4E7` | 边框 |
| `--accent` | `#2563EB` | 链接 / CTA / 激活态 |
### 技术感辅助色
| Token | 值 | 用途 |
|------|------|------|
| `--success` | `#22C55E` | 活跃状态 / 统计信号 |
| `--panel-dark` | `#0F172A` | 深色数据面板背景 |
| `--panel-text` | `#F8FAFC` | 深色面板文字 |
| `--tag-bg` | `#F4F4F5` | 标签背景 |
### 用色原则
- 页面大面积只使用黑白灰
- 蓝色作为主强调色,避免泛滥
- 绿色只用于“运行/活跃/统计成功信号”
- 不使用高饱和多彩 UI
## 6.2 字体系统
| 类型 | 建议 |
|------|------|
| 标题 | Archivo |
| 正文 | Space Grotesk |
| 等宽信息 | JetBrains Mono 或 Fira Code |
### 字体使用建议
- 标题承担结构感与力量感
- 正文保持清楚耐读
- 日期、repo、commit、标签元数据可适度使用等宽字体
## 6.3 圆角、边框、阴影
- 卡片圆角:`rounded-2xl`
- 边框:`1px solid zinc-200`
- 阴影:轻微,不制造悬浮夸张感
建议层级:
- 默认:仅边框
- hover边框稍深 + 轻阴影
- 强调卡:轻阴影 + 更清楚的边框
## 6.4 间距
建议使用统一间距系统:
- `4`
- `8`
- `12`
- `16`
- `24`
- `32`
- `48`
- `64`
区块间距应明显大于卡片内部间距,确保信息分组清楚。
---
## 7. 组件设计规范
## 7.1 建议组件树
### 布局层
- `Layout.astro`
- `Header.astro`
- `Footer.astro`
- `Container.astro`
### 首页层
- `Hero.astro`
- `StatusCard.astro`
- `SectionTitle.astro`
- `LogCard.astro`
- `ProjectCard.astro`
- `GiteaHeatmap.jsx`
- `ActivityList.astro`
### 通用层
- `TagList.astro`
- `MetaRow.astro`
- `EmptyState.astro`
- `LinkButton.astro`
## 7.2 卡片规范
所有卡片遵循:
- 内部留白统一
- 标题层级清楚
- hover 有反馈
- 可点击区域完整
- 图片与数据区分明确
### 不允许
- 卡片内容上下间距混乱
- 缺少 hover 反馈却整块可点
- hover 使用缩放导致布局抖动
## 7.3 标签规范
标签用于:
- 技术栈
- 日志主题
- 项目分类
样式建议:
- 浅灰背景
- 深灰文字
- 小号圆角胶囊
- 可选等宽字体增强技术感
---
## 8. 交互规范
### 允许的交互
- 卡片 hover 阴影/边框变化
- 链接 hover 颜色变化
- 轻量滚动入场
- 当前导航高亮
- 按钮按下状态
### 禁止的交互
- 大幅位移的 hover
- 强制滚动动画
- 复杂页面切换特效
- 大面积视差
- 自动播放且无法关闭的动态效果
### 动效原则
- 时长控制在 `150ms ~ 300ms`
- 所有动效需兼容 `prefers-reduced-motion`
---
## 9. 响应式规范
## 9.1 断点目标
至少覆盖:
- 375px
- 768px
- 1024px
- 1440px
## 9.2 各页面行为
### 首页
- DesktopHero 左右分栏
- Tablet信息压缩、项目 2 列
- MobileHero 单列、项目单列、日志卡单列
### Logs / Projects / Shares
- 列表在移动端必须无横向滚动
- 长标题需要合理截断
- 图片区域保留稳定尺寸,避免内容跳动
---
## 10. 可访问性规范
以下为首版必须遵守的要求:
- 使用语义 HTML`nav`、`main`、`section`、`article`、`footer`
- 所有有意义图片必须带 `alt`
- 图标按钮必须有 `aria-label`
- 文字对比度至少达到 4.5:1
- 不能只靠颜色表达状态
- 热力图必须附带文字 legend
- 键盘可访问性完整
- 聚焦态必须清晰可见
---
## 11. 内容表现规范
## 11.1 日志
日志内容应强调:
- 做了什么
- 为什么这样做
- 关联仓库 / commit
首页摘要不需要完整展开,但要足够真实,不使用无意义占位文本。
## 11.2 项目
项目描述应突出:
- 项目目标
- 当前形态
- 技术标签
- 外部入口
## 11.3 分享
分享条目更像“公开资源索引”,语气保持中性、实用。
---
## 12. 实现建议
## 12.1 首版优先级
### Phase 1
- 全局 Layout
- Header / Footer
- Hero
- 首页基础 section
### Phase 2
- Logs 列表页
- Log 详情页
- Markdown 样式
### Phase 3
- Projects 页
- Featured Projects 接入首页
### Phase 4
- Gitea Heatmap React Island
### Phase 5
- Shares 页
- 深色模式
- 细节打磨与 SEO
## 12.2 技术实现提醒
- 内容页优先静态生成
- 交互仅在必要位置引入 React Island
- Markdown 排版尽量基于统一富文本样式
- 图片、卡片、异步数据区域要预留尺寸,避免布局抖动
---
## 13. 非目标
本项目当前不追求:
- 重交互展示型作品集
- 炫技式动画首页
- 高度拟物化或实验性视觉
- 类 SaaS 管理后台布局
---
## 14. 一句话设计结论
> SepComet 首页应当像一个“持续构建中的工程师公开工作台”:
> **结构清楚、内容真实、风格克制、带一点技术感。**