一、私密记事本(vault)

私人记事本。写进去的不会跑到公开文章或动态里,得开了 vault 才能看。能写一点 Markdown,能插私密图,也能挂文件。文件在笔记里是 vault-file://{id},点开走站内代理,跳到蓝奏分享链接。
登录进去翻自己的笔记就行。写字、插图、挂文件,公开博客是另一套。别把文章改成「仅自己可见」糊弄一下。
入口现在是 /vault。列表改成一行一条,点开后直接在当前页展开正文,不再挤在旧三栏里。一次最多取 50 条,Markdown、代码高亮仍由前台处理。图不裸链,文件也只放自定义协议,再经站内代理打开。真正的新增、插图、挂文件仍只在 mono 后台做,Stereo 这边保持只读。
Markdown 是自己啃的一小撮:先把 HTML 转义掉,再把加粗、斜体、代码、链接、图片、文件卡片还原回来。随手写个标签,不至于把页面弄花。数据在 mono,Stereo 负责展示、卡权限。真正写入、插图、挂文件都在后台做,这边只读。
链接只认 http/https/mailto,图片只认 http/https,私密图用 vault-image://,文件用 vault-file://。知道一个 id 没用,还得对上归属。
文件没硬塞进 S3。图还走原来的私密图链路;普通文件传到配好的蓝奏目录,mono 只记记录、分享链接、提取码、引用关系。孤儿资源会清:图连 S3 一起删,蓝奏源文件只删本地记录,不动云盘。
列表能往下滚,点开看标题、时间、正文。常用 Markdown 都有。图、文件都能放进笔记,文件新窗口打开。后台能上传、打开、删记录,也能清掉没被引用的图、文件。
有些东西不想发公开,又懒得再开个备忘录,还想绑在这个站点账号上。光有文字不够,截图、压缩包、临时材料现在也能丢进去。
二、传文件(catbox)

选个文件传上去,拿下载链接,自己这边留一条。文件实际在 Catbox,我们代传、记账。浏览器把 multipart 交给 mono,中台异步丢给 Catbox,轮询 upload-jobs,完了写回列表。复制链接、删记录都行。能看到大小、上传时间。不再选保留多久,也不走钛盘了。
现在直接进 /catbox。页面上半截是一整块拖放区,下面才是上传记录;历史记录用“加载更多”,没有继续保留无限滚动。交文件、建任务、轮询、写回文件名、链接那条链路没变。单文件上限 200MB,能力码是 catbox,没开就没有入口。
删记录先清本地。远端 deletefiles 失败只打日志,不挡你把记录抹掉。任务状态放 Redis,PM2 多实例也能查到,不然会出现「创建成功了,却轮询不到」。
临时甩个包、搬个安装文件、丢段日志,邮箱嫌大,聊天软件又压缩又过期。自建网盘太重。图个快:传完有链接,回头还能翻自己传过啥。
三、图床(gallery)

个人图床现在从 /gallery 进入。图片按今天、昨天、具体日期分组,标签在标题下面横着筛;点图仍用 PhotoSwipe 看原图。上传、同步、批量选择收到了右上角。JPG / PNG / WebP / GIF 单张不超过 10MB,一次最多 9 张。
相册主体仍是 Astro + TypeScript,上传编辑弹层自己写。提交后拿 jobId,轮询 upload-jobs,成功后再写标签;改信息、批量删、同步 R2 也都保留。页面名称统一叫“相册”,能力码仍是历史留下来的 cf。
图挂在账号上,谁来都能扔?不行。标签没有就建,多了按标签找。勾选就能批量删。同步 R2 是给「桶里有文件、库里没记录」这种对不齐用的。上传前先查类型、大小,不合格的别浪费请求。任务同样走 Redis。删除做成幂等,库里没有的 id 直接跳过。
免费图床三天两头防盗链、限流,再不然哪天没了。只放本地又没法在网页里引用。自己图床地址稳一点,配图不用看别人脸色。
四、音乐(music)

音乐不再是首页里的一个面板。/music 放专辑网格,/music/{albumId} 看曲目,/music/now 是单独的正在播放页。顺序、列表循环、单曲循环、随机都还在;曲库优先读本地缓存,想更新再手动刷新。没开 music 的人,入口、接口都没有。
播放器常驻在 SiteLayout,底下仍是自己维护的 HTMLAudioElement。ClientRouter 软跳转时,音频不会随页面一起销毁,听歌时还能继续翻文章、其它工具。隐藏播放条只记当前内存,刷新后会重新出现。
按「听着逛站」做的,打开音乐页才存在、关掉就没?那套不要。四种模式够用,没必要为听歌拉个巨型播放器库。进度等 metadata 好了再跳,少乱蹦。这是私人曲库,别拿来给访客放背景音乐。
就想在自己站点听自己整理的歌,不想被推荐、广告缠上。干巴巴的外链列表又难用。塞进日常路径里,登录就能听,听着还能去干别的。
五、影视(tv)

影视现在从 /tv 进入,续看收成标题下面的一排轻量卡片,片库本身改成单栏。登录后能搜片、收藏,也能刷豆瓣热门电影、剧集;播放页继续记录进度、片头片尾、自动连播。搜索框里能切片源:爱壹帆、看剧 AI。看剧搜索卡带封面,爱壹帆那边仍是占位。历史、收藏按 source + mcId 认同一部片。
弹幕也接了。进片按片名、集数去对一下,对上了就按时间轴飘;对不上或对错了,自己搜片名换一条。显隐用 DPlayer 自带按钮,默认关,记在 sessionStorage,切集重建播放器还在。面板能看匹配到哪、有多少条,薄厚、高度、字号也能调。
片源走 /web/tv/source/*,iyf 签钥取流,看剧 AI 另走自己那套签。浏览器只拿 m3u8,再包成 hls-proxy。豆瓣、历史、收藏、跳过、弹幕继续走 /web/tv/*。
这块交互最重,才用了 Vue islands。播放器是 DPlayer,hls.js 按需挂。搜片、选集、取流走 source。搜索历史放本地,输入框聚焦才出 popover,能单项清也能清空。
HLS 代理不再只认 pipecdn.vip。现在有一张可维护的 apex 白名单,默认包含 pipecdn.vip、dudupro.com;代理只在改写已放行的播放清单时学习新 apex,不会给随便一个入口 URL 自动放行。Admin 里也能查看、增加、删除这些记录。
弹幕别拿直播那种立刻全刷上屏来比。按 time 排好,塞进 DPlayer 时间轴,随 currentTime 往外冒。加载完再 clear + seek 对齐,拖进度条也不会满屏乱飞。
该重的地方用 Vue,别的页面继续用 Astro。密钥、签名留在 mono。文字海报省掉封面防盗链那一堆。续看、跳过挂在账号上,换设备还能接着。弹幕先自动匹配,歪了手搜;默认关着,切集还记得。VOD 按时间轴出,别拿直播 draw 那套来混。
旧片源挂了换成 iyf,后来又接了看剧 AI。想取代正版?没有,就是给自己弄个顺手的观影台。片能播了画面还干巴巴的,想看吐槽还得另开播放器。现在播着就能飘。
六、蓝奏文件管理(lanzou)

地址改成 /lanzou。公开网盘?谈不上。就是给有 lanzou 能力的人管自己的蓝奏文件。进去先填 ylogin、phpdisk_info,只存在当前浏览器 localStorage,不入库,也不写日志。后面列目录、上传、复制分享、开新窗口、建文件夹、丢回收站,都带着这份 Cookie 打 mono。
当前目录、面包屑、上传位置、文件夹卡片都摊在同一页,上传区也能直接拖文件。真正碰蓝奏的仍是 mono 的 WebLanzouService:文件临时落盘、转发,完成后删除临时文件。限制从 lanzou/status 来,最大 100MB,前端选中时先拦一遍。
Cookie 只留在你浏览器里,mono 随请求用,不持久化。写操作限得更死,还按客户端串行,免得一个账号同时打太多。只读接口 Redis 缓存 120 秒;upload / delete / mkdir 不缓存,写成功清掉 lanzou scope。
蓝奏接口不太稳,分享信息里 name、name_all、folder_name、url 都做了兼容。login not 会明确说登录失效。上传失败尽量把蓝奏返回的 info / text 透出来。中文文件名也按实际上传链路修过。
UI 按文件管理器来:当前路径、上传位置写清楚,按钮就叫「上传到此处」。打开、复制链接、移入回收站都有。图标按扩展名走 vscode-icons,至少 txt、pdf、zip 不会长一个样。
蓝奏适合放小文件,每次进它网页后台挺烦。只是想看目录、传个文件、复制链接,没必要绕一圈。不替代完整后台,只管我自己高频用的那几步。
七、直播(live)

直播现在单独在 /live。页面上面是电视画面,下面是一整块遥控器。频道键按台号铺开,点一下直接切台;同步、刷新、Cookie 设置收在同一行,不再用旧三栏右侧那块窄遥控器。
华视 Cookie 仍然只保存在浏览器。Stereo 把它放进 X-Huavod-Cookie 请求头,mono 用它同步台单,并通过 POST /web/live/huavod/session 返回本次播放的 auth、频道 CDN path。浏览器自己拼上 ?auth=,然后直连源站 m3u8、分片。
旧的 /web/live/huavod/hls、asset 代理、streamUrl 寿命学习、后台预换签都已经删掉。Redis 只缓存频道 path,不缓存这次会话的 auth。mono 负责拿会话、守接口,真正的视频流不再绕 mono 带宽。
能力码仍是单独的 live,影视 tv 另算一套。Cookie 挂了就重新登记,再同步一次台单;这部分没必要放进账号或数据库。
八、书签(bookmarks)

书签页现在是 /bookmarks。浏览器扩展把 Edge / Chrome 书签同步上来,前台按文件夹树展示,经常访问有个 Top10。点开记一次访问,不需要的可以删云端记录。同步走 Client API 的 x-oolaf-client-key,别指望在网页里一条条加。
书签、文件夹现在都按 api_key_id 隔离,不再是全站混在一个池里。Stereo 只读取 Admin 指定的那把 Key;没配置就不回退全表。GET /web/bookmarks 仍返回 items、folders,再按 positionPath 还原同层顺序。删除只动这把 Key 下的 MySQL 记录,不碰本机浏览器书签。
光有链接列表不够。空文件夹、同层交错顺序都得回来,不然看起来就不像自己那份。Top10 日常少翻树。全员共享同一份池子,家里几台机器对着同一套收藏夹挺合适。
换电脑或重装浏览器,收藏夹对齐很烦。扩展同步一次,登录就能翻。
九、速记(dump)

速记现在在 /dump。它仍是私人单会话,长得像聊天;能发文字、备注、附件,事后也能改正文,公开动态是另一回事。
附件任意类型最多 5 个。小于 10MB 走 mono 上传 dump_small,默认 MinIO;10MB 到 500MB 预签名直传 dump_large,默认 R2。选文件或拖拽先暂存在 IndexedDB,点发送再传。图片优先缩略图,点开 PhotoSwipe;多图列表只露首图加 +n。
页面改成锁定视口的单栏时间线:整页不滚,消息区单独滚,Composer 固定在底部;搜索、索引入口放进顶栏。音乐播放条出现时,Composer 会自动给它让位置。DumpApp 仍是 Vue island,进页先读 IndexedDB 快照,再从后台拉齐。
表是 dump_message / dump_attachment。小文件上传、大文件 complete 尽量出 WebP 缩略图,最长边 720,GIF 跳过。删消息只删库,不删对象文件。
秒开靠本地快照。附件先暂存,刷新也不会把刚选的弄丢。索引按备注、上海时区日期下钻。PC 是 Enter 发送、Shift+Enter 换行;手机反过来,另有发送按钮。图片从缩略图 zoom 进出。PC 预览栏有下载,移动端没有。
临时链接、截图、说话碎片、稍后处理的文件,既不像正式笔记,也不想发动态。丢进同一会话,手机电脑都能扔,回来按备注或日期翻。
十、热榜一键发现(hotlist-discover)

今日热榜现在直接走 /hotlist,不登录也能刷。登录相关的是“一键发现”:账号开了 hotlist-discover 后,顶部才出现兴趣词、按钮。
本地写几个兴趣标签,点一下。服务端拿当前可见的热榜标题去问 AI,常见是 DeepSeek,按标签筛一圈,命中的高亮。标签只存在浏览器,不入库。
HotlistApp 仍是 Vue island。列表经同源 /hotlist.json 转发,浏览器不直连 /web/hotlist*;一键发现最后落到 POST /web/hotlist/analyze。进页 Stereo 会把 Redis 快照 SSR 带上,有数据就不再先转一圈再拉 JSON。中台另有小时任务 web-hotlist-warmup,强制重采已启用平台再写回 Redis。
中台大约 30 个平台采集器,结果进 Redis,成功 TTL 8 小时。列表只读缓存立刻返回;缺源或失败的丢后台补采,并发大约 3,单源最多 2 次。analyze 走 AI JSON,强制关 thinking,并校验 source/id/tags。接口目前按 IP 限制 180 次/小时,主要是给前端按平台分批分析留出余量。
谁都能看热榜;带 AI 筛选才要权限。平台卡一行两列,卡内新闻也是两列。桌面每平台最多 20 条,窄屏 10 条,analyze 只提交当前看得见的那些。省略标题用浮层提示全称,命中条目会带高亮描边。
十一、去 AI 味道(humanize)

后来又加了 /humanize。把一段中文贴进去,服务端会按上游大约 200 字的限制拆段,多任务并发改写,再按原顺序清洗、拼回来。
长文本不会让浏览器一直挂着等:提交后先拿 jobId,页面轮询进度,完成后再显示结果。页面可以打开,真正提交必须登录,账号还要有 humanize。
这套、后台文章管理里的“去 AI 味”各走各的。后台那套用 AI 模型池逐段对比;这里是给站点账号使用的小工具。
十二、发布动态(write-post)

动态页也补了登录后的发布入口。账号需要 write-post,另外还得填写一把 Client Key;登录态决定你能不能看见发布区,Client Key 负责真正调用 /api/v1/client/* 写入动态、上传图片。
发布区就在 /posts 顶部,也有独立的 /posts/compose。公开、私密、图片、设备来源仍沿用 Post 模型,不会混进 Article。Client Key 只存在当前浏览器,不塞进账号资料。
确认评论邮箱
邀请制评论