Nutrepedia: 使用 Clojure 與 HTMX 打造的多語言營養參考工具

Nutrepedia 提供免費且多語言的營養參考層

Nutrepedia 是一個營養資訊平台,旨在成為一個快速、輕鬆且美觀的參考工具。與許多優先考慮使用者帳戶或卡路里追蹤的營養工具不同,Nutrepedia 專注於為 29 個區域語言環境提供免費且易於取得的食物數據參考層,其特色是將 1,635 種食物呈現於 47,415 個在地化頁面中。

技術棧與架構

Nutrepedia 使用專注於效能與簡潔性的現代輕量級技術棧進行構建。核心技術選擇包括:

  • Backend: Clojure, HTTP-Kit, Compojure, 與 Hiccup。
  • Frontend: 使用 HTMX 進行動態更新,無需重新載入整個頁面。
  • Database: Postgres,用於管理食物數據、在地化內容、管理員工作流、任務隊列、搜尋以及評估記錄。

進階多語言搜尋實作

為了應對全球使用者群體,Nutrepedia 在 Postgres 中實作了專門的搜尋架構,以支援各種文字與語言:

  • 拉丁字母模糊搜尋: 利用 pg_trgmunaccent 進行靈活的匹配。
  • CJK 與非拉丁文字: 使用 PGroonga 對中、日、韓文字元進行高效的索引與搜尋。
  • 羅馬拼音別名: 這些會被單獨索引,允許使用者透過食物名稱的羅馬拼音版本進行搜尋(例如:搜尋 "rasbhari" 以找到印地語名稱 "रसभरी")。

使用者體驗與社群回饋

雖然該專案因其簡潔與視覺吸引力而受到讚賞,但 Hacker News 上的早期使用者已指出幾個技術與 UX 改進領域:

搜尋與導覽

使用者指出目前的搜尋結果並非超連結,這導致無法透過中鍵點擊來在新分頁中開啟結果。此外,部分使用者回報了非預期的搜尋結果,例如在搜尋 "salmon" 時出現了 "almonds"。

行動裝置的無障礙性與輸入

幾份報告強調了行動裝置上數量輸入框的問題。一位使用者指出,當文字欄位被清空時,鍵盤會自動關閉,導致難以輸入非整數。另一位使用者回報在 Firefox 行動版上,輸入框的行為異常,在輸入過程中會跳回預設數字。

無障礙性與 UI 對比度

社群回饋建議使用如 Chrome 的 Lighthouse 等工具進行無障礙性審核。具體而言,使用者指出潛在的色彩對比度問題,例如搜尋列中的黃色文字搭配粉紅色背景,這可能會阻礙閱讀性。

單位偏好

使用者表達了希望能夠設定預設單位的需求,特別是要求提供預設以每 100g 顯示營養資訊的選項,而非使用區域性或隨機的單位。

Sources