init
This commit is contained in:
@@ -0,0 +1,594 @@
|
||||
# Home4j 产品设计文档(PDD)
|
||||
|
||||
> **文档版本**:v1.1
|
||||
> **创建日期**:2026年1月30日
|
||||
> **最后更新**:2026年2月3日
|
||||
> **文档状态**:修订版
|
||||
|
||||
---
|
||||
|
||||
## 1. 概述与愿景
|
||||
|
||||
### 1.1 项目一句话介绍
|
||||
|
||||
**Home4j** 是一款基于 Java 技术栈的极简、高性能、可自托管的 Home 仪表盘和导航工具,专为独立开发者、内容创作者和小型团队打造。
|
||||
|
||||
### 1.2 核心价值主张
|
||||
|
||||
> 市面上鲜有基于 Java 的 Home 仪表盘解决方案。Home4j 填补这一空白,为 Java 生态用户提供**轻量级、高度可定制、开箱即用**的首页导航工具,让用户在熟悉的技术栈中获得一流的自托管体验。
|
||||
|
||||
### 1.3 与竞品的差异化定位
|
||||
|
||||
| 差异化维度 | Home4j 定位 |
|
||||
|-----------|------------|
|
||||
| **技术栈** | 基于 **Quarkus** 的轻量级 Java 方案,对 Java 开发者友好 |
|
||||
| **配置方式** | **Web UI 为主**,数据库存储配置,支持导出备份 |
|
||||
| **资源占用** | 目标内存 < 128MB,启动时间 < 3秒(JVM 模式) |
|
||||
| **扩展性** | 预留 Widget 插件机制,支持企业级二次开发 |
|
||||
| **部署体验** | 单 JAR 文件 / Docker 一键部署,零外部依赖 |
|
||||
| **离线友好** | 所有资源本地化(图标、CSS),支持内网离线部署 |
|
||||
|
||||
### 1.4 从参考项目中学到的最关键启发
|
||||
|
||||
| 参考项目 | 核心启发 | 应用到 Home4j |
|
||||
|---------|---------|--------------|
|
||||
| **Flame** | 极简至上,专注核心功能;书签+应用分类清晰 | 采用相似的简洁 UI 哲学,MVP 聚焦书签管理 |
|
||||
| **Homer** | YAML 配置驱动,声明式管理;图标系统完善 | 支持 YAML 配置文件,内置图标库 |
|
||||
| **Glance** | Widget 化设计,信息聚合能力强 | 预留 Widget 扩展架构 |
|
||||
| **Homepage** | 服务状态监控集成,实用性强 | v1.0 加入服务健康检查 |
|
||||
| **Dashy** | 高度可定制,主题丰富 | 基于 DaisyUI 实现多主题切换 |
|
||||
| **Heimdall** | 应用启动器思维,增强型书签概念 | 支持应用分组和快捷访问 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 用户与市场分析
|
||||
|
||||
### 2.1 目标用户画像
|
||||
|
||||
#### Persona 1:独立开发者「小明」
|
||||
|
||||
| 属性 | 描述 |
|
||||
|-----|------|
|
||||
| **背景** | 全栈开发者,自建 NAS 和多个服务(GitLab、Jenkins、Portainer等) |
|
||||
| **典型场景** | 需要统一入口管理 10+ 个自托管服务,希望一目了然 |
|
||||
| **痛点** | 现有工具要么太重(Dashy),要么不熟悉技术栈(Node.js) |
|
||||
| **期望** | 轻量、快速、能用 Java 二次开发、Docker 部署简单 |
|
||||
|
||||
#### Persona 2:小型团队技术负责人「阿杰」
|
||||
|
||||
| 属性 | 描述 |
|
||||
|-----|------|
|
||||
| **背景** | 5人创业团队 CTO,管理内部工具和文档入口 |
|
||||
| **典型场景** | 为团队搭建内部 Portal,整合 Notion、飞书、内部系统 |
|
||||
| **痛点** | 需要简单的权限控制,但不想引入复杂系统 |
|
||||
| **期望** | 支持多用户、可配置访问权限、界面专业美观 |
|
||||
|
||||
#### Persona 3:内容创作者「小美」
|
||||
|
||||
| 属性 | 描述 |
|
||||
|-----|------|
|
||||
| **背景** | 技术博主,自建博客、图床、评论系统等 |
|
||||
| **典型场景** | 希望有一个美观的个人主页展示所有项目入口 |
|
||||
| **痛点** | 设计能力有限,希望开箱即用且美观 |
|
||||
| **期望** | 多主题可选、支持自定义背景、移动端适配好 |
|
||||
|
||||
### 2.2 竞品分析
|
||||
|
||||
| 维度 | Flame | Homer | Dashy | Heimdall | **Home4j** |
|
||||
|-----|-------|-------|-------|----------|------------|
|
||||
| **技术栈** | Node.js | Vue/静态 | Vue | PHP/Laravel | **Java/Solon** |
|
||||
| **配置方式** | Web UI | YAML | YAML + UI | Web UI | **YAML + Web UI** |
|
||||
| **资源占用** | 低 | 极低 | 中等 | 中等 | **低** |
|
||||
| **学习曲线** | 低 | 中 | 高 | 低 | **低** |
|
||||
| **Widget 支持** | 有限 | 无 | 丰富 | 无 | **可扩展** |
|
||||
| **服务状态监控** | ✅ | ❌ | ✅ | ❌ | **✅ (v1.0)** |
|
||||
| **多用户** | ❌ | ❌ | ✅ | ❌ | **✅ (v1.0)** |
|
||||
| **中文支持** | 一般 | 一般 | 良好 | 一般 | **原生支持** |
|
||||
|
||||
### 2.3 用户核心痛点与机会点
|
||||
|
||||
| 痛点 | 机会点 |
|
||||
|-----|-------|
|
||||
| Java 生态缺乏优质 Dashboard 工具 | 填补市场空白,吸引 Java 开发者群体 |
|
||||
| 现有工具配置复杂或资源占用高 | 主打"极简 + 轻量"差异化 |
|
||||
| 纯 YAML 配置对非技术用户不友好 | 提供 Web UI 可视化配置 |
|
||||
| 大多数工具不支持中文优先 | 原生中文支持,国际化架构 |
|
||||
| 企业内部使用缺乏基础权限控制 | 提供简单实用的多用户机制 |
|
||||
|
||||
---
|
||||
|
||||
## 3. 核心功能设计(MVP)
|
||||
|
||||
### 3.1 MVP 范围界定说明
|
||||
|
||||
MVP 目标:**让用户在 5 分钟内完成部署,10 分钟内配置出可用的个人导航页**。
|
||||
|
||||
**MVP 边界原则**:
|
||||
- ✅ 必须有:书签管理、分组分类、主题切换、Docker 部署、管理员登录
|
||||
- ⏳ 延后:Widget 系统、服务监控、多用户权限
|
||||
- ❌ 不做:复杂的仪表盘编辑器、第三方集成、竞品数据导入
|
||||
|
||||
**MVP 权限模式**:
|
||||
- **只读访问**:普通访客可浏览所有书签
|
||||
- **管理员编辑**:需登录后才能添加/编辑/删除书签和配置
|
||||
|
||||
### 3.2 核心功能列表
|
||||
|
||||
| 功能名称 | 用户价值 | 优先级 | 参考来源 |
|
||||
|---------|---------|--------|---------|
|
||||
| **书签管理** | 快速访问常用服务和网站 | P0 | Flame, Homer |
|
||||
| **分组分类** | 按场景/类型组织书签,提升查找效率 | P0 | Flame, Heimdall |
|
||||
| **搜索功能** | 快速定位目标书签 | P0 | Dashy |
|
||||
| **主题切换** | 满足个性化需求,适应不同场景 | P0 | Dashy |
|
||||
| **管理员登录** | 保护编辑权限,防止误操作 | P0 | 通用需求 |
|
||||
| **Web UI 配置** | 可视化管理所有设置 | P0 | Flame |
|
||||
| **响应式布局** | 多设备访问体验一致 | P0 | 通用需求 |
|
||||
| **图标系统** | 提升视觉识别效率(本地化) | P0 | Homer, Dashy |
|
||||
| **Docker 部署** | 一键启动,环境隔离 | P0 | 所有参考项目 |
|
||||
|
||||
### 3.3 核心功能详细描述
|
||||
|
||||
#### 3.3.1 书签管理
|
||||
|
||||
**用户故事**:
|
||||
> 作为一名独立开发者,我希望能够添加、编辑、删除我的服务书签,以便快速访问我的各种自托管服务。
|
||||
|
||||
**关键交互流程**:
|
||||
```
|
||||
[首页] → [点击添加按钮] → [填写书签信息表单]
|
||||
→ [选择分组和图标] → [保存] → [首页显示新书签]
|
||||
```
|
||||
|
||||
**书签数据结构**:
|
||||
```yaml
|
||||
bookmarks:
|
||||
- name: "GitLab"
|
||||
url: "https://gitlab.example.com"
|
||||
icon: "gitlab" # 支持:内置图标名 / URL / base64
|
||||
group: "开发工具"
|
||||
description: "代码仓库"
|
||||
tags: ["开发", "Git"]
|
||||
```
|
||||
|
||||
**验收标准**:
|
||||
- [ ] 支持添加书签(名称、URL、图标、分组、描述)
|
||||
- [ ] 支持编辑和删除书签
|
||||
- [ ] 书签点击在新标签页打开
|
||||
- [ ] 支持拖拽排序
|
||||
- [ ] 数据持久化到数据库
|
||||
|
||||
#### 3.3.2 分组分类
|
||||
|
||||
**用户故事**:
|
||||
> 作为用户,我希望将书签按照用途分组(如:开发工具、监控系统、文档资料),以便快速找到目标。
|
||||
|
||||
**分组数据结构**:
|
||||
```yaml
|
||||
groups:
|
||||
- name: "开发工具"
|
||||
icon: "code"
|
||||
order: 1
|
||||
collapsed: false # 是否默认折叠
|
||||
- name: "监控系统"
|
||||
icon: "monitor"
|
||||
order: 2
|
||||
```
|
||||
|
||||
**验收标准**:
|
||||
- [ ] 支持创建、编辑、删除分组
|
||||
- [ ] 支持分组排序
|
||||
- [ ] 支持分组折叠/展开
|
||||
- [ ] 未分组书签显示在"默认"分组
|
||||
|
||||
#### 3.3.3 搜索功能
|
||||
|
||||
**用户故事**:
|
||||
> 当我有大量书签时,我希望通过关键词快速搜索定位,而不是逐个查找。
|
||||
|
||||
**交互设计**:
|
||||
- 快捷键 `/` 或 `Ctrl+K` 激活搜索框
|
||||
- 支持搜索:书签名称、URL、描述、标签
|
||||
- 实时过滤,高亮匹配内容
|
||||
- 支持键盘导航(↑↓选择,Enter打开)
|
||||
|
||||
**验收标准**:
|
||||
- [ ] 搜索响应时间 < 100ms
|
||||
- [ ] 支持模糊匹配
|
||||
- [ ] 搜索结果高亮显示
|
||||
- [ ] 空结果友好提示
|
||||
|
||||
#### 3.3.4 主题切换
|
||||
|
||||
**用户故事**:
|
||||
> 我希望根据个人喜好和使用场景切换界面主题,比如夜间使用深色模式。
|
||||
|
||||
**主题方案(基于 DaisyUI)**:
|
||||
|
||||
| 主题名称 | 适用场景 |
|
||||
|---------|---------|
|
||||
| light | 日间默认 |
|
||||
| dark | 夜间模式 |
|
||||
| cyberpunk | 科技风格 |
|
||||
| nord | 护眼柔和 |
|
||||
| dracula | 开发者偏好 |
|
||||
|
||||
**验收标准**:
|
||||
- [ ] 支持至少 5 个预设主题
|
||||
- [ ] 主题切换即时生效,无刷新
|
||||
- [ ] 记住用户主题偏好
|
||||
- [ ] 支持跟随系统深色模式
|
||||
|
||||
#### 3.3.5 数据存储策略
|
||||
|
||||
**设计理念**:
|
||||
- **所有数据统一存储在数据库**:书签、分组、应用配置、用户偏好
|
||||
- **Web UI 为主要配置入口**:用户通过界面管理所有设置
|
||||
- **支持数据导出**:可导出为 JSON/YAML 格式用于备份和迁移
|
||||
|
||||
**数据分类**:
|
||||
|
||||
| 数据类型 | 存储位置 | 说明 |
|
||||
|---------|---------|------|
|
||||
| 书签数据 | 数据库 | 书签、分组的增删改查 |
|
||||
| 应用配置 | 数据库 | 标题、副标题、主题、布局等全局设置 |
|
||||
| 用户账号 | 数据库 | 管理员账号信息 |
|
||||
| 用户偏好 | 数据库 + LocalStorage | 主题选择、语言偏好(支持游客记忆) |
|
||||
|
||||
**配置页面功能**:
|
||||
- 常规设置:网站标题、副标题、Logo
|
||||
- 外观设置:主题、布局、背景
|
||||
- 数据管理:导入、导出、备份
|
||||
- 账号管理:修改密码
|
||||
|
||||
---
|
||||
|
||||
#### 3.3.6 管理员登录
|
||||
|
||||
**用户故事**:
|
||||
> 作为网站管理员,我希望通过登录验证后才能编辑内容,防止他人误操作或恶意修改。
|
||||
|
||||
**交互流程**:
|
||||
```
|
||||
[首页] → [点击设置/编辑按钮] → [跳转登录页]
|
||||
→ [输入用户名密码] → [登录成功] → [进入管理模式]
|
||||
```
|
||||
|
||||
**首次启动流程**:
|
||||
```
|
||||
[首次访问] → [初始化向导] → [设置管理员账号密码] → [完成] → [进入首页]
|
||||
```
|
||||
|
||||
**验收标准**:
|
||||
- [ ] 首次启动强制设置管理员账号
|
||||
- [ ] 未登录用户只能浏览,不能编辑
|
||||
- [ ] 登录状态支持 Session 保持
|
||||
- [ ] 支持退出登录
|
||||
- [ ] 支持修改密码
|
||||
|
||||
---
|
||||
|
||||
## 4. 功能路线图(MVP → v1.0 → 未来方向)
|
||||
|
||||
### 4.1 分阶段功能规划
|
||||
|
||||
```
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
MVP (v0.1) v0.5 v1.0 未来
|
||||
2个月 2个月 2个月 持续
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
[书签管理] [图标库增强] [简单状态监控] [插件市场]
|
||||
[分组分类] [数据导入导出] [多用户支持] [移动端APP]
|
||||
[搜索功能] [自定义CSS] [访问统计] [团队协作]
|
||||
[主题切换] [背景自定义] [API开放] [AI推荐]
|
||||
[管理员登录] [快捷键系统] [基础Widget] [公开分享]
|
||||
[Web UI配置] [PWA支持] [数据备份恢复]
|
||||
[Docker部署]
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
```
|
||||
|
||||
### 4.2 关键里程碑
|
||||
|
||||
| 版本 | 时间节点 | 关键目标 | 成功指标 |
|
||||
|-----|---------|---------|---------|
|
||||
| **MVP (v0.1)** | M+2 | 核心功能可用,Docker 可部署 | 完成冒烟测试,GitHub 发布首个 Release |
|
||||
| **v0.5** | M+4 | 体验优化,功能完善 | 收集 50+ 用户反馈,GitHub Star > 100 |
|
||||
| **v1.0** | M+6 | 生产可用,企业特性 | 稳定运行 30 天无重大 Bug,Star > 500 |
|
||||
|
||||
---
|
||||
|
||||
## 5. 用户体验与交互设计原则
|
||||
|
||||
### 5.1 整体设计语言与调性
|
||||
|
||||
| 维度 | 设计原则 |
|
||||
|-----|---------|
|
||||
| **视觉风格** | 简洁克制、呼吸感强、信息层次清晰 |
|
||||
| **交互理念** | 减少点击、键盘友好、即时反馈 |
|
||||
| **色彩运用** | 主色调由主题决定,强调色用于交互元素 |
|
||||
| **动效策略** | 轻量过渡动画,提升流畅感但不干扰 |
|
||||
| **信息密度** | 可配置,支持紧凑/标准/宽松三种模式 |
|
||||
|
||||
### 5.2 核心用户旅程
|
||||
|
||||
#### 首次使用旅程
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 1. 部署启动 │
|
||||
│ docker run -p 8080:8080 home4j/home4j │
|
||||
│ ↓ │
|
||||
│ 2. 访问首页 │
|
||||
│ 浏览器打开 http://localhost:8080 │
|
||||
│ ↓ │
|
||||
│ 3. 初始化向导(首次,可跳过部分步骤) │
|
||||
│ [设置管理员账号] → [选择主题] → [添加第一个书签] → [完成] │
|
||||
│ ↓ │
|
||||
│ 4. 日常使用 │
|
||||
│ 游客:查看书签 → 点击访问 / 搜索定位 │
|
||||
│ 管理员:登录 → 管理编辑 → 退出登录 │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**说明**:初始化向导由前端驱动,除「设置管理员账号」为必填外,其他步骤可跳过。
|
||||
|
||||
### 5.3 关键页面交互逻辑
|
||||
|
||||
#### 首页(Dashboard)
|
||||
|
||||
```
|
||||
┌────────────────────────────────────────────────────────────┐
|
||||
│ 🏠 Home4j [搜索框 Ctrl+K] [设置⚙️] │
|
||||
├────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 📁 开发工具 [+] │
|
||||
│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
|
||||
│ │GitHub│ │GitLab│ │Jenkins│ │Notion│ │
|
||||
│ └──────┘ └──────┘ └──────┘ └──────┘ │
|
||||
│ │
|
||||
│ 📁 监控系统 [+] │
|
||||
│ ┌──────┐ ┌──────┐ ┌──────┐ │
|
||||
│ │Grafana│ │Portainer│ │Uptime│ │
|
||||
│ └──────┘ └──────┘ └──────┘ │
|
||||
│ │
|
||||
├────────────────────────────────────────────────────────────┤
|
||||
│ Powered by Home4j [主题切换🌙] │
|
||||
└────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
#### 设置页面(Settings)
|
||||
|
||||
- **Tab 式导航**:常规 | 外观 | 数据 | 关于
|
||||
- **实时预览**:修改即可看到效果
|
||||
- **导入导出**:支持 JSON/YAML 格式
|
||||
|
||||
---
|
||||
|
||||
## 6. 技术架构与实现约束(产品视角)
|
||||
|
||||
### 6.1 推荐技术栈
|
||||
|
||||
| 层级 | 技术选型 | 选型理由 |
|
||||
|-----|---------|---------|
|
||||
| **后端框架** | Quarkus | 轻量级 Java 框架,启动快、内存占用低,生态完善 |
|
||||
| **模板引擎** | Qute | Quarkus 原生模板引擎,类型安全,性能优秀 |
|
||||
| **前端样式** | DaisyUI + Tailwind(本地) | 开箱即用的组件库,主题切换方便,**本地引用无 CDN 依赖** |
|
||||
| **数据库** | H2(默认,文件模式)/ MySQL(可选) | H2 零配置,MySQL 满足企业需求 |
|
||||
| **ORM** | Panache(Hibernate) | Quarkus 原生 ORM,简化数据库操作 |
|
||||
| **容器化** | Docker | 标准化部署,环境一致性 |
|
||||
|
||||
### 6.2 部署方式
|
||||
|
||||
#### Docker 一键部署(推荐)
|
||||
|
||||
```bash
|
||||
docker run -d \
|
||||
--name home4j \
|
||||
-p 8080:8080 \
|
||||
-v /path/to/data:/app/data \
|
||||
home4j/home4j:latest
|
||||
```
|
||||
|
||||
#### Docker Compose
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
services:
|
||||
home4j:
|
||||
image: home4j/home4j:latest
|
||||
ports:
|
||||
- "8080:8080"
|
||||
volumes:
|
||||
- ./data:/app/data
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
restart: unless-stopped
|
||||
```
|
||||
|
||||
#### JAR 直接运行
|
||||
|
||||
```bash
|
||||
java -jar home4j-runner.jar
|
||||
```
|
||||
|
||||
### 6.3 数据目录规划
|
||||
|
||||
```
|
||||
/app/ # 应用根目录(Docker 内)
|
||||
├── home4j-runner.jar # 应用主程序
|
||||
├── resources/ # 资源目录
|
||||
│ ├── static/ # 静态资源
|
||||
│ │ ├── css/ # DaisyUI/Tailwind 本地文件
|
||||
│ │ ├── js/ # JavaScript 文件
|
||||
│ │ └── icons/ # 内置图标库
|
||||
│ └── templates/ # Qute 模板文件
|
||||
├── data/ # 数据目录(**需挂载**)
|
||||
│ ├── home4j.mv.db # H2 数据库文件
|
||||
│ ├── home4j.trace.db # H2 跟踪文件(可选)
|
||||
│ └── uploads/ # 用户上传文件
|
||||
│ └── icons/ # 用户上传的自定义图标
|
||||
└── logs/ # 日志目录(可选挂载)
|
||||
└── home4j.log
|
||||
```
|
||||
|
||||
**挂载说明**:
|
||||
- `/app/data` **必须挂载**:包含数据库和用户上传文件,确保数据持久化
|
||||
- `/app/logs` 可选挂载:便于查看日志
|
||||
|
||||
### 6.4 图标系统实现
|
||||
|
||||
| 图标类型 | 存储位置 | 说明 |
|
||||
|---------|---------|------|
|
||||
| **内置图标** | `/resources/static/icons/` | 打包在 JAR 中,500+ 常用图标 |
|
||||
| **URL 图标** | 外部 URL | 用户填写的图片 URL |
|
||||
| **上传图标** | `/data/uploads/icons/` | 用户上传的自定义图标 |
|
||||
| **默认图标** | `/resources/static/icons/default.svg` | URL 不可访问时的降级显示 |
|
||||
|
||||
**URL 图标处理逻辑**:
|
||||
1. 前端尝试加载用户填写的 URL 图标
|
||||
2. 如果加载失败(超时/404/跨域),自动降级显示默认图标
|
||||
3. 默认图标为一个灰色的「问号」或「链接断裂」样式
|
||||
|
||||
### 6.5 扩展性与插件机制
|
||||
|
||||
**Widget 插件架构(v1.0+)**:
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────┐
|
||||
│ Home4j Core │
|
||||
├─────────────────────────────────────────┤
|
||||
│ Widget API (SPI) │
|
||||
├──────────┬──────────┬──────────┬────────┤
|
||||
│ 时钟组件 │ 搜索组件 │ 待办组件 │ 自定义 │
|
||||
└──────────┴──────────┴──────────┴────────┘
|
||||
```
|
||||
|
||||
- 基于 Quarkus 扩展机制或 Java SPI 加载插件
|
||||
- 插件独立 JAR 包,放入 `/plugins` 目录自动加载
|
||||
- v1.0 提供简单的内置 Widget,复杂插件延后到 v1.x
|
||||
|
||||
### 6.6 性能与安全底线要求
|
||||
|
||||
| 指标 | 目标值 |
|
||||
|-----|-------|
|
||||
| 冷启动时间 | < 3 秒(JVM 模式) |
|
||||
| 内存占用 | < 128 MB(默认配置) |
|
||||
| 首页加载时间 | < 500 ms |
|
||||
| 并发支持 | > 100 QPS(单实例) |
|
||||
| Docker 镜像大小 | < 200 MB |
|
||||
|
||||
---
|
||||
|
||||
## 7. 非功能性需求
|
||||
|
||||
### 7.1 性能目标
|
||||
|
||||
| 场景 | 指标 | 目标 |
|
||||
|-----|-----|------|
|
||||
| 首页渲染 | TTFB | < 100ms |
|
||||
| 书签搜索 | 响应时间 | < 50ms(1000条书签内) |
|
||||
| 配置保存 | 响应时间 | < 200ms |
|
||||
| 主题切换 | 生效时间 | < 100ms,无闪烁 |
|
||||
|
||||
### 7.2 安全性与隐私保护
|
||||
|
||||
| 安全措施 | 说明 |
|
||||
|---------|------|
|
||||
| **数据本地化** | 所有数据存储在用户自己的服务器,不上传云端 |
|
||||
| **HTTPS 支持** | 支持反向代理 SSL 终结 |
|
||||
| **XSS 防护** | 输入输出转义,CSP 策略 |
|
||||
| **CSRF 防护** | Token 验证机制 |
|
||||
| **认证机制(v1.0)** | 支持基础认证,可选 OAuth2 |
|
||||
|
||||
### 7.3 可观测性
|
||||
|
||||
| 维度 | 实现方案 |
|
||||
|-----|---------|
|
||||
| **日志** | SLF4J + Logback,支持日志级别动态调整 |
|
||||
| **健康检查** | `/actuator/health` 端点 |
|
||||
| **指标暴露** | Prometheus 格式 `/metrics`(可选) |
|
||||
|
||||
### 7.4 国际化与可访问性
|
||||
|
||||
- **语言支持**:中文(默认)、英文
|
||||
- **i18n 机制**:基于 `messages.properties` 资源文件
|
||||
- **可访问性**:
|
||||
- 语义化 HTML 结构
|
||||
- 键盘完整可操作
|
||||
- 支持屏幕阅读器
|
||||
- 颜色对比度符合 WCAG 2.1 AA
|
||||
|
||||
---
|
||||
|
||||
## 8. 风险、挑战与应对
|
||||
|
||||
| 风险 | 等级 | 描述 | 缓解措施 |
|
||||
|-----|------|------|---------|
|
||||
| **市场认知度低** | 高 | Java Dashboard 类工具用户认知少 | 1. 发布技术博客分享<br>2. 提交到 awesome-selfhosted 列表<br>3. 录制视频教程 |
|
||||
| **与成熟竞品竞争** | 高 | Flame/Homer 已有稳定用户群 | 1. 差异化定位 Java 用户<br>2. 功能上做精不做多<br>3. 强调离线部署优势 |
|
||||
| **Quarkus 学习曲线** | 中 | 团队对 Quarkus 熟悉度 | 1. 使用 JVM 模式降低复杂度<br>2. 参考官方示例<br>3. 保持核心依赖简单 |
|
||||
| **单人维护精力有限** | 中 | 开源项目持续维护挑战 | 1. MVP 功能精简<br>2. 代码质量优先<br>3. 积极培养社区贡献者 |
|
||||
| **用户需求分散** | 中 | 不同用户对功能期望差异大 | 1. 坚持「导航工具」核心定位<br>2. 通过插件满足扩展需求<br>3. 建立 RFC 机制收集反馈 |
|
||||
|
||||
---
|
||||
|
||||
## 9. 附录
|
||||
|
||||
### 9.1 名词表 / 术语定义
|
||||
|
||||
| 术语 | 定义 |
|
||||
|-----|------|
|
||||
| **书签(Bookmark)** | 用户添加的链接条目,包含名称、URL、图标等属性 |
|
||||
| **分组(Group)** | 书签的逻辑分类容器 |
|
||||
| **Widget** | 可嵌入仪表盘的小组件,如时钟、天气等 |
|
||||
| **主题(Theme)** | 预定义的视觉风格配置,包含颜色、字体等 |
|
||||
| **YAML 配置** | 使用 YAML 格式定义应用配置的文件 |
|
||||
|
||||
### 9.2 参考资料与灵感来源
|
||||
|
||||
| 项目 | 地址 | 主要参考点 |
|
||||
|-----|------|-----------|
|
||||
| Flame | https://github.com/pawelmalak/flame | 极简设计、书签管理 |
|
||||
| Homer | https://github.com/bastienwirtz/homer | YAML 配置、图标系统 |
|
||||
| Glance | https://github.com/glanceapp/glance | Widget 架构 |
|
||||
| Homepage | https://github.com/gethomepage/homepage | 服务状态集成 |
|
||||
| Dashy | https://github.com/Lissy93/dashy | 主题系统、高级功能 |
|
||||
| Heimdall | https://github.com/linuxserver/Heimdall | 应用启动器概念 |
|
||||
|
||||
### 9.3 其他补充说明
|
||||
|
||||
#### 项目目录结构(建议)
|
||||
|
||||
```
|
||||
home4j/
|
||||
├── src/
|
||||
│ ├── main/
|
||||
│ │ ├── java/com/home4j/
|
||||
│ │ │ ├── resource/ # REST 资源(Controller)
|
||||
│ │ │ ├── service/ # 业务逻辑
|
||||
│ │ │ ├── repository/ # 数据访问(Panache)
|
||||
│ │ │ ├── entity/ # 数据实体
|
||||
│ │ │ ├── dto/ # 数据传输对象
|
||||
│ │ │ ├── config/ # 配置类
|
||||
│ │ │ └── plugin/ # 插件机制
|
||||
│ │ ├── resources/
|
||||
│ │ │ ├── templates/ # Qute 模板
|
||||
│ │ │ ├── META-INF/
|
||||
│ │ │ │ └── resources/ # 静态资源
|
||||
│ │ │ │ ├── css/ # DaisyUI/Tailwind 本地文件
|
||||
│ │ │ │ ├── js/ # JavaScript 文件
|
||||
│ │ │ │ └── icons/ # 内置图标库
|
||||
│ │ │ └── application.properties
|
||||
├── docker/
|
||||
│ └── Dockerfile
|
||||
├── docs/ # 文档
|
||||
└── README.md
|
||||
```
|
||||
|
||||
#### 开源协议建议
|
||||
|
||||
推荐使用 **MIT License**,便于企业用户采用和二次开发。
|
||||
|
||||
---
|
||||
|
||||
> **文档结束**
|
||||
> 本文档将随项目进展持续更新,欢迎提出反馈和建议。
|
||||
Reference in New Issue
Block a user