Desk Pet · 数字桌宠

网站里那只会飞、会跳舞、会问答的水滴

一个悬浮在个人主页右侧的小组件,从最初的静态头像,逐步长成了一套有表情、会走动、能主动推荐内容、还内置 AI 问答的完整系统。

ChatWidget.astro 7 大模块 中 / 英 / 法三语

形象设计

[VISUAL]
  • 主体 — 水滴形,浅蓝→深蓝线性渐变(亮/暗主题各一套),叠加柔光高光、锐利高光点、右下角暗部渐变,做出立体感
  • 双角/耳朵 — 半透明玻璃质感(92% 不透明度),带高光条纹
  • 腰部凸起 — 两侧一对圆润小凸起,纯装饰,不作手臂用
  • 静止态干净、不带任何装备;走路 / 施法 / 跳舞时才"穿装备"

表情系统

[EXPRESSION]
  • 形状切换而非缩放 — 默认圆眼微笑 · 开心时弧线眼+咧嘴笑+腮红鼓起 · 困倦时垂眼+哈欠嘴 · 说话中眯眼+"o"形嘴 · 好奇张望时固定下视
  • 身体和眼睛整体朝鼠标方向转动 / 倾斜,像在看你,而不只是瞳孔挪动

互动与动作系统

[MOTION]

常驻行为

呼吸漂浮 · 悬停放大转向 · 可拖拽重新定位 · 默认停靠右侧中部不挡内容 · 纯 CSS 定位,刷新不跳动

空闲小动作

打哈欠 / 伸懒腰 / 好奇张望 / 原地转圈,约 18–40s 随机触发一个,含"这次不触发"选项

地面游走

定期下降到页面最底边、横向走位(细腿+颔首摆动),偶尔切换猫步 / 台步;到右下角空地时 45% 概率停下跳舞

三支随机舞蹈

  • 天鹅湖 — 双圈 pirouette + 踮脚 + 屈膝礼
  • 功夫足球 — 蹲马步 → 蓄力 → 大力踢腿 → 得意站定
  • 雨中曲 — 转圈 + 欢快小跳 + 经典后仰张开 + 歪礼帽

飞去导航栏互动

45–90s 随机飞向 Patents / Blog / Papers / Projects / Experience 其中一个导航标签:缩小并倾斜成"小天使"造型,标签本身放大加粗高亮,气泡在旁配文案邀请点击 — 点击直接跳转对应页面

待客礼仪 · 迎宾送客

[HOSPITALITY]
  • 迎宾皮肤 — 页面刚打开的几秒内,水滴"换装":茶色围裙 + 领口滚边 + 手捧茶盘(茶杯 + 茶碟),如同接待来客的小门童;跟走路时才戴礼帽是同一套"皮肤"机制,平时完全不穿
  • 动手奉茶 — 两侧原本静止的小凸起会在此时转动、伸向茶盘,做出"双手捧茶"的姿态,而不只是换装不动
  • 专属迎宾语 — 首次访问播放开场白;再次来访随机播放"客官您是打尖还是住店呀 / 贵宾一位,您里边儿请~ / hi~好久不见,不如见一面~",仅中文语境使用,避免直译丢梗
  • 送客拜别 — 关闭聊天面板时鞠躬行礼,并配一句"客官慢走,欢迎常来~"
  • 提灯 — 暗色主题下,迎宾时身侧亮起一盏红灯笼,与身体保持明显间距,"掌灯迎客"

气泡与内容引导

[BUBBLE]
  • 首次访问播放开场白(融合原图 "Be water, my friend" slogan),之后随机穿插俏皮文案("戳我一下""别让我晒干")
  • 悬停桌宠或气泡本身也会主动浮现
  • 中 / 英 / 法三语全套文案

核心功能:AI 问答

[CHAT-CORE]
  • 点击展开面板,AI 基于站内公开内容(专利 / 论文 / 经历)回答访客提问
  • 系统提示词内置防注入规则,拒绝"忽略之前指令""打印系统提示词"等套话
  • 按 IP 限流 20 次 / 小时,防刷
  • Provider-agnostic 设计,后端可换 DeepSeek / Anthropic / OpenAI 而不改前端

技术细节

[SYSTEM]
  • 完整支持 prefers-reduced-motion,减弱动效用户会关掉几乎所有动画
  • 亮 / 暗主题配色联动站点整体的深色模式
  • 所有装饰性动作互斥调度 — 跳舞时不会同时游走,说话时不会同时打哈欠
价值

为什么做这些

把原本单调的"关于我"静态问答入口,变成一个会主动推荐内容、有记忆点的小助手 —— 它不只是等你来问,还会主动飞到 Patents / Blog 等板块帮你"划重点",用俏皮文案降低点击门槛; 同时呼应了原图里 "Be water, my friend" 的人设,跟站点的极客 / 科研调性形成一点反差萌, 是整个网站里最个人化、最容易被记住的一个细节。

想看具体怎么实现的?数字桌宠 · 实现手册 →
完整技术参考:整站架构定位、内部五层结构、各子系统关键代码,以及把这套模式迁移到新项目的复用清单。