Nutrepedia: 使用 Clojure 和 HTMX 构建的多语言营养参考工具
Nutrepedia 提供免费的多语言营养参考层
Nutrepedia 是一个营养信息平台,旨在成为一个快速、轻松且美观的参考工具。与许多优先考虑用户账户或卡路里追踪的营养工具不同,Nutrepedia 专注于为 29 个区域语言环境下的食物数据提供一个免费、易于获取的参考层,其特色是包含 1,635 种食物,并渲染成 47,415 个本地化页面。
技术栈与架构
Nutrepedia 使用专注于性能和简洁性的现代轻量级技术栈构建。核心技术选择包括:
- 后端: Clojure, HTTP-Kit, Compojure, 和 Hiccup。
- 前端: 使用 HTMX 实现无需全页刷新的动态更新。
- 数据库: Postgres,用于管理食物数据、本地化内容、管理工作流、任务队列、搜索和评估记录。
高级多语言搜索实现
为了应对全球用户群,Nutrepedia 在 Postgres 中实现了专门的搜索架构,以支持各种脚本和语言:
- 拉丁字母脚本模糊搜索: 利用
pg_trgm和unaccent进行灵活匹配。 - CJK 和非拉丁字母脚本: 使用 PGroonga 对中、日、韩文字符进行高效索引和搜索。
- 罗马化别名: 这些是单独索引的,允许用户使用食物名称的罗马化版本进行搜索(例如,通过搜索 "rasbhari" 来查找印地语名称 "रसभरी")。
用户体验与社区反馈
虽然该项目因其简洁性和视觉吸引力而受到称赞,但 Hacker News 上的早期用户指出了几个需要进行技术和 UX 改进的领域:
搜索与导航
用户指出,目前的搜索结果不是超链接,这导致无法通过中键点击在新建标签页中打开结果。此外,一些用户报告了意外的搜索结果,例如在搜索 "salmon" 时出现了 "almonds"。
移动端访问与输入
几份报告强调了移动设备上数量输入框的问题。一位用户指出,当文本字段被清空时,键盘会自动关闭,导致难以输入非整数。另一位用户报告称,输入框在 Firefox 移动端表现异常,在输入过程中会跳转到默认数字。
无障碍访问与 UI 对比度
社区反馈建议使用 Chrome 的 Lighthouse 等工具进行无障碍访问审计。具体而言,用户指出了潜在的颜色对比度问题,例如搜索栏中粉色背景上的黄色文本颜色,这可能会阻碍阅读。
单位偏好
用户表达了希望能够设置默认单位的愿望,特别要求提供默认按每 100g 查看营养信息的选项,而不是使用区域或随机单位。