门户的技术实现
www.eggsychen.asia 是扫一眼用的入口,没有门户自己的账号。机器约束和为什么不用 CMS,见 四个站的选型。
页面
React + Vite 构建成 HTML / CSS / JS,Caddy 按主机名 www 提供,访问时不跑 Node。顶栏图标链到网盘、Git、博客,都是普通链接。根域名不放门户,308 到网盘。
Caddy 把这个 Host 拆开:/news.json 从一个单独目录读,短缓存;其余路径回静态包。单页应用用 try_files 落到 index.html。新闻文件和前端产物分开,更新脉冲不必重编整站。
新闻管道
门户不写稿、不爬正文。原料是各板块公开 RSS,热搜榜另接公开接口。香港用南华早报 RSS,以及按站点检索的明报、香港 01。
五个板块固定顺序:热搜、科技、AI、财经、区块链。热搜约 90 进、40 出,其余约 60 进、20 出。进模型前用标题和摘要做关键词过滤,挡住娱乐和把「AI」当比喻的条目。
模型只归类、去重,不开思考链。同一事件的中英文报道合成一条,中文标题加两到三句综述,地区标大陆 / 香港 / 海外。标签只能从板块预设里选。输入里没有的事实不准编。
配图优先用 RSS;没有则对链接取一次页面,只读 og:image / twitter:image。热搜落地页没有稳定配图的会跳过。大约三分之一卡片有图,加载失败就回到纯色底。
节奏和密钥
聚合是一次性进程:拉源 → 调模型 → 写 JSON → 退出。每天北京 20:00(UTC 12:00)跑,落在模型空闲价。北京 9–12 点和 14–18 点是高峰,检测到就跳过、留上一份文件。
页面 fetch('/news.json') 一次。没有轮询,没有 WebSocket。密钥在服务器环境文件里,权限 600,不进前端包。没有密钥时退回不过模型的保底列表,板式不变。
卡片
板块纵向排。手机两列,宽了再按最小 200px 自动填。卡片 3:4,带地区标签。多源条目显示源数量和前几个来源名。点进去是原文。
视觉是门户自己的深色,和网盘、Git 后台不是一套 UI。门户停在「读 JSON、排成板」。