自Feedly改版后,我一直没能适应新界面,尤其怀念旧版Feedly Classic那种信息密度极高、单栏布局、毫无冗余的阅读节奏。我订阅的源里包含不少英文、日文和韩文技术博客,以前碰到这些内容,要么得新开个翻译页面,要么就直接跳过。时间一长,这些源就变成了“已读但从不看”的存在。

不打算继续凑合了,我花了一个周末自己动手写了个RSS阅读器,取名FeedFlow。设计上强调移动端优先,支持暗色主题和多栏视图模式,算是向Feedly Classic致敬。数据存在Google Firestore,账户体系绑定了LINE Login。非中文文章在后台会自动调用Gemini 2.5 Flash翻译成繁体中文,不用切标签页。目前服务部署在Cloud Run上,我自己每天都在用。

打开网易新闻 查看精彩图片

市面上的RSS阅读器并不少,但我想要的东西相当具体:在手机上必须快,信息密度要高,别每篇文章都挂上一张撑满屏幕的大图,而且要能原地翻译外文源,不需要跳来跳去。把这三个条件放在一起,现有的服务并没有一个能完全满足。尤其是“非中文文章自动翻译”这一点,在其他阅读器里基本没有被当成核心功能。FeedFlow这个名字就此定了下来,整个项目的骨架由三部分组成:一个负责抓取RSS、解析内容、调用Gemini以及读写Firestore的Express后端;一个没有使用任何框架、纯靠Vanilla JS ES Modules跑起来的前端;外加Firestore做数据库,LINE Login做账户体系。第一个MVP版本就搞定了订阅管理、文件夹分类、四种视图模式和暗色主题,此后每一个版本都是在这个骨架上继续生长。

FeedFlow最开始其实没有账户系统,数据全部存在浏览器的localStorage里,换个设备订阅记录就没了。要实现云端同步,第一步就得有一个稳定的用户身份,能作为Firestore里文档路径的标识。我没去搭用户名密码那一整套体系,而是把LINE Login获取到的LINE User ID直接拿过来当key,省掉了自己构建密码管理、验证邮箱和“忘记密码”流程的全部工作。对一个个人项目来说,这条路径显然更实际。

这个项目仍在持续开发,本文是这个系列的第一篇,记录了整个项目的骨架和几项关键决策的来龙去脉。