Files
lab/ts/web/astro/polaris/Polaris 个人导航站项目说明文档.md
T
labmem 0913235382 docs(ts): 新增 Polaris 个人导航站说明文档与设计图
- 新增 Polaris 个人导航站项目说明文档,涵盖项目定位、视觉风格、
  首页布局、搜索方案、技术选型、数据结构与分阶段开发规划
- 新增 Polaris 首页页面设计图
2026-08-20 23:23:53 +08:00

1320 lines
23 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.
# Polaris 个人导航站项目说明文档
## 1. 项目名称
**Polaris**
Polaris 原意为“北极星”,具有方向、导航、定位、指引的含义。该名称与个人导航站的产品定位非常契合。
本项目的核心目标是打造一个轻量、安静、高效、可长期维护的个人导航站,用于集中管理和访问常用网站、分类资源与个人入口。
---
## 2. 项目定位
Polaris 不是后台管理系统,也不是信息密集型 Dashboard。
它的定位是:
> 一个具有个人审美、可自定义背景、可快速搜索和访问常用链接的浏览器起始页。
页面应给人的感觉是:
```text
私人入口
浏览器首页
轻量工具启动页
个人网址导航
安静、高效、有氛围感
```
而不是:
```text
后台系统
资源管理平台
复杂书签管理器
信息看板
数据仪表盘
```
---
## 3. 项目目标
Polaris 第一阶段目标:
1. 提供一个美观的个人导航首页;
2. 支持快速访问常用链接;
3. 支持左侧分类导航;
4. 支持搜索框;
5. 支持当前时间与日期展示;
6. 支持左侧边栏折叠;
7. 支持背景图更换的设计预留;
8. 数据第一版写死在本地 JSON 或 TS 配置中;
9. 代码结构预留未来接入 Go 后端接口的能力。
后续阶段目标:
1. 从 Go 后端 API 获取链接、分类、设置等数据;
2. 使用数据库持久化配置;
3. 支持后台或隐藏入口管理链接;
4. 支持用户自定义背景;
5. 支持主题色、深色模式、导入导出等个性化能力。
---
## 4. 当前方案是否为静态页面
当前方案不是传统意义上的纯静态页面。
更准确地说:
> 第一版可以静态部署,但产品形态是动态可配置的个人导航站。
第一版数据可以写死在本地配置文件中,例如:
```text
links.json
categories.json
settings.json
```
但页面本身具有动态交互:
```text
当前时间实时更新
搜索框交互
搜索引擎切换
本地链接搜索
侧边栏折叠
导航选中状态
背景样式预留
快捷键操作
```
后续可以将本地 JSON 数据源替换为 Go 后端 API,不需要推翻前端整体结构。
---
## 5. 整体视觉风格
Polaris 推荐采用:
> 轻量玻璃感 + 极简浏览器起始页 + 柔和个人空间感
设计关键词:
```text
极简
半透明
玻璃感
柔和阴影
大留白
低饱和
可换背景
个人化
安静
高级感
```
整体视觉应避免过重的管理系统风格。
首页不应常驻展示以下元素:
```text
设置按钮
编辑按钮
管理按钮
新增按钮
统计数据
用户头像
访问次数
站点域名副标题
复杂分类卡片
```
这些能力可以在后续阶段通过隐藏入口、独立配置页或快捷键面板实现。
---
## 6. 首页整体布局
首页采用左右结构:
```text
┌──────────────────┬────────────────────────────────────────────┐
│ 左侧边栏 │ 主内容区域 │
│ │ │
│ Logo + 折叠按钮 │ 问候语 + 当前时间 │
│ 首页 │ 日期 / 星期 │
│ AI 工具 │ 搜索框 │
│ 开发工具 │ 常用链接 │
│ 设计资源 │ │
│ 学习资料 │ │
│ 效率工具 │ │
│ 娱乐媒体 │ │
│ 生活服务 │ │
└──────────────────┴────────────────────────────────────────────┘
```
布局原则:
1. 左侧边栏负责分类导航;
2. 主内容区域只展示最高频内容;
3. 首页不展示分类卡片;
4. 首页不展示编辑、设置、管理类按钮;
5. 常用链接只做轻量展示。
---
## 7. 左侧边栏设计
### 7.1 边栏内容
左侧边栏从上到下依次展示:
```text
Logo
折叠按钮
首页
AI 工具
开发工具
设计资源
学习资料
效率工具
娱乐媒体
生活服务
```
暂时不展示:
```text
设置
关于
编辑
管理
新增分类
账户信息
```
---
### 7.2 折叠按钮位置
折叠按钮放在侧边栏顶部右侧,与 Logo 位于同一行。
示意:
```text
┌──────────────────────┐
│ Logo ≪ │
└──────────────────────┘
```
不采用侧边栏中间悬浮按钮。
原因:
1. 中间悬浮按钮视觉上突兀;
2. 容易产生后台管理系统的感觉;
3. 会破坏页面边界的干净感;
4. 顶部右侧更符合用户对全局控制按钮的认知。
---
### 7.3 边栏宽度
展开状态:
```text
推荐宽度:240px
可选范围:220px - 260px
```
折叠状态:
```text
推荐宽度:72px
可选范围:68px - 80px
```
展开时显示图标和文字。
折叠时只显示图标。
---
### 7.4 边栏视觉样式
推荐样式:
```css
background: rgba(255, 255, 255, 0.68);
backdrop-filter: blur(24px);
border: 1px solid rgba(255, 255, 255, 0.45);
box-shadow: 0 24px 80px rgba(15, 23, 42, 0.10);
border-radius: 24px;
```
边栏与页面边缘保持一定距离,形成悬浮玻璃面板感。
推荐边距:
```text
left: 20px;
top: 20px;
bottom: 20px;
```
---
## 8. 主内容区域设计
主内容区域展示:
```text
问候语
当前时间
当前日期
搜索框
常用链接
```
不展示:
```text
分类卡片
设置入口
编辑入口
管理入口
统计信息
复杂小组件
```
主内容整体居中,视觉重心位于页面中上方。
推荐信息层级:
```text
1. 当前时间 / 问候语
2. 搜索框
3. 常用链接
4. 左侧分类导航
5. 背景氛围
```
---
## 9. 时间与问候语
首页顶部展示问候语和当前时间。
示例:
```text
晚上好,21:56
2026 年 8 月 20 日 星期四
```
问候语规则:
```text
05:00 - 11:59 早上好
12:00 - 13:59 中午好
14:00 - 17:59 下午好
18:00 - 23:59 晚上好
00:00 - 04:59 夜深了
```
推荐样式:
```css
font-size: 56px;
font-weight: 700;
color: #0F172A;
```
日期样式:
```css
font-size: 16px;
color: #64748B;
```
---
## 10. 搜索框设计
### 10.1 搜索框定位
搜索框是 Polaris 首页最核心的交互组件。
搜索框位于时间与日期下方,居中展示。
---
### 10.2 搜索范围
Polaris 第一版搜索框仅支持以下四种搜索方式:
```text
Google 搜索
Bing 搜索
GitHub 搜索
本地搜索
```
其中:
1. **Google 搜索**:使用 Google 搜索引擎搜索输入内容;
2. **Bing 搜索**:使用 Bing 搜索引擎搜索输入内容;
3. **GitHub 搜索**:在 GitHub 中搜索输入内容;
4. **本地搜索**:搜索 Polaris 本地配置中的链接、分类和名称。
第一版不支持:
```text
直接输入 URL 跳转
自定义搜索引擎
多搜索引擎聚合结果
AI 搜索
站外爬取搜索
全文索引搜索
```
这些能力可以作为后续扩展。
---
### 10.3 搜索框尺寸
桌面端推荐:
```text
width: 760px;
height: 68px;
```
可选范围:
```text
宽度:720px - 860px
高度:64px - 72px
```
移动端:
```text
width: calc(100vw - 32px);
height: 60px;
```
---
### 10.4 搜索框视觉样式
推荐样式:
```css
background: rgba(255, 255, 255, 0.72);
backdrop-filter: blur(22px);
border: 1px solid rgba(255, 255, 255, 0.65);
border-radius: 24px;
box-shadow: 0 20px 60px rgba(15, 23, 42, 0.12);
```
placeholder 示例:
```text
搜索网站、书签或关键词...
```
右侧可以展示快捷键提示:
```text
⌘K
```
Windows / Linux 环境下可展示:
```text
Ctrl K
```
---
### 10.5 搜索模式切换
搜索模式可以通过以下方式切换:
```text
搜索框左侧下拉选择
快捷键切换
命令面板中选择
默认使用上一次选择的搜索方式
```
推荐第一版采用简单方案:
```text
搜索框左侧或右侧提供当前搜索模式标识
点击后可切换 Google / Bing / GitHub / 本地
```
也可以先默认使用 Google,后续再增加模式切换。
---
### 10.6 本地搜索范围
本地搜索的数据来自本地配置文件。
搜索范围包括:
```text
链接标题
链接关键词
链接描述
分类名称
分类 ID
```
建议链接数据中预留 keywords 字段。
示例:
```json
{
"id": "github",
"title": "GitHub",
"url": "https://github.com",
"categoryId": "dev",
"icon": "github",
"pinned": true,
"keywords": ["代码", "仓库", "开源", "git"],
"sort": 10
}
```
---
## 11. 常用链接区域
### 11.1 区域定位
常用链接用于展示用户最高频访问的网站。
首页不展示分类卡片,以保持页面干净。
推荐第一版展示 8 个常用链接:
```text
GitHub
ChatGPT
Gmail
Notion
Figma
YouTube
Vercel
Bilibili
```
实际项目中可以根据个人习惯调整。
---
### 11.2 链接卡片内容
常用链接卡片只展示:
```text
图标
名称
```
不展示:
```text
域名
描述
编辑按钮
更多按钮
拖拽按钮
访问统计
```
---
### 11.3 链接卡片样式
推荐样式:
```css
background: rgba(255, 255, 255, 0.62);
backdrop-filter: blur(20px);
border: 1px solid rgba(255, 255, 255, 0.56);
border-radius: 20px;
box-shadow: 0 14px 40px rgba(15, 23, 42, 0.10);
```
推荐尺寸:
```text
width: 200px;
height: 76px;
```
推荐布局:
```text
两行四列
```
示意:
```text
┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐
│ GitHub │ │ChatGPT │ │ Gmail │ │ Notion │
└────────┘ └────────┘ └────────┘ └────────┘
┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐
│ Figma │ │YouTube │ │ Vercel │ │Bilibili│
└────────┘ └────────┘ └────────┘ └────────┘
```
Hover 效果:
```css
transform: translateY(-2px);
background: rgba(255, 255, 255, 0.78);
box-shadow: 0 18px 50px rgba(15, 23, 42, 0.14);
transition: all 180ms ease;
```
---
## 12. 背景设计
### 12.1 背景类型
Polaris 支持背景自定义的设计预留。
第一版可以先使用默认背景图。
后续支持:
```text
静态图片背景
渐变背景
纯色背景
本地上传背景
远程图片背景
深色背景
```
默认背景建议:
```text
湖面
雪山
晨雾
天空
抽象渐变
低对比度风景图
```
---
### 12.2 背景遮罩
由于用户未来可能更换任意背景,因此需要增加背景遮罩层,保证内容可读。
浅色主题:
```css
background-overlay: rgba(255, 255, 255, 0.32);
backdrop-filter: blur(8px);
```
深色主题:
```css
background-overlay: rgba(15, 23, 42, 0.42);
backdrop-filter: blur(8px);
```
---
## 13. 配色系统
默认采用浅色玻璃主题。
推荐 CSS 变量:
```css
:root {
--color-text-primary: #0F172A;
--color-text-secondary: #64748B;
--color-text-muted: #94A3B8;
--color-primary: #3B82F6;
--color-primary-hover: #2563EB;
--color-primary-soft: rgba(59, 130, 246, 0.10);
--color-surface-sidebar: rgba(255, 255, 255, 0.68);
--color-surface-card: rgba(255, 255, 255, 0.62);
--color-surface-search: rgba(255, 255, 255, 0.72);
--color-border-light: rgba(255, 255, 255, 0.56);
--color-border-subtle: rgba(15, 23, 42, 0.08);
--shadow-soft: 0 14px 40px rgba(15, 23, 42, 0.10);
--shadow-medium: 0 20px 60px rgba(15, 23, 42, 0.12);
}
```
后续可支持深色玻璃主题。
---
## 14. 字体建议
推荐字体栈:
```css
font-family:
Inter,
"SF Pro Display",
"SF Pro Text",
-apple-system,
BlinkMacSystemFont,
"Segoe UI",
"PingFang SC",
"Hiragino Sans GB",
"Microsoft YaHei",
sans-serif;
```
字体原则:
```text
标题清晰
正文轻盈
导航可读
不要使用过度装饰性字体
```
---
## 15. 技术选型
### 15.1 前端技术栈
推荐前端技术栈:
```text
Next.js
TypeScript
Tailwind CSS
shadcn/ui
lucide-react
```
说明:
1. **Next.js**:适合从静态页面起步,后续接入动态接口;
2. **TypeScript**:适合维护链接、分类、配置等结构化数据;
3. **Tailwind CSS**:适合快速实现玻璃感、响应式、主题变量;
4. **shadcn/ui**:用于基础组件,例如 Button、Input、Dialog、Command;
5. **lucide-react**:用于侧边栏和操作图标。
---
### 15.2 后端技术栈
后端由 Go 实现。
推荐后端技术栈:
```text
Go
Gin / Chi
PostgreSQL / MySQL / SQLite
sqlc / GORM
Docker
```
建议选择:
```text
Go + Chi + PostgreSQL + sqlc
```
或者:
```text
Go + Gin + PostgreSQL + GORM
```
如果希望结构更清晰、SQL 可控,推荐:
```text
Chi + sqlc
```
如果希望开发更快、上手成本更低,推荐:
```text
Gin + GORM
```
---
### 15.3 第一版数据方案
第一版不接后端。
数据写在前端本地配置中。
推荐目录:
```text
src/
data/
links.json
categories.json
settings.json
services/
links.ts
categories.ts
settings.ts
types/
navigation.ts
components/
Sidebar.tsx
SearchBox.tsx
QuickLinks.tsx
```
注意:页面组件不要直接依赖 JSON 文件。
应该通过 service 层获取数据。
第一版:
```ts
import links from "@/data/links.json"
export async function getLinks() {
return links
}
```
后续接 Go 后端时,只需要修改 service 层:
```ts
export async function getLinks() {
const res = await fetch("/api/links")
if (!res.ok) {
throw new Error("Failed to fetch links")
}
return res.json()
}
```
这样页面组件不用大规模重构。
---
## 16. 推荐数据结构
### 16.1 分类数据
```json
{
"id": "dev",
"title": "开发工具",
"icon": "code",
"sort": 20
}
```
字段说明:
```text
id: 分类唯一标识
title: 分类名称
icon: 图标名称
sort: 排序值
```
---
### 16.2 链接数据
```json
{
"id": "github",
"title": "GitHub",
"url": "https://github.com",
"icon": "github",
"categoryId": "dev",
"pinned": true,
"keywords": ["代码", "仓库", "开源", "git"],
"sort": 10
}
```
字段说明:
```text
id: 链接唯一标识
title: 链接名称
url: 链接地址
icon: 图标名称或图标 URL
categoryId: 所属分类
pinned: 是否展示在首页常用链接区域
keywords: 本地搜索关键词
sort: 排序值
```
---
### 16.3 设置数据
```json
{
"siteName": "Polaris",
"theme": "light-glass",
"search": {
"defaultProvider": "google",
"enabledProviders": ["google", "bing", "github", "local"]
},
"background": {
"type": "image",
"url": "/backgrounds/default.jpg",
"blur": 8,
"overlay": 0.32
},
"sidebar": {
"defaultCollapsed": false
}
}
```
字段说明:
```text
siteName: 站点名称
theme: 主题名称
search.defaultProvider: 默认搜索方式
search.enabledProviders: 启用的搜索方式
background: 背景配置
sidebar.defaultCollapsed: 侧边栏默认是否折叠
```
---
## 17. 搜索功能设计
### 17.1 搜索 Provider
第一版支持四个 provider:
```ts
export type SearchProvider = "google" | "bing" | "github" | "local"
```
---
### 17.2 搜索行为
Google:
```text
https://www.google.com/search?q={keyword}
```
Bing:
```text
https://www.bing.com/search?q={keyword}
```
GitHub:
```text
https://github.com/search?q={keyword}
```
Local:
```text
在本地 links / categories 数据中搜索
```
---
### 17.3 本地搜索匹配规则
本地搜索匹配字段:
```text
title
keywords
categoryId
category title
```
推荐匹配逻辑:
```text
完全匹配优先
标题匹配其次
关键词匹配再次
分类匹配最后
```
搜索结果可以展示:
```text
图标
标题
所属分类
```
回车行为:
```text
如果只有一个高匹配本地结果,回车打开该链接
如果有多个结果,展示搜索结果列表
如果没有结果,展示空状态
```
---
## 18. 未来 Go 后端 API 设计
后续接入 Go 后端时,推荐 API:
```text
GET /api/categories
GET /api/links
GET /api/links?categoryId=dev
GET /api/settings
```
后续管理能力:
```text
POST /api/links
PUT /api/links/:id
DELETE /api/links/:id
POST /api/categories
PUT /api/categories/:id
DELETE /api/categories/:id
PUT /api/settings
```
背景相关:
```text
POST /api/backgrounds
GET /api/backgrounds
PUT /api/settings/background
```
---
## 19. 数据库表设计草案
### 19.1 categories
```sql
CREATE TABLE categories (
id TEXT PRIMARY KEY,
title TEXT NOT NULL,
icon TEXT NOT NULL,
sort INTEGER NOT NULL DEFAULT 0,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
```
---
### 19.2 links
```sql
CREATE TABLE links (
id TEXT PRIMARY KEY,
title TEXT NOT NULL,
url TEXT NOT NULL,
icon TEXT,
category_id TEXT NOT NULL,
pinned BOOLEAN NOT NULL DEFAULT FALSE,
keywords JSONB,
sort INTEGER NOT NULL DEFAULT 0,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_links_category
FOREIGN KEY (category_id)
REFERENCES categories(id)
);
```
---
### 19.3 settings
```sql
CREATE TABLE settings (
key TEXT PRIMARY KEY,
value JSONB NOT NULL,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
```
---
## 20. 推荐开发阶段
### 第一阶段:前端静态版
目标:完成 Polaris 首页基础体验。
包含:
```text
页面背景
背景遮罩
左侧边栏
边栏折叠
导航选中态
时间与日期
搜索框
Google / Bing / GitHub / 本地搜索
常用链接
响应式基础适配
```
数据来源:
```text
本地 JSON / TS 配置
```
---
### 第二阶段:分类页面
目标:完成导航站基本内容结构。
包含:
```text
AI 工具页面
开发工具页面
设计资源页面
学习资料页面
效率工具页面
娱乐媒体页面
生活服务页面
分类下链接展示
分类内搜索
```
数据来源仍可使用本地配置。
---
### 第三阶段:数据访问层抽象
目标:为接入 Go 后端做准备。
包含:
```text
封装 links service
封装 categories service
封装 settings service
统一 TypeScript 类型
统一错误处理
统一 loading 状态
```
此阶段完成后,页面组件不直接关心数据来自 JSON 还是 API。
---
### 第四阶段:Go 后端 API
目标:前端从后端读取数据。
包含:
```text
Go API 服务
数据库连接
links 查询接口
categories 查询接口
settings 查询接口
基础 CORS 配置
Docker 部署预留
```
---
### 第五阶段:管理能力
目标:允许用户维护自己的导航数据。
包含:
```text
新增链接
编辑链接
删除链接
调整排序
修改分类
修改背景
修改主题
导入导出配置
```
管理能力不进入首页主视觉,可以放到独立管理页或隐藏入口中。
---
## 21. 推荐项目目录结构
### 21.1 前端目录结构
```text
polaris-web/
src/
app/
page.tsx
layout.tsx
globals.css
components/
layout/
Sidebar.tsx
MainLayout.tsx
home/
ClockGreeting.tsx
SearchBox.tsx
QuickLinks.tsx
common/
GlassCard.tsx
Icon.tsx
data/
links.json
categories.json
settings.json
services/
links.ts
categories.ts
settings.ts
search.ts
types/
navigation.ts
settings.ts
search.ts
lib/
cn.ts
date.ts
search-providers.ts
styles/
theme.css
```
---
### 21.2 后端目录结构
```text
polaris-api/
cmd/
server/
main.go
internal/
config/
database/
handler/
middleware/
model/
repository/
service/
migrations/
sql/
Dockerfile
docker-compose.yml
```
---
## 22. 首页线框
```text
┌──────────────────────┬────────────────────────────────────────────────────┐
│ │ │
│ LOGO ≪ │ │
│ │ │
│ ⌂ 首页 │ │
│ ✦ AI 工具 │ 晚上好,21:56 │
│ <> 开发工具 │ 2026 年 8 月 20 日 星期四 │
│ ◌ 设计资源 │ │
│ 📖 学习资料 │ ┌────────────────────────────────────┐ │
│ ⚡ 效率工具 │ │ 🔍 搜索网站、书签或关键词... ⌘K │ │
│ ▶ 娱乐媒体 │ └────────────────────────────────────┘ │
│ ☕ 生活服务 │ │
│ │ 常用链接 │
│ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │ │ GitHub │ │ChatGPT │ │ Gmail │ │ Notion │ │
│ │ └────────┘ └────────┘ └────────┘ └────────┘ │
│ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │ │ Figma │ │YouTube │ │ Vercel │ │Bilibili│ │
│ │ └────────┘ └────────┘ └────────┘ └────────┘ │
│ │ │
└──────────────────────┴────────────────────────────────────────────────────┘
```
---
## 23. 设计原则总结
Polaris 首页应遵循以下原则:
```text
首页只放最高频内容
搜索框是核心入口
搜索范围保持克制
常用链接轻量展示
分类入口放在左侧边栏
首页不展示分类卡片
首页不展示编辑和设置按钮
背景可换,但内容必须始终清晰
玻璃感要轻,不要炫技
交互动效要柔和,不要夸张
整体像浏览器起始页,不像后台系统
第一版数据本地配置,后续平滑切换到 Go 后端
```
最终目标:
> 打开 Polaris 后,用户可以立刻搜索、立刻访问常用网站,也可以通过侧边栏进入分类页面。页面具有个人氛围,但保持干净、高效、克制。