590种药物和草本补剂的致命组合,被压缩进一个比微信表情包还小的网页里。开发者说:我妈差点出事,我不想再有人重蹈覆辙。
1. 一个血检异常引发的周末项目
去年,开发者的母亲开始服用圣约翰草(St. John's Wort)缓解轻度抑郁。她同时在吃降压药。没人告诉她这两者会打架——圣约翰草通过诱导CYP3A4酶,能降低某些降压药的药效。
「这把我吓到了,足够让我为此做点什么。」
根据2019年《英国临床药理学杂志》的系统综述,美国和欧洲约33%的成年人定期服用草本补剂,其中高达70%从不告诉医生。信息散落在PubMed、FDA安全警报和药理学教材里,但正在吃姜黄配他汀、银杏配抗凝药的人,根本无从查起。
现有工具要么收费,要么把简单查询做成需要注册登录的「用户旅程」。开发者决定造一个反例:零后端、零API调用、零追踪,纯静态HTML,一切在浏览器里跑完。
成品叫Verificador de Interacciones — Botánica Andina,总包体积47KB(Gzip压缩后),3G网络下1秒内加载完毕。
2. 数据库比界面难做10倍
技术栈刻意极简:原生JavaScript、内联JSON数据、CDN托管静态文件。没有React,没有Vue,没有构建工具。
但真正的苦活是内容策展。开发者花了数周交叉验证:
每条交互至少对照2个来源,严重等级遵循Natural Medicines框架:严重(避免联用)、中等(需监测)、轻微(可能无需调整)。
当前数据库覆盖590+条有文献记录的组合,从常见的银杏-华法林相互作用,到冷门的甘草-地高辛联用风险。数据结构长这样:
{
"herb": "圣约翰草",
"drug_class": "SSRI类抗抑郁药",
"severity": "严重",
"mechanism": "通过5-HT再摄取抑制产生叠加性血清素效应",
"evidence": "doi:10.1016/j.tips.2004.02.009",
"recommendation": "避免联用。血清素综合征风险。"
}
全文590+条记录压缩后约30KB。现代浏览器上搜索结果呈现时间小于5毫秒,老旧设备也不超过50毫秒。
开发者选择内联数据而非懒加载,理由很产品经理:用户打开页面就是为了搜索,延迟加载是假优化;30KB对任何网络环境都是可忽略的代价;离线场景下工具依然可用。
3. 自己写模糊搜索,因为不想依赖200KB的库
搜索功能实现了加权模糊匹配,处理拼写变体(如「ginkgo」vs「gingko」)、西班牙语/英语混合查询、常见商品名与通用名映射。底层是自定义的Levenshtein距离算法,零外部依赖。
「零依赖不等于零工作量。」开发者复盘时写道,「自己写响应式布局、无障碍功能、模糊搜索,前期投入更大,但维护负担降到接近零。」
托管方案简单粗暴:CDN静态文件。无服务器,无数据库,无停机时间。月成本:0美元(域名附赠托管)。
4. 三个反直觉的教训
项目开源后,开发者在技术社区分享了三点体会:
健康内容需要引用,而非「据研究表明」
工具中的每条声明都链接到DOI或具体出版物。这一步比写内容本身耗时3倍,但决定了这是工具还是博客水文。
策展比代码难10倍
交互数据库的构建时间是界面的10倍。验证临床证据、处理矛盾来源、标注证据等级——这些没有捷径。
47KB是设计目标,不是意外
每个功能都经过「值得增加多少字节」的拷问。最终产物能在厄瓜多尔农村的老旧安卓机上流畅运行,这正是目标用户可能所处的环境。
目前数据库仍在缓慢扩充。开发者接受社区提交,但坚持双源验证原则。最近一次更新加入了辅酶Q10与他汀类药物的相互作用——这是患者最常隐瞒医生的组合之一,却极少被主动询问。
热门跟贴