爱意满满的作品展示区。
mundane

用 vibe coding 做了一个本地优先的 X/Twitter 书签管理插件,聊聊过程

  •  
  •   mundane ·
    mundane799699 · 17h 55m ago · 857 views

    起因其实很朴素:我自己的 X/Twitter 书签和点赞越攒越多,书签有一万多条,点赞有三万多条(以前把点赞当书签用)。

    但真正想找某条内容时,原生列表基本只能一直往下翻。记得作者还好,不记得作者、只记得正文里某个词,几乎就只能放弃。

    另一个让我有点不踏实的地方是,这些“收藏”实际上仍然完全依赖平台:账号状态、帖子删除、产品界面调整,都会影响之后还能不能找到。于是我想做一个很个人化的工具:把已经收藏过的内容沉淀到本地,能搜索、整理,也能自己备份。

    最后做成了 Twitter Mark ,一个基于 WXT + React + TypeScript + Dexie 的浏览器扩展。

    书签截图: 点赞截图:

    它现在主要做几件事:

    • 读取当前浏览器里已经登录的 X 会话,只读同步书签和点赞;
    • 数据保存在本地 IndexedDB ,不要求再注册一个云端账号;
    • 可以按正文、作者、语言、媒体类型和时间筛选,也可以自己打标签;
    • 支持增量/全量同步、后台同步、暂停后继续,以及 JSON 导入导出;
    • 同步过程不会替你发帖、点赞、关注,也不会取消书签。

    实现中最麻烦的其实不是 UI ,而是“如何保证同步不会把已有数据搞坏”。x.com 的网页 GraphQL 并不是稳定的公开 API ,Query ID 、返回结构和限流都有可能变。所以我给自己定了几个硬约束:解析异常不能当成空列表,远端某次没返回的数据不能自动从本地删除;每一页数据写入后才推进 cursor ;中断、限流或浏览器退出后要能从 checkpoint 继续。

    关于 vibe coding

    这个项目大部分代码是用 vibe coding 的方式完成的,但实际过程并不是一句“帮我做个插件”然后等结果。

    我先把产品边界写清楚,尤其是“本地优先、只读、已有数据优先”这几个不能破坏的原则;再把系统拆成 X 网页请求、同步引擎、存储层、任务调度和资料库 UI 几块。每次只让模型处理一个范围比较小、可以验证的改动,然后马上跑类型检查和测试,再用真实账号做小批量验证。

    模型在搭页面、补类型、写重复性代码上确实很快,但在分页状态、失败恢复和数据一致性上,还是很容易给出“看起来能跑”的实现。比较有效的做法是先写清楚不变量,再让它根据这些约束补测试,而不是只看 happy path 。比如:cursor 什么时候可以提交、重复同步是否幂等、解析失败会不会误删本地数据、切换账号时任务会不会串数据,这些都需要人主动盯着。

    我目前最大的体会是:vibe coding 很适合把一个人脑子里的小工具快速做出来,但前提是人要负责定义问题、控制范围和验收。模型可以加速实现,却不会自动替你做出正确的产品取舍。

    项目现在已经能日常使用,但同步依赖 X 的网页接口,未来接口变化时仍可能需要跟着维护。我也还在继续打磨搜索、同步稳定性和跨浏览器体验。

    如果你也有大量 X 书签/点赞,想听听大家平时是怎么整理的,以及对“本地资料库”这种做法最在意什么。

    项目主页: https://twittermark.com

    Chrome 商店: https://chromewebstore.google.com/detail/twitter-mark/phoiffgkjjfnjfljnjgmpobmanghlaga

    Supplement 1  ·  17h 18m ago

    体验过后如果觉得不错,需要激活码激活终身版的可以在评论区留言,我可以免费发放一些。

    31 replies  •  2026-09-29 14:21:48 +08:00
    mundane
        1
    mundane  
    OP
       17h 47m ago
    火狐版本其实已经提交,还在审核中。

    tommyxps
        2
    tommyxps  
       17h 46m ago
    书签和点赞都提示:unknown: Failed to fetch
    mundane
        3
    mundane  
    OP
       17h 27m ago
    @tommyxps 能不能把错误日志给我看看,方便我排查。同步记录里点击失败的那条同步记录,复制诊断信息。
    mundane
        4
    mundane  
    OP
       17h 21m ago
    体验过后如果觉得不错,需要激活码激活终身版的可以在此评论。
    hermit6980
        5
    hermit6980  
       17h 7m ago
    微博、x 、app 、论坛都积累了很多的收藏/书签,日积月累都已经翻不完,整理起来也非常麻烦。。。

    这两天发现基于 x 的一些插件是真的好用,自动判断账号是广告/nsfw/垃圾信息然后屏蔽/拉黑的插件;导入导出关注列表插件;自动保存浏览记录的插件;这不,又惊喜的发现了楼主的书签管理插件,先回帖留名,支持一波。先睡了,待明天好好享用一番
    theHaagenDazs
        6
    theHaagenDazs  
       17h 7m ago
    @mundane #1 期待 Firefox 版上线!可以要一个激活码吗,如果能顺便支持 mastodon ,bluesky ,和 threads 就更好了( x
    邮箱 YnVzeS5nYXRlMDQ5MUBmYXN0bWFpbC5jb20=
    nicegoing
        7
    nicegoing  
       16h 41m ago
    不错呀,对于长看 x 的很实用,x 的收藏系统太垃圾了。求个激活码。邮箱 cHVoYW5odWkyMDEyQGdtYWlsLmNvbQ==
    kamal
        8
    kamal  
       14h 27m ago
    我的书签收藏量估计比你的多一个数量级,而且文件夹很多。请问楼主 X 有没有开放文件夹管理相关的 API 啊?比如搜一个文件夹的名字。
    missqso
        9
    missqso  
       14h 17m ago via iPhone
    收藏了 白天试试
    CyberZCS
        10
    CyberZCS  
       8h 10m ago
    效果相当不错啊!同步速度非常快,243 个 bookmark 3 秒钟几乎全部同步完成,🐮🍺!

    不过好像只能从 x -> 插件 单向同步?我试了下在 x 里取消一个 bookmark ,插件里不会自动删除,如果有双向同步就更好了,否则 x 里的内容回越积越多 😂

    还有一个问题就是有些推文只是发了一个 x article 的链接,能不能把 article 也全文保存下来呢?否则这个 article 的内容无法检索,如果原链接失效,内容也就看不到了。

    如果 OP 愿意给一个终身版激活码,不甚感激,邮箱:YWl6aGltb3VnQGdtYWlsLmNvbQ==
    CyberZCS
        11
    CyberZCS  
       8h 8m ago
    哦对,还有就是我自己收藏的就是 x article ,目前保存下来的也只是一个链接,如果能全文保存,就更好了
    makry
        12
    makry  
       6h 56m ago
    500 条收藏同步非常丝滑,相比其他同类插件上手体验不错。
    一些细节 UI 可以优化,比如搜索结果关键词高亮、列表视图布局优化、自定义字体大小等等。
    求一个激活码,我那烂在里面的几千条收藏就有救了,感谢作者。
    wuhan027
        13
    wuhan027  
       6h 26m ago
    已经在试用了,暂时还没出现啥问题,希望后续还有其他的功能,顺便求个终身版激活码,感谢大佬。MzQ1MDA5NTI5MEBxcS5jb20=
    hermit6980
        14
    hermit6980  
       5h 29m ago
    @hermit6980 OTE5MjYwMjgyQHFxLmNvbQ== 体验不错,希望得到一个激活码
    makry
        15
    makry  
       5h 23m ago
    忘记留邮箱,感谢 OP Y25tYXJreUBnbWFpbC5jb20=
    mundane
        16
    mundane  
    OP
       4h 47m ago
    @theHaagenDazs 邮件已发送
    mundane
        17
    mundane  
    OP
       4h 44m ago
    @hermit6980 #14 已发送
    mundane
        18
    mundane  
    OP
       4h 43m ago
    @nicegoing 已发送
    mundane
        19
    mundane  
    OP
       4h 38m ago
    @CyberZCS #10 已发送
    mundane
        20
    mundane  
    OP
       4h 37m ago
    @wuhan027 已发送
    mundane
        21
    mundane  
    OP
       4h 35m ago
    @makry #15 已发送
    mundane
        22
    mundane  
    OP
       4h 33m ago
    @kamal 目前还没有,会考虑的。
    mundane
        23
    mundane  
    OP
       4h 32m ago
    @CyberZCS #10 取消功能我回头会做的
    aurorajamesgirl
        24
    aurorajamesgirl  
       4h 21m ago
    “解析失败不能当空列表”和写入成功后才推进 cursor ,这两个约束很关键。还可以给 JSON 导出做一次“导出后重新导入空库”的验证流程,确保本地数据真正能恢复,而不只是导出了文件。
    mxlg2030
        25
    mxlg2030  
       4h 20m ago
    很实用。求个激活码。邮箱 [email protected]
    leqoqo
        26
    leqoqo  
       3h 33m ago
    求一个激活码,之前使用的油猴脚本,导出的 json 文件,不太方便搜索和查看,有界面和搜索功能太赞了,bGVxb3FvQG1zbi5jb20=
    wuhan027
        27
    wuhan027  
       2h 54m ago
    @mundane #20 感谢大佬,激活码已兑换。有个功能取舍的问题想请教一下,你在正文里提到 “于是我想做一个很个人化的工具:把已经收藏过的内容沉淀到本地,能搜索、整理,也能自己备份”。就想您在上一句说的,目前太依赖平台了,如果原贴被删了,即使用您的插件非常快速地搜索到,也仍然看不了。那么可否增加一个批量下载的功能,把收藏或点赞过的文章、视频、图片,下载到本地电脑上,真正实现 “把已经收藏过的内容沉淀到本地”
    mundane
        28
    mundane  
    OP
       1h 18m ago
    @mxlg2030 已发送
    mundane
        29
    mundane  
    OP
       1h 16m ago
    @leqoqo 已发送
    mundane
        30
    mundane  
    OP
       1h 15m ago
    @wuhan027 #27 谢谢建议,我后续会考虑如何解决这个问题
    mglv
        31
    mglv  
       1h 13m ago
    很不错,看着很简洁,麻烦给我激活码吧,感谢。bHhtMTMxNDUxNDVAZ21haWwuY29t
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4980 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 07:35 · PVG 15:35 · LAX 00:35 · JFK 03:35
    ♥ Do have faith in what you're doing.