更新记录 | Oolaf当前浏览器过旧,页面样式无法完整呈现。请使用 Chrome、Edge、Firefox 或 Safari 访问。
-
-
后台
- 「显示更新记录入口」排到「入口与功能」里「显示文章入口」正下方,分区内按白名单顺序展示。
-
后台
- 后台「设置 → 客户端设置 → 入口与功能」补上「显示更新记录入口」开关(`client.updates.enabled`),不再只落在未列出的「其他」分区。
-
后台
- `telegram:webhook` 对 Telegram API 连接/登记失败改为只打错误日志、正常退出;Mac 发布流水线同样忽略该步失败,避免健康检查已通过后因 TLS 握手失败导致 CI 变红。
-
站点
- `/updates` 只按年月日折叠:每个日期默认露出 3 个时刻,时刻块全量展示;展开/收起改成描边胶囊按钮。
-
站点
- `/updates` 收起改到展开内容末尾(下一日期之前),不再和「展开」共用顶部位置。
-
站点
- `/updates` 展开/收起始终放在当前区域文本下方;收起改为「收起其余 N 条」并提高对比,避免和下一时刻挤在同一行。
-
站点
- `/updates` 样式挂到 `html.site-skin` 下,避免日期 `h2`、时刻 `p` 的 margin 被站点全局标题重置盖掉。
-
站点
- `/updates` 加大日期到时刻块、以及相邻时刻块之间的空隙;收紧同一时刻内条目行距。
-
站点
- `/updates` 收紧日期标题与时刻行、时刻行与首条内容的间距,避免标题和副标题脱开。
-
站点
- `/updates` 每个自然日默认只露出 3 个时刻,其余折叠;单个时刻超过 3 条仍可再展开。
- 删除未接入 yarn 的字体子集工具:`subset-site-fonts.mjs`、`build-font-charset.py`、`scripts/font-src`。
-
后台
- `AGENTS.md` 增加硬性约束:`LOGS.md` / `logs/` 禁止写入密钥、口令、Token、私钥、`.env` 取值等敏感信息;环境变量只记名字不记值。
-
站点
- `AGENTS.md` 增加硬性约束:`LOGS.md` / `logs/` 禁止写入密钥、口令、Token、私钥、`.env` 取值等敏感信息;环境变量只记名字不记值。
-
后台
- 新增 `GET /web/updates`:部署时从本仓库与 stereo 分支 `LOGS.md` / `logs` 生成 `apps/server/static/site-updates.json`(gitignore,不入库),按日分页下发;`updatesEnabled` 关闭则 403。
- mono deploy 二次 checkout `stereo` 后 `yarn generate:updates`,产物打进发布包。
-
站点
- `/updates` 改为请求 mono `GET /web/updates`,去掉本仓库静态 JSON 与 `generate:updates`。
- 页改成按日时间轴,去掉导语;每个时刻最多露出 3 条,其余展开/收起。
-
后台
- 后台「设置 → 客户端设置」新增 `client.updates.enabled`(显示更新记录入口),默认开启;`/web/settings` 下发 `updatesEnabled`,关闭后 Stereo `/updates` 与入口隐藏。
- 升级 settings 缓存键到 `settings-v3`,避免旧缓存缺少新开关。
-
站点
- 新增公开 `/updates` 按日时间轴:聚合本仓库与 mono 的 `LOGS.md` / `logs` 归档,静态写入 `src/data/site-updates.json`,不进数据库;`yarn generate:updates` 可重生成。
- 顶栏、抽屉、页脚增加「更新记录」入口;`updatesEnabled` 关闭则入口隐藏且页面跳走。先展示 14 天,点击「加载更多」再拉后续日。
-
后台
- mono Mac mini 发布流水线执行 Telegram `setWebhook` 前显式导出本机代理 `CLASS_PROXY_URL=http://127.0.0.1:7890`,确保独立部署 Shell 不依赖 PM2 子进程环境也能访问 Telegram API。
-
站点
- `SiteLayout` 仅在博客首页与文章详情实际渲染 `SiteRobotFloat`;其他站点页面不再挂载机器人脚本,也不会无意义请求 `/web/robot/status`。
-
后台
- 后台客户端设置的 SSO 分区收拢为一个组合配置项:仅保留 SSO 总开关与 Telegram、Discord、GitHub 登录方式多选,不再为四个布尔配置分别展示卡片。
- 设置分组滚出可视区域后,顶部操作区继续显示「重置全部 / 保存全部」,并同步标明当前选中的设置 Tab 名称。
-
后台
- 后台「设置 → 客户端设置」新增「SSO 登录」分区:提供 `client.sso.enabled` 总开关,以及 Telegram、Discord、GitHub 三个 provider 独立开关;默认全部开启以保持现有行为,密钥与回调地址仍由 env 管理。
- `/web/settings` 将后台总开关、provider 开关与 env 完整性合并为最终可用状态,并升级 settings cache key 避免旧缓存把新增开关误判为关闭;关闭入口后对应 start/callback/complete、Telegram Widget 与 webhook 登录链路同步拒绝,不只隐藏前端图标。配置保存会沿用现有 web cache 清理立即生效。
- 将超过 500 行的 `config-definition.ts` 按核心、客户端、内容源、服务、安全、Formant 与元数据拆分为模块化定义文件,保持原配置顺序、默认值和导出不变;`ConfigGroupCard` 继续使用 Arco switch 并按职责展示新分区。
-
站点
- 客户端 settings 类型补齐 `ssoLoginEnabled`;Telegram、Discord、GitHub 最终入口状态由 mono 后台 SSO 总开关、provider 独立开关和 env 完整性共同决定;`/login` 改为每次 SSR 直取 settings、不复用 60 秒进程缓存,后台保存后刷新登录页即可立即显隐。
-
后台
- 新增 GitHub OAuth App 纯 SSO:`start`、`callback`、`complete` 使用 `read:user` 获取 GitHub id/login/name/avatar,服务端兑换 token 且不落库;首次登录以 `github` identity 自动注册 `g.` + 4~6 位随机字母账号,与 Telegram/Discord 账号保持独立。
- Discord 与 GitHub 共用新抽取的 `OAuthChallengeStore` 和 OAuth callback validator/HTML:Redis state、浏览器 verifier、approved/failed 状态及重放防护统一原子处理,Discord 既有行为保持不变;GitHub 补齐配置、失效、过期、上游失败错误码与派生类。
- `.env` 与 `.env.mac` 预埋 GitHub Client ID/Secret/Redirect URI,开发回调指向 localhost、生产指向 `www.oolaf.top`;三项完整才由 `/web/settings` 实时开启 `githubLoginEnabled`,无需数据库迁移或增量 SQL。
-
站点
- 登录页新增 GitHub OAuth App 纯图标入口,使用指定 GitHub 内联 SVG 并以 `currentColor` 适配昼夜主题;与 Telegram、Discord 保持 42px 圆形细边框横排,无常驻文字。
- Discord/GitHub 前端 start、complete、popup、轮询收敛为 provider 参数化流程,Telegram 深链与 Widget 备用保持独立;挂载逻辑从 `SiteSsoProviders.astro` 拆至 `site-sso-providers.ts`,避免后续 provider 扩展触碰 500 行上限。
- `/login`、CMS settings 与 auth 类型补齐 `githubLoginEnabled`,mono 三项 GitHub env 未完整配置时安全隐藏入口;授权成功继续复用现有 session 存储、`me()` 与 `next` 回跳。
-
站点
- Discord 登录入口由 Ionicons 改为指定的品牌蓝圆底白色 Discord 内联 SVG,并移除不再使用的 `logo-discord` 全局注册;按钮尺寸、细边框及与 Telegram 的横排布局不变。
-
后台
- 新增 Discord OAuth2 纯 SSO:`start` 创建 3 分钟 Redis state/verifier 挑战,`callback` 服务端兑换授权码并读取 `identify` 用户资料,`complete` 原子消费结果并签发本站会话;Discord token 不落库。
- `WebClientSsoService` 改为 provider 通用签发,Telegram 行为保持不变;Discord identity 复用 `client_identities`,首次注册生成 `d.` + 4~6 位随机字母账号,与 Telegram 身份按策略分别建立独立站内账号,无需新增表或 SQL。
- `.env` / `.env.mac` 预埋 `DISCORD_CLIENT_ID`、`DISCORD_CLIENT_SECRET`、`DISCORD_REDIRECT_URI`;三项完整才由 `/web/settings` 开启 Discord 入口,SSO env 字段在通用 settings 缓存外实时覆盖,避免部署后读取旧开关。新增 Discord 配置、失效、过期及上游失败错误码与派生类,并补 OAuth URL、资料归一化和回调地址校验测试。
-
站点
- 登录页新增 Discord OAuth2 圆形 `logo-discord` Ionicon,与 Telegram 保持同尺寸纯图标横排;仅 mono 三项 Discord env 完整时渲染,不增加常驻 provider 文字。
- 第三方登录从 `SiteLoginPanel` 拆为 `SiteSsoProviders`,统一管理 Telegram 深链、Widget 备用及 Discord OAuth 弹窗/轮询,成功后共用本站 session 存储与 `next` 回跳;状态、拒绝、超时及弹窗阻止提示仅在交互后出现。
- auth client、CMS settings 类型与默认值补齐 Discord start/complete 和 `discordLoginEnabled`;`SiteLayout` 注册 `logo-discord`,样式继续复用昼夜主题 token。
-
后台
- mono Mac mini 发布流水线在服务健康检查通过后自动幂等执行 Telegram `setWebhook`,固定恢复到 `https://www.oolaf.top`;首次上线及本地 ngrok 调试后的生产切回均无需人工运行命令。
-
站点
- 登录页第三方 provider 区保持纯圆形图标横排,Telegram「改用网页授权」不再常驻图标下方,仅在深链等待、过期或失败时提供临时备用操作,后续追加 Discord 等 provider 不会形成“图标 + 文字”纵向入口。
-
后台
- Telegram 登录新增 Bot 深链主流程:`POST /web/auth/telegram/deep-link/start` 生成浏览器 verifier 与独立 `/start` token,Redis 保存 3 分钟一次性挑战;Telegram webhook 确认后,浏览器轮询 `complete` 并复用既有 identity 自动注册与 session issuer。
- 新增 `POST /web/auth/telegram/deep-link/webhook`,通过由 bot token 派生的 `X-Telegram-Bot-Api-Secret-Token` 做 timing-safe 校验;start token 与 approved challenge 均用 Redis Lua 原子消费,避免重放、并发重复签发及 Bot 侧 token 直接兑换浏览器会话。
- 新增 `telegram:webhook -- <HTTPS origin>` 命令配置 Telegram `setWebhook`,支持项目出站代理;Telegram 深链解析、webhook secret 与 profile 归一化新增 5 个单测,原 Widget HMAC 登录保留为备用。
-
站点
- Telegram 品牌入口改为真实 42px 圆形 `<button>` + 内联指定 SVG,修复 Ionicons 自定义 SVG 不显示和透明 iframe 点击不稳定;点击后创建 3 分钟深链挑战、打开 Telegram App,并每 1.5 秒轮询确认,成功后复用现有 session 存储与 `next` 回跳。
- 官方 Login Widget 改为「改用网页授权」备用入口,按需加载,不再覆盖品牌按钮;providers 仍为可换行横排容器,后续可追加其它 SSO。
- `npm run telegram:tunnel` 同时打印 mono webhook 配置命令;Astro 开发代理将同一 ngrok 域名的 `/api` 转发到本机 mono,便于 Telegram webhook 本地联调。
-
站点
- Telegram 圆形登录入口改用指定蓝色渐变品牌 SVG,并通过 Ionicons `addIcons` 注册为 `logo-telegram` 后由 `ion-icon` 渲染;按钮尺寸、边框和官方 Widget 点击覆盖层保持不变。
-
站点
- Telegram 登录入口由官方大号文字按钮改为 42px 圆形 `send-outline` 纸飞机 Ionicon 细边框按钮(Ionicons 8 无 Telegram 品牌图标);官方跨域 Widget iframe 透明覆盖点击区,继续使用原生授权弹窗与验签链路。第三方入口改用可换行 providers 容器,后续可并排追加 Google/GitHub。
-
站点
- 新增独立命令 `npm run telegram:tunnel`:确认 3102 dev server 后启动 ngrok,自动清除仅子进程内的代理变量以兼容免费套餐,并打印公网 `/login`、Domain 和 BotFather `/setdomain` 提示;`Ctrl+C` 只关闭隧道,不影响 `npm run dev`。Vite 开发服务器允许 `.ngrok-free.app` Host,避免随机隧道域名被 403 拒绝;旧终端尚未刷新 PATH 时,Windows 自动回退到本机 ngrok 安装路径,并将 spawn 失败转成明确错误提示。
-
后台
- 站点客户端接入 Telegram SSO 登录:新增 `POST /web/auth/telegram`(HMAC-SHA256 验签 + `auth_date` 防重放 + IP 限流),首次登录自动注册(username 为 `t.` + 4~6 位随机字母,唯一冲突重试;昵称取 Telegram first_name + last_name),会话签发与密码登录共用新抽取的 `WebClientSessionIssuer`(`web-client-session-issuer.ts`),`WebClientAuthService` 行为不变。
- 新增 Prisma `ClientIdentity`(`client_identities` 表,`provider` + `provider_user_id` 唯一,`client_user_id` 外键级联删除),为后续 Google/GitHub 预留;现网需手动执行一次增量 SQL(CI 不跑 migrate)。
- env 新增 `TELEGRAM_BOT_TOKEN` / `TELEGRAM_BOT_USERNAME`(`.env` 与 `.env.mac` 已预埋空值,空 = 功能关闭);`/web/settings` 新增下发 `telegramLoginEnabled` / `telegramBotUsername`。
- 错误码新增 `TelegramAuthInvalid 40103` / `TelegramAuthExpired 40104` / `TelegramLoginNotConfigured 40105`,并在 `app-error.ts` 同步派生类;验签器 `telegram-auth-verifier.ts` 配 7 个单测(合法/缺省/篡改/错 token/坏 hash/过期/未来时间戳)。
-
站点
- 登录页接入 Telegram SSO:`/login` SSR 经 `getCachedClientSettings` 取 `telegramBotUsername`,未配置或接口失败时不渲染入口(安全降级,页面其余部分不受影响)。
- `SiteLoginPanel` 表单下新增「或」分隔线 + 官方 Login Widget(动态注入 script,`data-onauth` 全局回调 → `webClientAuth.loginWithTelegram` → `me()` → 跳 `next`),接入现有 `astro:page-load` 挂载/防重复逻辑;`_login.scss` 新增分隔线与容器样式,只用 `--site-*` token,昼夜自适应。
- `src/lib/auth` 新增 `loginWithTelegram` 与 `WebClientTelegramAuthPayload` 类型,会话存储与密码登录同一链路;`WebClientSettings` 类型与 `defaultClientSettings` 同步 `telegramLoginEnabled` / `telegramBotUsername` 字段。
-
-
后台
- 文章编辑器链接弹层不能切换站内/外链、输入框也打不了字:弹层 `@mousedown.prevent` 把 radio 和 input 的默认行为一起拦住了。表单控件放行,确定/移除仍阻止失焦。
-
站点
- 列表封面按场景改写:Unsplash 用 `w=640&fm=webp`,`s0.oolaf.top` 拼七牛 `imageView2`;详情 hero 用更大一档;OG 图仍原地址。
- HarmonyOS 改为 GB2312 一级子集 woff2 并 preload;去掉 Google Fonts,自托管一份 Noto Serif SC Regular 子集作展示衬线。
-
站点
- `SiteLayout` 默认 robots 从 `noindex,nofollow` 改成 `index,follow`,博客/文章等公开页不再被整站屏蔽收录;登录、注册和文章 404 仍 noindex。
-
后台
- 文章富文本链接支持「站内路径 / 外链」:选中文字后可选 `/test` 这类站内地址,不再被补成 `https://`;站内同页打开,外链仍新窗口。
-
站点
- 文章正文链接改用 `--site-fg-muted`,hover 用 `--site-fg-bright`,昼夜都和普通正文区分开;`href="/test"` 仍按站点 origin 打开。
-
后台
- 文章编辑「正文」标题行和工具栏之间补 12px 间距,全屏按钮不再贴着编辑器。
-
后台
- 文章状态拆成上架 / 下架 / 草稿三态:列表下架写入 `unpublished` 不再当草稿;筛选、抽屉、专题列表同步展示。
-
后台
- 文章列表「状态」「更新时间」收进标题列:状态跟置顶标签同行,更新时间跟摘要同行,去掉独立列省宽度。
-
后台
- 文章编辑/新增抽屉在「正文」标题加网页全屏与收起,仅正文覆盖页面并可滚动,Esc 退出。
- 文章管理置顶 Tab 支持拖拽排序和列表内优先级编辑,与抽屉置顶优先级同步;新增 `POST /articles/pin-sort`。
-
站点
- 部署后 PM2 起不来:`import { clsx } from "clsx"` 打到 Excalidraw 提升上来的 CJS `clsx@1.1.1`。强制解析到 `clsx@2.1.1`(有具名 ESM 导出),SSR 也把 clsx 打进服务端包。
-
站点
- `/tv` 播放器进度条和设置 switch 不再跟黑核糊在一起:控件改用封面叠字的浅色 token(`--site-hero-ink-on-dark`),白天主题也不再吃成 `--site-accent` 的黑。
-
站点
- stereo 部署 CI 在 Mac 上 `yarn install` 失败:`postinstall` 要跑 `scripts/copy-excalidraw-fonts.mjs`,发布 tarball 只打了 dist / package.json 等,没带 `scripts/`。打包步骤补上该目录。
-
-
站点
- 文章正文相框去掉灰垫,改成贴页面底的细发丝框,padding 收到 3px;简历头像同样去掉发灰底。
-
站点
- `/articles/:id` 正文图加相框:frost 发丝边 + 垫边,和周围阅读面分开;小图仍不拉满,点击仍看原图。
-
站点
- `/draw` 进页报 `_jsxDEV is not a function`:React 19.3 的 jsx-dev-runtime 在 Vite 预打包后 `jsxDEV` 为空。改为 shim 到 `jsx`,并关掉 Oxc 开发态 JSX。
-
后台
- 今日热榜按小时强制预热:`POST /client/web-hotlist/warmup`(client-key)重采已启用平台写入 Redis;定时任务 `web-hotlist-warmup` cron `0 * * * *`,脚本 Key 复用首页预热的 `WEB_CACHE_WARMUP_CLIENT_KEY`。增量 SQL `scripts/migrations/20260916-web-hotlist-warmup-scheduled-job.sql`。
-
站点
- `/hotlist` 进页改为 SSR 带上 Redis 快照,有数据就不再先转圈再打 `/hotlist.json`;冷缓存仍由客户端补拉。
-
站点
- `/slides/:id` 顶栏改成单行:标题与放映/保存/删除垂直居中,「已保存」挪到标题和按钮之间,不再垫在标题下面。
- `/slides/:id/play` 返回、标题、全屏同一行垂直对齐;全屏旁标出快捷键 F。
-
站点
- `/slides` 切页预览闪一下源码框:iframe 重载时 remark 的 `#source` 会露出来。切页改为后台加载新 iframe,旧页留着,就绪后再换;源码 textarea 默认隐藏。
-
站点
- `/slides` 放映钉图底部被裁:正方形图按宽度放大后高出剩余画布。改为按剩余高度等比缩小(`--pin-frac`),完整显示、不再被 overflow 切掉。
-
站点
- `/slides` 首次进编辑页、从放映返回后预览钉图消失:overlay 量不到尺寸时不再写成 0×0,先铺满预览框;量到后再信箱对齐。ClientRouter 回来会强制重挂 iframe 并重画钉图。
-
站点
- `/slides` 编辑预览钉图和放映页大小不一致:两边都按 16:9(1280×720)信箱缩放,overlay 不再铺满整块预览框,left/top/width 百分比和放映共用同一块画布。
-
站点
- `/slides` 放映裂图:去掉 srcdoc 里把 img 改成 data-src 的做法,钉图继续用真实 src。
- 编辑页首次预览没图:钉图解析放宽,CDN 地址立刻挂到 overlay,iframe 改为垫底绝对定位,load 后再画一次钉图。
-
站点
- `/slides` 插入图片不再送进 remark:编辑预览把钉图叠在 iframe 上,原图在 Worker 里缩成 960 预览图;remark 只渲染去掉 pin 的 Markdown,主线程不再解码相机原图。
-
后台
- Oolaf 面试备忘 30 秒改成先讲核心:start 立刻返回任务 ID,传到 Catbox 放后台,前端轮询 success 才拿链接。超时/转圈挪到追问。
-
站点
- `/slides/:id` 编辑顶栏去掉层间横线和插入区分隔线,只留标题/页选择输入发丝底边。
-
站点
- `/slides` 插入图片卡死:根因是预览把原图像素送进 remark,且 presenter 会复制成三份解码;预览改为最长边 960 的缩小图,srcdoc 里先 data-src、去掉 notes/preview 克隆后再给当前页挂 src。
-
后台
- Oolaf 面试备忘改成口播:大文件不能一个请求干等;先 start 拿任务 ID,再轮询好了没。追问覆盖为什么拆两步、轮询什么、进度条、为何不直传。
-
后台
- 「何健-前端开发-西安」个人项目 Oolaf 绑下架面试备忘 `interview-oolaf-catbox-chunk`:Catbox 大文件切片上传(官方无分片口、中台落盘异步代传、手写 multipart)。口播结构与海外官网等篇一致。
- 简历列表预览关掉再开,面试便签会丢:`$refs` 被 computed 缓存成已销毁 DOM。改为每次打开重取宿主,分页就绪后再画浮层。
-
站点
- `/slides/:id` 编辑顶栏分层:名称与放映/保存/删除、翻页与插入、套用模板拆成三层,发丝线分隔;快捷说明收到按钮 title,不再挤在同一行。
-
站点
- `/slides` 插入图片改为先写入 IndexedDB,预览用本地草稿;点保存(含 Ctrl+S)才上传 gallery OSS 并写回 CDN 地址。
-
后台
- 新增 `POST /web/slides/:id/images`:需 slides 权限,图片落到当前 gallery 绑定的 OSS,转 WebP 最长边 1920;Web API 调试文档已补。
-
站点
- `/slides` 支持插入图片:传到当前生效的 gallery OSS,预览里可拖动位置、右下角缩放;也可粘贴或拖放图片。
-
站点
- `/slides` 去掉插入流程图:编辑页分类轨、拖入/点击插入和相关脚本样式都移除,流程图仍只在 `/draw`。
-
后台
- 流程图上传 WebP 最长边限制 1920,避免原图像素过大把站点幻灯片预览卡死。
-
站点
- `/slides` 插入流程图不再卡死:预览 iframe 关掉 remark 的 `transform:scale` 和 window resize 循环,预览图先缩到最长边 1280 再送进 remark;素材条缩略图改为懒加载。
-
站点
- `/draw` 找回「在画布上查找」侧栏:去掉素材库时不再从 DOM 拆侧栏节点;查找输入框补发丝边,素材库页签和右上角入口仍隐藏。
-
站点
- `/slides` 插入流程图后预览不再卡死:remark iframe 限制图片尺寸并关掉溢出滚动条循环缩放;流程图导出也限制最长边 1920。
-
站点
- `/draw` 界面去掉 Excalidraw 文案痕迹(Mermaid 弹层说明、更多工具标题、导出水印、帮助里的 Plus/协作宣传);本地保存改用流程图 .json,不再用 Excalidraw 作文件类型名。
-
站点
- `/draw` 去掉 Excalidraw 素材库:右上角入口、侧栏、命令面板和右键「添加到素材库」都不再出现;画布查找仍可用。
-
站点
- `/draw` 去掉「线框图至代码」(选中画框上的 AI 转换、更多工具里的入口),文字至图表 / Mermaid 仍保留。
-
站点
- `/draw` 把 Excalidraw 主题覆盖改到其 CSS 之后加载,清掉黑夜模式残留紫色(主色、表面、焦点边框、Logo、选区)。
- 文字至图表 / Mermaid 弹层的页签下划线、输入框、插入按钮、AI Beta 标改成站点黑白主色。
-
站点
- `/draw`「保存到本地」不再弹中间层,直接走系统另存为(Ctrl+S 同样);菜单项补下载图标。
-
站点
- `/draw` 二级菜单改 portal 到 body,不再吃 Excalidraw 下拉的边框/间距;无权限锁改成 SVG。
- 空画布默认跟站点黑夜(void 黑);首选项行距和画布色点自己排,分类改成自定义下拉。
- 帮助/导出/保存到本地等弹层跟站点黑白主色,弹层和侧栏补开合动画。
-
站点
- `/draw` 云端保存收进汉堡「保存到 ›」二级:本地保存、标题、分类、保存到 OSS 都在侧栏,主菜单不再堆「云端保存」分组。
- 二级里的标题/分类改成矮发丝线输入,去掉过高的输入框。
-
站点
- `/draw` 汉堡菜单里的首选项收成「首选项 ›」二级浮层,开关和画布背景不再在主菜单里往下堆。
-
后台
- 新增 `POST /web/diagrams/ai`:需登录且账号含 `diagrams`,走系统默认 `isActive` 模型;`mode` 为 mermaid 或 html,专用提示词,不复用机器人 RAG。
- 后台 Web API 调试文档补流程图 AI 接口;该口限流 10 次/分钟。
-
站点
- `/draw` 文字生成图接 mono 系统默认 AI;无 `diagrams` 权限时「从代码生成图」「保存到 OSS」显示弱化文字加锁,不再跳登录。
- 汉堡菜单补回首选项(网格 / 吸附 / 禅 / 查看 / 属性 / 工具锁 / 箭头绑定 / 画布背景,不含主题和语言);命令面板和画布查找补图标。
- 清掉帮助、素材库等 Excalidraw 外链;去掉「浏览素材库」,只留本地打开;右键菜单和搜索框漏网英文再硬编码一层。
-
站点
- 命令面板改成站点自己的中文浮层(Ctrl+/ 或菜单),查找侧栏改开 `default/search`,欢迎屏提示也改成硬编码中文。
- 漏网英文(placeholder、aria-label、菜单名)再扩一层硬编码对照;云端保存输入保持透明发丝线。
-
站点
- `/draw` 云端保存(标题、分类、保存到 OSS)收进汉堡菜单「云端保存」,不再占画布顶栏。
- 命令面板、画布查找等简中包缺译的英文改成硬编码中文,并补一层界面文案替换(不含画布里用户写的字)。
-
站点
- 左下角「最近」只在博客首页 `/` 显示;其它页 SSR、软导航 after-swap 都加上 `site-skin--no-recent-pages` 立刻藏掉。
- 工具页仍上报最近常访,回到博客后列表照常更新。
-
站点
- `/draw` 给 `astro-island` 和舞台明确高度,Excalidraw 绝对铺满剩余区域,避免父级高度为 0 导致画布空白、工具栏点不到。
- Header 切昼夜时,若画布仍是默认黑/白底,跟站点背景一起切;用户自选的场景底色不改。
-
站点
- `/draw` 保存条移出 Excalidraw 画布层,避免欢迎屏/画布 overlay 挡住「登录后保存」。
- 工具岛不再跟 void 黑同色:`--island-bg-color` 用前景 10% mix,图标走 `--site-fg`,昼夜都能看见工具栏。
-
后台
- Admin 文章编辑器加「引用幻灯片」:TipTap `slideEmbed` 节点写成 `.article-slide-embed` 占位,插入时自动 `embedEnabled=true`。
-
站点
- 公开入口 `/draw` 接入 Excalidraw 画图层:锁简中、去掉社交/登录/协作/包内主题开关,壳层颜色桥到 `--site-*`,草稿走 IndexedDB,登录且 `diagrams` 才把 WebP + 场景 JSON 存到 gallery OSS。
- 幻灯片编辑页加分类流程图轨,拖入或点击插入 Markdown 图片,现有 remark 预览立刻出图。
- 文章页 hydrate `.article-slide-embed`,走公开 embed API 播放;无权限或 404 显示「幻灯片不可用」。
-
后台
- `/p/resume` 锁死手势缩放:viewport `maximum-scale=1` / `user-scalable=no`,`touch-action: pan-x pan-y`,并拦截 iOS `gesture*`。
-
站点
- 站点皮肤 viewport 与遗留壳对齐:`maximum-scale=1` / `user-scalable=no`;`touch-action: pan-x pan-y` 禁捏合(灯箱除外),iOS 再拦 `gesture*`。
-
后台
- 公开简历 `/p/resume`(flush 预览)纸面改为 `width: 100%` / `max-width: 820px`,窄屏收紧内边距并缩小证件照,长链接与教育行可换行;打印分页仍用 820px 测量稿。
-
站点
- `/resume` 静态 iframe 吃满舞台宽,骨架窄屏缩小证件照占位;真正的纸面重排在 Admin 公开预览 `/p/resume`。
-
站点
- `/resume` 静态操作栏改成文档流占位(不再盖在 iframe 上),栏用实心底(现场 `--site-bg`,静态白),正文从栏下开始,GitHub 链接不再穿出或挡住说明。
- 窄屏说明与按钮上下分排、文案可换行;工具条样式拆到 `_resume-studio-bar.scss`。
-
站点
- 说明文案改到和简历纸同宽栏左对齐(静态 820px / 40px 内边距,现场 720px / 32px),字色改成 `--site-fg-bright` / 白纸 `#111`,并加左侧 2px 竖线,不再用弱化灰字。
-
站点
- `/resume` 工具条左侧加说明「在职中,故隐藏在职工作项目与描述」;现场用 `--site-fg-muted`,静态白纸上用浅底字色,现场/静态都能看见。
-
站点
- 骨架纸宽度改成一开始就是 820px(`max-width: 100%` 仅窄屏收缩),并写进 HTML inline,避免先 100% 再收到 820 闪一下。
-
站点
- `/resume` 静态骨架改成和简历本体同宽(820px 居中),并从工具条高度下起铺,不再 100% 拉满去压右上角按钮。
-
后台
- `/p/resume?from=stereo` 按字段丢掉进行中的工作项目(结束日期「至今」),不按项目名匹配;后台预览和无查询的公开预览不动。
-
站点
- stereo `/resume` 现场稿按字段丢掉进行中的工作项目(结束日期「至今」),不按项目名匹配;Admin / mono 预览不动。
-
站点
- `/resume` iframe 不再把生产默认打到 `localhost:3100`。线上用 `https://mono.oolaf.top/p/resume`;请求 Host 不是本机时,loopback 预览地址会改写到公开 Admin。
- `.env.mac` 与 PM2 环境补上 `PUBLIC_RESUME_PREVIEW_URL`。
-
-
后台
- Admin `/setting` HLS 白名单改为服务端分页:`GET /web/tv-hls-hosts?page&pageSize` 返回 `{ list, page, pageSize, total }`,默认 20 条、pageSize 上限 100;播放学习仍走全量表缓存,不受列表分页影响。
- 设置页白名单表接翻页;删到空页会回到最后一页。
-
后台
- kanju 搜索把 catalog `poster_url` 映射为 `cover` 返回;iyf 搜索 cover 恒为 null,不回 imgPath。
-
站点
- 看剧AI 搜索卡使用目录 `poster_url` 做封面;爱壹帆仍用文字占位,不接 imgPath。
-
站点
- 续看卡片缩小,右上角 badge 标片源(爱壹帆 / 看剧AI),删除钮收到左上角。
- 搜索源从独立芯片改成搜索框内下拉;收藏/豆瓣不再挂源切换。
- 片库搜索样式拆到 `tv-library-search.scss`,避免单文件超 500 行。
-
后台
- kanju 目录里的 `zy.baipiaozhe.com/.../yjm3u8/YJ-*.m3u8` 不是播放列表,源站 301 到自身;hls-proxy 改为先请求 `player.baipiaozhe.com/v1/playback/resolve/{YJ-}`,拿到真实 m3u8 再代理。
- 解析出的 CDN 域名用已放行的 baipiaozhe 父域学习进 HLS 白名单;kanju 取流 Referer 改为播放器域,避免再跟 301 死循环。
-
后台
- 注册第二播放源 `kanju`(看剧AI):HMAC-SHA256 签 `x-ai-movie-timestamp/nonce/signature` 后打 browse/catalog 与 catalog/episodes,只取 `urls.yjm3u8`;不建 `/v1/threads`,不用对方历史。
- HLS 按 source 选 Referer(kanju 不用 iyf/pipecdn 映射,允许一跳 https 白名单跳转);种子白名单加 `baipiaozhe.com`。
- 历史/收藏/跳过偏好与 search/play 的 `mcId`/`videoId` 抬到 128;增量 SQL `scripts/migrations/20260915-client-tv-mcid-varchar-128.sql`。
-
站点
- 片源芯片会列出 mono 注册的看剧AI(`kanju`);搜索/播放/历史/弹幕仍走本站 `source::mcId`,不接看剧侧栏历史。
- 播放 href 与 `tvMediaKey` 覆盖看剧 `av_` 长 id(最长 128)。
-
后台
- Setting 影视片源把清单/切片代理从操作按钮改成独立开关列,开合状态与启用列一致,切片关仍依赖清单开。
-
后台
- 影视片源改成 registry + Setting `tv.sources`:启用/默认/清单代理/切片代理;`GET /web/tv/source/list` 只返回已启用源。
- search/episodes/play/hls-proxy 可选 `source`,缺省用 defaultSource;play 响应带 proxy flags;切片关时清单里 ts 保持 CDN 原址。
- 历史/收藏唯一键改为 (用户, source, mcId),空 source 回填 iyf;增量 SQL `20260915-client-tv-history-favorite-source-uidx.sql`。
- iyf HLS Referer/主机映射抽到独立策略模块;出站仍共用 `CLASS_PROXY_URL`。不加第二播放源。
-
站点
- 影视从单源对象改成源列表:先拉 `/web/tv/source/list`,搜索/播放/历史/收藏/弹幕绑定都带 `source`,身份用 `source::mcId`。
- 播放页 `/tv/play?source=&id=`;旧链接无 source 时用默认源。`proxyPlaylist` 为真才包 hls-proxy。
- 片库用现有 tab 样式渲染源芯片(现网仅一项);豆瓣仍只搜当前选中源。
-
-
站点
- 窄屏助手底部输入框跟 iOS 键盘:对话层贴 visualViewport,聚焦时连续对齐键盘动画,并取消 Safari 把页面顶起。
- 键盘升起时去掉 home indicator 垫高,避免输入条和键盘之间空一截;开层时给 iOS 加上 `interactive-widget=resizes-content`。
-
站点
- 公开内容助手窄屏改为全屏对话层:占满 visualViewport、返回关闭、建议横滑;开面板不自动弹键盘,有对话后收起芯片。
- 展开时不再抬高避开音乐条;输入框 16px 避免 iOS 缩放。桌面浮窗交互不变。
- `_robot.scss` 拆成 panel / motion / mobile,避免单文件超 500 行。
-
站点
- 文章封面按配图下沿亮度选字色:深色图白字 + 黑遮罩,浅色图黑字 + 白遮罩,不再跟站点昼夜主题绑死。
-
站点
- 文章封面改回「整张配图铺底 + 下沿遮罩 + 文字叠图」:拿掉文案区实心底,舞台加高到约 480px,遮罩只在下半段用 `--site-bg` 渐隐,保证字色对比且不再把图压成一条。
-
站点
- 首页软进文章详情时 ClientRouter 会用旧 SSR 样式盖掉封面文案 padding。把 banner 内边距和短遮罩钉进 SiteLayout inline,并给 copy 加上 `border-box`,避免首次进入贴边。
-
站点
- 文章封面文字遮罩改成贴着文案的固定短渐变(约 56px),不再按整张 banner 百分比从四成高度铺实色。
-
后台
- 后台主栏不再用 `100vh` 内容区叠固定顶栏 padding:顶栏回到文档流,内容区只吃剩余高度;未超出视口时不再出现右侧滚动条。
-
站点
- 封面舞台内文案补回左右/底内边距;返回与封面、封面与划线的间距收紧。
- 封面图不再进 PhotoSwipe 预览。
- 阅读栏 `--site-article-body-measure` 从 42rem 调到 45rem。
-
站点
- 文章详情封面舞台与底部评论区都收到 `--site-article-body-measure`,和正文同一栏宽。
-
后台
- 文章已选标签不再走 Arco 多选芯片(会把「待保存」和名字粘成一段字)。已入库用绿色实线芯片,未保存用金色虚线 + 独立「待保存」徽章。
-
站点
- 误删的封面舞台加回:封面仍吃满 `.site-article`,不跟阅读栏收窄。日期/标题/摘要、划线、正文继续 42rem。
-
站点
- 文章详情去掉封面舞台。日期、分类、标签、标题、摘要和划线与正文同一栏宽(`--site-article-body-measure`)。
-
后台
- 后台顶栏补上 tags-visited:打开过的页面显示为可关闭页签,工作台固定;`/setting`「后台界面」可开关,配置键 `admin.tags_visited.enabled`(默认开)。增量 SQL `scripts/migrations/20260914-admin-tags-visited-enabled.sql`。
- 右上角账号胶囊补 hover / 下拉箭头;菜单增加「系统设置」,仅 `config:view` 可见可进。
- 新建文章自定义标签:已入库与「待保存」芯片样式分开,待保存用金色虚线。
- 保存文章时给标题、摘要、正文(跳过 code/pre)和官方划线在中文与英文/数字之间补左右空格。
-
站点
- HarmonyOS 只挂了 Regular,却把 `@font-face` 标成 `400 700`,浏览器把粗体映射到同一份 Regular,`strong` 看起来不加粗。改回 `400` 并打开 `font-synthesis: weight`。
- 文章详情只收窄 `.site-article__body`(`--site-article-body-measure: 42rem`),masthead 仍吃满主栏。
- 标题摘要去掉 `46rem` 上限,铺满 `.site-article`。
-
站点
- 封面遮罩实色上提到约四成高度,文案顶 padding 加高,meta 一行也坐在不透底上。
-
站点
- 文章封面遮罩加实:约六成高度起就是不透的 `--site-bg`,标题摘要不再透出配图。
-
站点
- 文章封面舞台加一层随主题走的底遮罩,下沿落到 `--site-bg`,标题和摘要不再跟配图串色。
-
站点
- 修复 `SiteArticleHeader` 编译错误:Astro 不用 `<>` 碎片,遮罩改放进封面 figure。
-
站点
- 文章详情 masthead 改成封面舞台:图裁成矮带,日期/分类/标签/标题/摘要叠在下沿,用页面底色渐隐;不再竖着叠五段。
- 无封面时同一套 copy 收成一行 meta + 衬线标题;摘要最多两行。
-
站点
- 文章详情把列表封面配图接到标题下,规则与正文图一致(等比、限高、可点开预览);无封面不占位。
-
站点
- 影视投屏只有声音没有画面:hls.js 的 MSE blob 不能远投视频轨。Safari/iOS 投屏时改交真实 m3u8;Chrome 等禁止远投 MSE,并强制 video 合成以免 overlay 被丢掉。
-
站点
- 旧引擎(无 module / 无 CSS 变量)只动态加载 `/legacy/readable.css` 与 `gate.js`:顶栏升级提示 + 单栏可读,不补全 site 皮肤。
- 现代浏览器不下载 legacy 资源;`?legacy=1` 可在现代浏览器预览该模式。
- 能力谓词落在 `src/lib/legacy/engine.ts`,与 `SiteLayout` 内联 ES5 探测对齐。
-
站点
- 白天分享海报标题不再白字叠白底:浅色修饰类和 article/post 写在同一节点上,标题改为墨色。
-
站点
- 「分享海报」改成下拉:可选黑夜或白天封面,各自生成、缓存和下载。
- 白天成片走白底墨线,banner 改日轮与发丝光;黑夜仍是月食。
-
站点
- 分享海报离开旧杂志绿/米色:成片改 void 黑 + frost 发丝 + HarmonyOS / 衬线标题,二维码改黑白。
- 顶部 banner 重画成月食与轨道,不再用五线谱和金色散点。
-
站点
- 正文划线底色加重:mine / official / popular 改走 `--site-hl-*`,黑夜约 40%/30%/22% 前景,白天约 16%/12%/9%,不再用 10% 白或 24% 霜。
-
站点
- 文章详情有划线时「我的划线」默认展开;超过 3 条时列表下方出现展开/收起,收起只留前 3 条。
-
站点
- 公开内容助手只在博客 `/` 与文章详情 `/articles/:id` 出现;软导航离开后收起,不再带到速记等其它页。
- 速记报错改成底栏 dock 里输入框上方的一行字,不再用会被压缩、随后被 Composer 盖住的整块 `SiteErrorBlock`。
-
-
站点
- `/translate` 各引擎译文旁加复制图标,点击复制结果;成功后短暂变成对勾。昼夜都走 `--site-*`。
-
后台
- 77 篇导入文共用媒体 `3248`(`blog-img.png` 电脑插画),抽正文首图也会命中同一张;抽图逻辑改为跳过该默认图。
- 新增 `apply:article-covers`:先上传再引用。标题能对上的用本地生成封面,其余按标题下 Unsplash 图入库写成 `cover` 媒体,不热链、不清标签。
- 回填脚本的 Unsplash 兜底改为下载后上传媒体库,不再只写 `cover_url`。
- Unsplash 触发 429 后,剩余共用默认封面改为按分类用已生成主题图做独特色彩/裁切变体,再上传引用。
-
后台
- 导入文章若共用同一张封面,可用 `yarn workspace @oolaf-mono/server backfill:article-covers` 回填:重复或空封面先抽正文第一张真图,没有再按标题/分类/摘要搜 Unsplash;只改 cover,不清标签。支持 `--dry-run`。
- 后台新建/更新文章时,封面为空则自动抽正文首图(媒体库图写 coverMediaId,外链写 coverUrl)。
- 抽图、封面指纹与 Unsplash 检索词抽到 `article-cover-from-content.ts`,随机封面中文预设与回填共用。
-
-
站点
- 文章代码复制按钮改挂在 `pre` 上,不再套 `site-article-code-frame`。软导航首次进入若已套壳会拆掉。
- `pre > code` 铺满且不描边、不铺底,避免 Prism 后注入时再画出里圈。
-
站点
- 文章代码块只留 `pre` 一层边框底。复制按钮的外框不再自己描边、铺底,避免大盒再套小盒。
-
站点
- 文章代码块不再继承正文 `overflow-wrap: anywhere` / `word-break`,关掉连字,避免 `fix` 一类短行看起来像叠字。
- 代码框改走 `--site-*` frost,去掉 GitHub 灰底;未加载的 Prism 语言(如 markdown)降成 `language-none`。
-
-
后台
- 修复 Stereo 直播刮华视失败:Cloudflare 对 Impit 旧 `chrome`(约 124)指纹直接 403 挑战页;`WebLiveHuavodService` 改为 `chrome142` 并同步 UA。
- HTTP 非 2xx 时识别 `Just a moment` / Turnstile 验证页,提示更新华视 Cookie,而不再只报 `huavod HTTP 403`。
-
后台
- 定时任务运行记录保留从 7 天改为近 3 天(清理与列表窗口一并改)。
- Stereo 进页 Redis 预热改为 1 小时:公开缓存 TTL `3600`,定时任务 `web-entry-warmup` cron 改为 `0 * * * *`。增量 SQL `scripts/migrations/20260910-web-entry-warmup-hourly.sql`。
-
后台
- 定时任务运行记录改为只保留近 7 天:启动与每日按 `started_at` 删除更早行,列表查询同样限制窗口。
- Admin `/system/schedule` 运行记录文案标明「仅保留近 7 天」。
-
-
后台
- 定时任务增加「脚本 Key」JSON(`scheduled_jobs.extra_keys_json`),运行时注入子进程 `APHELIOS_SCHEDULE_KEYS`,各任务密钥互不共用。
- Stereo 进页预热脚本改为只读该 JSON 的 `WEB_CACHE_WARMUP_CLIENT_KEY`,不再读服务器 `.env`。增量 SQL `scripts/migrations/20260909-scheduled-job-extra-keys.sql`。
-
后台
- 预热覆盖 Stereo `/posts` 动态页:公开与登录用户的全部/视频/文字/私密第一页、kind-stats、contribution-stats;登录用户另预热带 clientOptions 的 home overview。
-
站点
- 顶栏中宽(平板/折叠屏)不再让「关于我」等导航盖住搜索:导航列可收缩,GitHub/小红书改为操作区图标。
- 顶栏 inner 用 container query:1080 以下收起意见反馈/关于我/简历、搜索收成图标、露出汉堡;920 以下外链进抽屉。
- 点击收缩搜索或 Ctrl+K 仍会展开并聚焦输入框;768 以下继续走原移动端顶栏。
-
后台
- Stereo 进页 Redis:首页公开接口 TTL 40 分钟;`/auth/me`、vault 列表、`/nav/recent` 走 `oolaf:web-private:*` 按用户/会话隔离,清公开缓存不会误删。
- `POST /api/v1/client/web-cache/warmup`(`x-oolaf-client-key`)一键预热首页 + 近 14 天有效会话;后台定时任务 `web-entry-warmup` 每 30 分钟调用。增量 SQL `scripts/migrations/20260909-web-entry-warmup-scheduled-job.sql`。
- 发布/改配置清公开缓存后 debounce 补热首页;env 使用 `WEB_CACHE_WARMUP_CLIENT_KEY`。
-
站点
- 现场打字机播完不再写入本机「已看过」标记;刷新 `/resume` 会重新播放(系统减少动效仍直接出终稿)。
-
站点
- 现场/静态切换只盖层,不中断打字机;切回现场从当前进度继续,后台仍滚到最新一行。
-
站点
- `/resume?t=static` 直接打开静态纸质预览,不再播打字机;无该参数仍给访客现场动画。
- 右上角弱化复制图标复制带 `t=static` 的地址;切换现场/静态会同步地址栏。
-
站点
- `/resume` 现场动效加长加明显:简介大号落版缩放、证件照裁切入场、章节/条目从右侧收束展开、进度发丝加左边竖线、光标加脉冲。
- 简介打完停约 720ms 再继续项目;播放标记升到 v8,刷新会再看一遍;系统减少动效仍直接出终稿。
-
站点
- 现场吐字补上站点霜线:顶栏进度、正在写的段落提亮、条目入场缩放/透明度、证件照淡入;仍只用 160ms 的 opacity/scale/color。
-
站点
- 去掉介绍后的 CSS 源码快闪;简介打完直接落版,继续打项目和技能。
-
站点
- 现场按已发布简历打全文:完整摘要、全部项目条目与要点、技能、个人优势;不再截成 22 字标题后一次性倒出。
- 介绍打完才写样式落版,随后逐条打印项目与技能。
-
站点
- `/resume` 现场改为整页画布:只打自我介绍文字,再快闪样式代码后落成排版;去掉左源码右预览。
-
站点
- 现场预览去掉光斑/渐变字,改走 `--site-*` 扁平霜线;跟 `html[data-theme]` 与顶栏昼夜切换。
-
站点
- 现场预览 iframe 预置排版骨架(卡片、证件照尺寸、栅格),CSS 打出来之前不再是撑满的原生图和白字。
- 长标签(头像 URL)一次打完,避免照片在标签写完前失控放大。
-
站点
- `/resume` 现场稿改为 Web `resumes/published` 真实内容(项目/技能/摘要),预览对未闭合 HTML 补全以便边打边画。
- 访客侧仍去掉姓名、标语与「同花顺」「科为」;本机只记住手工改过的源码,发布更新会重新打印。
-
站点
- 现场默认改为打字机:先打印自我介绍,再打印 CSS;右边随打印实时出字和样式。可跳过;切静态不停。
-
站点
- `/resume` 默认现场分栏(左源码右预览,localStorage);右上角切静态已发布简历,两套都不卸载。
-
后台
-
站点
- 简历骨架铺满可视高度:头图 + 分隔线 + 多段弹性行块填满剩余空间。
-
后台
- `/p/resume` 首屏改为白底骨架,去掉 `a-spin` 灰遮罩;iframe 父页收到绘制完成消息后再露出正文。
-
站点
- `/resume` 先出纸面白底骨架,iframe 灰闪隐藏;等 Admin 简历画完再淡入。其它页 prefetch `/p/resume` 减轻等待。
-
后台
- Stereo `/p/resume?from=stereo` 再去掉姓名与标语(如「求职前端开发」);后台预览原文不动。
-
站点
- Stereo 简历再隐藏姓名与标语(mono `?from=stereo`);后台预览不动。
-
后台
- 新增 `client.resume.enabled`(默认开):`/setting`「入口与功能」可关 Stereo 简历入口;Web `/settings` 返回 `resumeEnabled`。增量 SQL `scripts/migrations/20260909-client-resume-enabled.sql`。
-
站点
- 顶栏/抽屉/关于我联系区的简历入口跟 `resumeEnabled`;关闭则 `/resume` 跳首页。
- 简历页隐藏机器人与最近访问(`site-skin--no-utility-floats`,软导航按路径同步)。
-
后台
- `/p/resume?from=stereo` 渲染前去掉正文里的「同花顺」「科为」;无该查询时公开页与后台预览原文不动。
-
站点
- `/resume` iframe 增加 `from=stereo`,仅访客简历去掉「同花顺」「科为」;不改 Admin 预览。
-
后台
- 公开简历再剥工作经历:清空 `workExperience.items`,并关闭对应模块槽;项目经历仍保留。
-
-
后台
- 公开 `GET /api/v1/web/resumes/published` 剥联系方式与求职隐私(年龄/学历/工龄/性别婚姻/电话邮箱地址、求职意向、教育经历);后台设计器与列表预览仍用完整数据。
- 同时关闭求职/教育独立槽的 `moduleVisibility`,避免空模块占位;姓名、标语、头像、自评、工作与项目保留。
-
后台
- 公开 flush 预览改为连续 HTML,不再切 A4 固定页高,去掉页底空白与页间发丝线。列表弹窗 / PDF 仍按纸张分页。
-
后台
- 公开预览 `/p/resume` 覆盖 Admin 全局 `body { overflow: hidden }`,iframe 内可纵向滚动整份 HTML 简历。
-
站点
- `/resume` iframe 在顶栏与页脚之间铺满剩余高度,滚轮落在预览文档上。
-
后台
- 公开 `GET /api/v1/web/resumes/published`:最新已发布简历 + 模板,剥面试文章 id;无则 404;`frame-ancestors *`。
- 抽出 `ResumePrintDocument`;Admin 公开无壳页 `/p/resume`(无难点、无页缝);列表弹窗预览仍保留浮层与页间距。
- `client.layout_right.contacts` 增加 `resume`,默认在 github 前。已有逗号配置需手工补 `resume` 才会在关于我联系区出现。
-
站点
- 新增 `/resume`:顶栏「关于我」与 GitHub 之间的「简历」入口;主区 iframe 嵌套 Admin `/p/resume`(`PUBLIC_RESUME_PREVIEW_URL`)。
- 关于我联系区支持 `layoutRightContacts` 的 `resume`(`/resume`,非外链)。
- 注册 `document-text-outline`;窄屏抽屉「页面」区关于之后增加简历磁贴。
-
后台
- 删除服务端一次性脚本:`import-hejian-resume.ts`、`sync-resume-theme-swatch.ts`、`patch-hejian-personal-projects.ts`、`seed-interview-lasis-article.ts`、`seed-interview-hejian-work-notes.ts`。
- 保留 `backfill-article-content-media.ts` 与 `backfill-post-media-thumbs.ts` 作为存量运维入口。
-
后台
- LASIS 面试备忘改成与另外四篇同一口播:30 秒快答 + 追问(响应式/Proxy、markRaw 与 ref、怎么验)。
- 仍用 slug `interview-lasis-map-proxy`,脚本 `seed-interview-lasis-article.ts` 更新下架正文。
-
后台
- 四篇下架面试备忘落库并绑简历:海外官网 Astro/LCP、中台 Nginx path、rtcpts yalc、同花顺水果机 1px。
- 脚本 `seed-interview-hejian-work-notes.ts`;slug 分别为 interview-redtea-astro-lcp / interview-iot-nginx-paths / interview-rtcpts-yalc-npm / interview-ths-slot-1px。
- 正文按口播:30 秒 + 追问(问题在上、答案在下,术语括号注明)。不改 LASIS 那篇绑定。
-
后台
- 面试备忘独立权限 `resume:interview-notes`:权限树挂在简历下;增量 SQL 只授 `super_admin`,不随 `resume:view` 开放。
- `GET /resumes`、详情与写回响应对无此权限的账号剥掉 `interviewArticleIds`;无权限保存时服务端保留库内绑定,防止被清空或注入。
- 预览浮层改走 `GET /resumes/:id/interview-notes`,不再用文章详情接口;设计器绑定控件仅该权限可见。
-
后台
- 简历项目可绑 `interviewArticleIds`;设计器右侧多选文章(含下架),编辑画布不画备忘录。
- 列表「预览」为绑定项目画引线 + 面试难点 float;点标题弹文章预览并限高。另存为 PDF 只截纸页,不含浮层。
- 下架文章 `interview-lasis-map-proxy`(LASIS 地图实例进 Vue 响应式导致拖图掉帧)绑定 `proj_lasis`。脚本 `seed-interview-lasis-article.ts`。
-
后台
- 个人项目「功能」由两条 list 合并为一条,避免预览出现 3. / 4. 拆段。
-
后台
- 重写何健简历五条个人项目:Oolaf 工作台 / capture / formant / git-muse / Flutter 开工模板。
- 样本 `hejian-resume-content.json`;脚本 `patch-hejian-personal-projects.ts` 只改对应条目,不改发布状态。
-
-
站点
- 编辑页窄屏:名称单独一行,放映/保存/删除下一行拉开;模板与分页加大间距和点击高度;快捷键说明在手机上隐藏。
-
站点
- 放映顶栏对齐:用更高选择器盖掉 `.site-back` 的 8/28 外边距,返回 / 标题 / 全屏同一行垂直居中,标题用 UI 字号省略,不再和站点 Header 挤在一起。
-
站点
- 编辑改为按页:上一页 / 下一页 / 页下拉选中要改的那一页,左侧只显示该页 Markdown,右侧只预览该页。
- 「新页」或 Ctrl+Enter 在当前页后插入空白页并切过去;保存仍按 `---` 拼回整份稿。
-
站点
- 编辑页顶栏可改幻灯片名(空则为未命名);保存写入 `title`,不再只能靠正文一级标题。
- 列表「新建」带 `?draft=1`;未保存点「全部幻灯片」会提示并丢弃空稿。
- 当前页极简模板:标题页/章节/正文/双栏/引用/代码/结束页;Ctrl+Shift+1–7 套入光标所在页,Ctrl+Enter 插入新页。标题页仍可用 remark 的 `middle` 居中。
-
站点
- 预览/放映贴顶:覆盖 remark 默认 `vertical-align: middle` 与 scaler 垂直居中,16:9 画布顶对齐,正文第一个块去掉上外边距。
-
站点
- 幻灯片列表改成整行 frost 卡:标题与时间拉开,放映/删除放在卡片内部;删除 hover 只改字色、不铺底。
- 放映顶栏覆盖 `.site-back` 的大下边距,返回 / 标题 / 全屏拉开。
- remark 默认 4:3 会在宽屏两侧露出灰底;改为 16:9,并把 `.remark-container` 背景盖成白,去掉 scaler 阴影。
-
后台
- 补 `client_options` 种子:`code=slides`、`label=幻灯片`、`sort=50`(`WHERE NOT EXISTS`,可重复执行)。
- 写在同一份 `apps/server/scripts/migrations/20260907-client-slide.sql`;执行后到「系统 → 客户端用户 → 管理选项」确认,再勾给对应用户。 **增量 SQL(已有库执行):** ```sql INSERT INTO client_options (code, label, sort) SELECT 'slides', '幻灯片', 50 WHERE NOT EXISTS (SELECT 1 FROM client_options WHERE code = 'slides'); ```
-
后台
- 账号私有 Markdown 幻灯片:表 `client_slide`(ownerClientUserId / title / markdown / updatedAt),无公开 URL、无 buildStatus。
- `/web/slides` CRUD:登录 + clientOptions 含 `slides`;缺 option 或跨账号 404;markdown UTF-8 上限 256KiB;标题从首个 `#` 抽取,空则「未命名」。
- 列表只回 id/title/updatedAt,hasMore 由前端按本页是否满页判断。增量 SQL:`apps/server/scripts/migrations/20260907-client-slide.sql`。后台需加 client_options.code=`slides` 再勾到用户。
-
站点
- 账号私有 Markdown 幻灯片:`/slides` 列表、`/slides/:id` 编辑预览、`/slides/:id/play` 放映;闸门抄知识库(无 token → login,无 `slides` → `/`)。
- Header「文档」入口、recentPageLeaves、SEO_NOINDEX、legacy?tab=slides 302;图标 `easel-outline` 已在 SiteLayout 注册。
- 预览/放映用 iframe srcdoc + 同源 `public/vendor/remark.min.js`(gnab/remark gh-pages commit `6e2325d23edbe48178000285dbd8bae6ae95ea21`,remark-latest.min.js / 0.14.1);sandbox=`allow-scripts allow-same-origin`,打断 `</textarea>`;编辑预览 debounce 300ms 拆旧 iframe 再建;放映对 iframe requestFullscreen。
-
站点
- 最近常访:窄屏默认折叠;折叠态收成小胶囊,不挡主栏操作。
- 折叠偏好桌面 / 移动端分键存储。
-
站点
- `/gallery` 支持 Ctrl+V 粘贴图片:抽出剪贴板图后走同一套 `app-gallery-upload-queue`,打开待上传弹层。
- 剪贴板没有图片时不拦截,避免挡掉输入框文本粘贴。
-
站点
- 最近常访卡片圆角 12px;条目 hover 用 `--site-frost-soft`。
- 标题可折叠,偏好存 `aphelios-site-recent-pages-collapsed`。
-
站点
- 最近常访请求补 `Authorization`(不再只靠 cookie),避免已登录仍 401。
- 先 `me()` 刷新 `clientOptions`;上报成功后立刻露出当前叶子,避免空列表把整块藏掉。
-
后台
- 新增 client option `recent-pages`(最近常访)与表 `client_site_page_visits`(跟账号、path_hash 唯一)。
- `GET/PUT /web/nav/recent`:二级菜单叶子归一后记账;近 14 天次数排序、UI 3 条、库内 trim 20;写口每 IP 30 次/分钟;非法 path 204。
- 增量 SQL:`apps/server/scripts/migrations/20260907-client-site-page-visits.sql`。
-
站点
- 左下固定「最近常访」:登录且 `recent-pages` 才渲染,最多 3 条 Header 二级叶子,空列表整块隐藏。
- 同源 `/nav/recent.json` GET/PUT 代理 mono;`astro:page-load` 上报,同 path 2 分钟去重。
- 有音乐条时上抬,避开右下机器人;昼夜走 `--site-*`。
-
站点
- `_header-mobile.scss` 改到 `nav-drawer` 之后加载,避免基础 `display:none` 盖掉窄屏菜单按钮。
-
站点
- 窄屏菜单改回 `menu-outline`,去掉没画出来的 CSS 三横。
-
后台
- `POST /web/posts/:id/view` 单独限流:每 IP 40 次/分钟(不再跟列表 120、也不按 path 分桶)。
- Redis SET NX:同 IP 同 id 6 小时只 +1;并发抢锁失败回当前计数,不连加。
- +1 只清该条详情缓存,不 `clearScope(posts)`,避免打爆列表缓存。
-
站点
- 动态浏览上报:失败不再写 session,避免 429/网络错误把本会话锁死。
-
站点
- 窄屏顶栏收成 1.75rem 一行:logo / 搜索 / 菜单 / 头像同高,间距统一 8px。
- 菜单改为发丝三横(不再用偏小的 ionicon),账号头像补一圈 frost,和 logo 对齐。
- 窄屏顶栏样式拆到 `_header-mobile.scss`,避免 `_nav-drawer.scss` 超 500 行。
-
站点
- 窄屏 logo、菜单图标、账号头像统一 2rem,去掉 logo 内边距,避免三颗大小不一致。
-
站点
- 移动端账号头像改成正圆:identicon 底改为圆形,按钮去掉胶囊边框,clip-path 裁成圆。
-
后台
- 新增 `POST /web/posts/:id/view`:已发布可见动态 +1 浏览并回 `{ viewCount }`,供信息流上报。
- `GET /web/posts/:id` 仍会 +1,兼容旧详情调用。
-
站点
- 动态信息流补浏览上报:同源 `POST /posts/view.json`,同会话每条只计一次。
- 图文点开预览或开始播视频 +1;纯文字点「展开」+1,无需展开的短文在视口停留约 1s +1;遮罩未揭开不计。
- 卡片上的浏览数在上报成功后即时刷新。
-
后台
- Web 文章列表:带 categorySlug / tagSlug / keyword 时不再从 list 剔除置顶和专题文章,避免筛选结果被抽空。
- 列表缓存键升级 articles:list:v4。
-
站点
- 博客筛选时把接口返回的置顶文章并进列表,避免只命中置顶时首页被抽成空态。
-
站点
- 文章详情阅读字体改为 HarmonyOS(`--site-font-reading` 对齐 sans),去掉屏上宋体过锐;展示标题仍用衬线。
- AGENTS / README / DESIGN 同步说明。
-
站点
- PC 分类 / 标签字色再压淡:默认半透明 meta,选中只用 muted,不再跳到主文字色。
-
站点
- PC 博客分类 / 标签筛选去掉胶囊与实心选中,改成小号文字链,当前项仅下划线。
-
站点
- 窄屏「动态」改为纯文字,挪到头像右侧,填左侧空档。
- 搜索条吃满中间剩余宽度,右侧只留菜单和账号。
-
站点
- 置顶 / 我的项目横向栏去掉海报左上角胶囊 label(区块标题已足够)。
- 博客卡片去掉海报底描述与标题下 #tag;加载更多 HTML 同步。
- 移动端 robot 引导气泡改为贴齐右下 FAB,展开面板仍拉满宽。
- 窄屏顶栏缩短搜索,在菜单左侧放出「动态」入口(≤430px 仅图标);桌面搜索略收窄。
-
-
站点
- 访问统计改为同源 /visits.json 代理打到 mono,避免局域网打开 Stereo 时 beacon 误打到不存在的同源 /api/v1/web/visits,以及跨域 sendBeacon 假成功。
- 冷却仅在上报成功后写入;保留 text/plain sendBeacon 回退。
-
后台
- POST /web/visits:bodyParser 启用 text;text/plain JSON 可解析,配合 Stereo beacon 回退。
-
站点
- 修复访问 beacon:改为优先 fetch+CORS,成功后才写 10 分钟冷却;sendBeacon 仅作 text/plain 回退,避免跨域 JSON 假成功导致今日访问一直为 0。
-
站点
- 动态发布去嵌套框:去掉正文区内框、密钥底部分隔线和缩略图实线,只留卡片外壳、「更换」按钮和「+」虚线槽。
- 拉开密钥 / 正文 / 选图 / 底栏间距,正文区略增高;选图按栏宽自动换列,不再卡 5 列。
-
站点
- 动态发布正文区:padding 挪到 editor-wrap,修复 placeholder 贴边(绝对定位不吃 editor padding)。
-
站点
- 动态发布:私密改 checkbox,移到右侧与「发表」同组。
- 固定高度正文区加 input border,overflow 裁切,避免文字叠到选图区。
-
站点
- 动态发布框:正文区固定高度不随内容自增(内部滚动)。
- 类型筛选改为弱化文字链(下划线激活),去掉填充胶囊。
- 压缩「+」选图与发表行间距(工具栏上移到 sheet 下、收紧 gap)。
-
后台
- 提醒:client.default_home_tab / client.home_article_pinned_display 代码已废弃;若 Admin 仍见「未定义元数据」,执行 scripts/migrations/20260905-drop-home-tab-pinned-display.sql 删除 configs 残留行。
-
站点
- 动态页发布工具栏:私密开关、类型胶囊、「发表」收成一行;窄屏隐藏「私有可见」副文案,胶囊横向滑动。
- 类型筛选与 compose 解耦,无发布权限时仍可见筛选条。
-
后台
- 系统设置「保存全部 / 重置全部」:工具栏滚出视口后 Teleport 到顶栏 #admin-topbar-page-actions,便于长 Tab 内容时随时保存。
- 抽出 SettingTabsSaveToolbar;BasicLayout 增加顶栏挂载点;README 同步。
-
站点
- 文章详情阅读栏 --site-article-measure 改为 100%,与 .site-skin__main 同宽。
- AGENTS.md / README 同步说明。
-
后台
- 废弃并移除 `client.default_home_tab`、`client.home_article_pinned_display`(配置定义 / settings 下发 / Admin 分组;增量 SQL `scripts/migrations/20260905-drop-home-tab-pinned-display.sql`)。
- Admin 客户端设置将 `client.robot_agent.*` 归入「机器人」分组,不再落入「其他」。
- 机器人 chat 支持 `focusArticleId`:文章详情提问直接加载该公开文章语料;默认 system_prompt 补充「这篇文章讲了啥」指引。
-
站点
- 博客/动态首页与 feed 加载更多改用 `settings.homeArticlePageSize` / `homePostPageSize`,不再写死 `SITE_*_PAGE_SIZE`。
- 去掉 `defaultHomeTab` / `homeArticlePinnedDisplay` 消费;遗留 HomeCenterStage 置顶固定为 rank_list。
- 机器人 chat 传 `focusArticleId`,文章详情「这篇文章讲了啥」直接锚定当前文。
-
后台
- `optionalWebClientAuthMiddleware`:Bearer 过期/无效时改为按匿名继续,不再抛「未登录或登录已过期」(修复 Stereo 机器人带脏 token 时 chat/status 401)。
-
后台
- Admin 日志「机器人」Tab 补清空:`POST /logs/robot/clear`、`POST /logs/purge` 支持 type=`robot`(清空 / 删 N 天前);卫生条计入机器人用量条数。
- `LogsRobotPanel` 挂 `LogsPurgeActions`(需 `logs:delete`);README 同步。
-
站点
- 机器人面板打开时接入 `lockDialogScroll`,并允许在 `[data-robot-stage]` 内滚动;stage 加 `overscroll-behavior: contain`,避免滚轮/触控穿透到背后页面。
- 文章详情路径芯片 prepend「这篇文章讲了啥」;提问时自动附带文章标题与 `/articles/:id` 便于检索锚定。
-
站点
- 修复从机器人引用软导航进文章后 code 块字号变大:去掉 `SiteArticleBody`/`ArticleDetailBody` 组件级 `prism-okaidia` 再注入(布局已挂),并提高 `pre`/`code` 选择器优先级压过 prism 的 `font-size: 1em`。
-
后台
- Stereo 机器人固定走 AI 模型池 key:新增 `client.robot_agent.model_key`(默认 `deepseek-flash`),chat/改写均传 `modelKey`,不再用全局默认模型。
- 增量 SQL `scripts/migrations/20260905-robot-agent-model-key.sql`;Web API 文档说明同步。
-
站点
- 修复进页机器人引导不出现:去掉额度分支提前 return;首屏滚动误杀不再立刻记已看;改为 window scroll + 宽限期;storage 升 v2。
-
站点
- 用户消息气泡去掉背景与边框,压缩高度。
- 首次点开面板改为先弹出再后台刷 status,消除约 1s 等待。
-
站点
- 机器人进页招手引导:脉冲环 + 挥手 + 轻提示气泡;滚动/点开即停,会话内只出现一次,不挡阅读。
- Logo 用 mark 包边框内边距,并对偏左原图做 `object-position` 光学居中。
-
站点
- 横向轨道 `touch-action` 从仅 `pan-x` 改为 `pan-x pan-y`,移动端在置顶/项目等左右滑区域可正常上下滚页面。
-
站点
- 修复访问统计:`SiteLayout` 补挂 `mountWebVisitBeacon`(此前只在遗留 BaseLayout)。
- 移动端隐藏博客分类/标签两行(`.site-hero`)。
- Logo 加 frost 边框与内边距;移动顶栏精简为 logo+矮搜索+菜单+账号,主题切换移入抽屉。
-
-
站点
- 机器人气泡/标题/芯片/输入字号整体下调(气泡约 0.78rem),内边距略收。
-
站点
- 移动端改回侧边 gutter,弹层高度约 68dvh;panel/stage/bubble 防横向溢出。
- 参考链接弱化为静音纯文字 `[n] 标题`,去掉卡片边框与箭头。
-
站点
- 移动端机器人:展开改为近全宽底部弹层(dvh + safe-area),藏 FAB 防裁切;键盘/音乐避让仍生效。
- 参考来源改为序号块 + 文章/动态标签 + 标题 + 箭头行;正文 `[n]` 改为小徽标。
-
-
站点
- 热力图白天边框:activity 面板改 `--site-frost-strong`;格子边用 `--site-frost`(非 soft),空格/分级 `color-mix(fg-bright)` 提高对比;light frost token 略抬(0.06/0.12/0.2)。
- 「完整热力图」与首页 hero index:hover border 改 `--site-frost-strong`(昼夜可见,禁半透明白)。
- Client Key dialog 软导航丢样式:抽出 `app-dialog.scss` 挂 SiteLayout/BaseLayout;dialog 面板自带 glass-panel/frost;mount 校验 `isConnected` 防 stale controller。
-
站点
- 分类/标签索引胶囊白天丢失:`_taxonomy.scss` 半透明白底改为 `color-mix(fg-bright)` + `--site-frost` 边,hover 用 frost-strong / glass-hover,选中/focus 用 accent;`/tags` 同步胶囊外形。
-
站点
- Blog 首页分类胶囊 `.site-hero__filter`:去掉半透明白底/transparent 边,改用 `--site-frost` / `--site-frost-soft` / `--site-glass-hover`,白天 hover 可见外形。
- 选中态改 `--site-accent` + `--site-on-accent`(hover `--site-accent-hover`);标签行 `.site-hero__tag` 同步胶囊 hover/选中 token。
确认评论邮箱
邀请制评论