Nutrepedia: 使用 Clojure 和 HTMX 构建的多语言营养参考工具

Nutrepedia 提供免费的多语言营养参考层

Nutrepedia 是一个营养信息平台,旨在成为一个快速、轻松且美观的参考工具。与许多优先考虑用户账户或卡路里追踪的营养工具不同,Nutrepedia 专注于为 29 个区域语言环境下的食物数据提供一个免费、易于获取的参考层,其特色是包含 1,635 种食物,并渲染成 47,415 个本地化页面。

技术栈与架构

Nutrepedia 使用专注于性能和简洁性的现代轻量级技术栈构建。核心技术选择包括:

  • 后端: Clojure, HTTP-Kit, Compojure, 和 Hiccup。
  • 前端: 使用 HTMX 实现无需全页刷新的动态更新。
  • 数据库: Postgres,用于管理食物数据、本地化内容、管理工作流、任务队列、搜索和评估记录。

高级多语言搜索实现

为了应对全球用户群,Nutrepedia 在 Postgres 中实现了专门的搜索架构,以支持各种脚本和语言:

  • 拉丁字母脚本模糊搜索: 利用 pg_trgmunaccent 进行灵活匹配。
  • CJK 和非拉丁字母脚本: 使用 PGroonga 对中、日、韩文字符进行高效索引和搜索。
  • 罗马化别名: 这些是单独索引的,允许用户使用食物名称的罗马化版本进行搜索(例如,通过搜索 "rasbhari" 来查找印地语名称 "रसभरी")。

用户体验与社区反馈

虽然该项目因其简洁性和视觉吸引力而受到称赞,但 Hacker News 上的早期用户指出了几个需要进行技术和 UX 改进的领域:

搜索与导航

用户指出,目前的搜索结果不是超链接,这导致无法通过中键点击在新建标签页中打开结果。此外,一些用户报告了意外的搜索结果,例如在搜索 "salmon" 时出现了 "almonds"。

移动端访问与输入

几份报告强调了移动设备上数量输入框的问题。一位用户指出,当文本字段被清空时,键盘会自动关闭,导致难以输入非整数。另一位用户报告称,输入框在 Firefox 移动端表现异常,在输入过程中会跳转到默认数字。

无障碍访问与 UI 对比度

社区反馈建议使用 Chrome 的 Lighthouse 等工具进行无障碍访问审计。具体而言,用户指出了潜在的颜色对比度问题,例如搜索栏中粉色背景上的黄色文本颜色,这可能会阻碍阅读。

单位偏好

用户表达了希望能够设置默认单位的愿望,特别要求提供默认按每 100g 查看营养信息的选项,而不是使用区域或随机单位。

Sources