Cat-Raising:用 Next.js 打造科學養貓的營養計算工具
🐱 每一位貓奴都該擁有的科學餵養工具——讓乾物質計算不再是噩夢。
身為多貓家庭的一員,你是不是也曾經對著貓糧包裝上的營養成分表發呆,試圖搞懂「這罐主食罐的蛋白質夠不夠高」、「這款乾糧的碳水會不會太多」?
Cat-Raising 就是為了解決這個痛點而生的。
專案緣起
養貓新手最常聽到的一句話就是:「要看乾物質比,不是看原始成分」。
問題是,手動計算乾物質比真的很麻煩:
1 | 乾物質含量 = 100% - 水分% |
每換一款貓糧都要拿計算機敲半天,還要對照 AAFCO 標準判斷合不合格。於是我決定做一個工具來自動化這件事。
技術棧選擇
1 | ┌─────────────────────────────────────────┐ |
為什麼選 Next.js 14?
- App Router - 新版路由系統更直覺,檔案即路由
- Server Components - 減少 client bundle 大小
- Built-in Optimizations - 圖片優化、字體優化開箱即用
- Vercel 部署 - 一鍵部署,免費額度對小專案綽綽有餘
為什麼選 Supabase?
- PostgreSQL - 正統關聯式資料庫,不是 NoSQL 的妥協
- Row Level Security - 內建的資料隔離,不用自己寫權限邏輯
- Auth 系統 - Google OAuth 幾行程式碼就搞定
- 免費額度 - 對個人專案來說非常夠用
核心功能實作
營養計算引擎
這是整個專案的核心,程式碼其實不複雜:
1 | export function calculateNutrition(input: FoodCalculationInput): CalculationResult { |
關鍵點:
- 使用 Modified Atwater 係數 計算熱量比,這是 AAFCO 建議的貓狗食品熱量計算方式
- 蛋白質和碳水是 3.5 kcal/g(不是人類的 4 kcal/g)
- 脂肪是 8.5 kcal/g(不是人類的 9 kcal/g)
營養評估標準
基於 AAFCO 和各種貓營養學文獻,我設定了以下評估標準:
| 項目 | 合格標準 | 說明 |
|---|---|---|
| 蛋白質乾物比 | ≥35% | 貓是肉食動物,蛋白質不能少 |
| 脂肪乾物比 | 30-50% | 提供能量,太低或太高都不好 |
| 碳水乾物比 | ≤10% | 貓不需要太多碳水 |
| 纖維乾物比 | ≤2% | 高纖維影響消化 |
| 鈣磷比 | 1.1-1.8:1 | 骨骼健康的關鍵 |
| 磷含量 | <350mg/100kcal | 腎臟友善指標 |
多貓管理系統
既然要做,就做完整一點。支援多貓家庭的管理:
- 16 款可愛貓咪頭像選擇
- 自動計算貓咪年齡
- 每隻貓獨立的營養記錄
- 收藏功能標記常用貓糧
系統截圖
以下是 Cat-Raising 應用的實際功能演示:
首頁與導航
應用的入口頁面採用玻璃質感設計和漸變色彩搭配,提供直觀的導航選單,讓用戶能快速訪問各項功能。
登入/註冊頁面
支援一般帳號註冊和 Google OAuth 登入,採用玻璃質感卡片設計,提供流暢的用戶體驗。
營養計算頁面
直觀的表單設計,支援輸入品牌名稱、食品名稱、重量及詳細營養成分(蛋白質、脂肪、纖維、灰分、水分、碳水化合物、礦物質等),並即時顯示計算結果。
結果展示頁面
以視覺化方式呈現營養分析結果,使用綠色/紅色標示營養成分是否達到 AAFCO 標準,包含乾物質分析、熱量比分析等詳細報告。
貓咪管理頁面
支援多隻貓咪管理,提供 16 款可愛貓咪頭像選擇,記錄姓名、生日、體重等基本資料,並可追蹤每隻貓咪的營養攝取狀況。
計算記錄頁面
以卡片形式展示歷史計算記錄,支援收藏功能和時間排序,方便用戶追蹤和比較不同食品的營養價值。
響應式設計
完美適配桌面和移動設備,採用底部導航設計優化手機使用體驗,並支援 PWA 安裝功能,提供近似原生應用的使用感受。
[註:實際應用界面已通過測試,功能運行穩定]
玻璃質感 UI
這次想嘗試 Glassmorphism 風格,主要透過這段 CSS 實現:
1 | .glass { |
配合淡藍色漸層背景和微動效,整體視覺效果還算滿意。
踩過的坑
1. iOS Safari 的 -webkit-backdrop-filter
Safari 對 backdrop-filter 的支援需要加上 -webkit- 前綴,否則玻璃效果完全不生效。這個坑花了我一個晚上才發現。
2. Supabase RLS 政策
一開始設定 RLS 時漏掉了 food_calculation_cats 關聯表的 INSERT 權限,導致多貓關聯功能一直報錯。
修復方式:
1 | CREATE POLICY "Users can create their own food calculation cat associations" |
3. 手機上的按鈕點擊問題
在 iOS 上,如果按鈕太小或太靠近其他元素,點擊經常失靈。解決方案:
1 | <button |
4. PWA 安裝提示
iOS 不支援原生的 beforeinstallprompt 事件,需要自己做一個提示 UI,引導用戶使用 Safari 的「加入主畫面」功能。
資料庫設計
1 | ┌─────────────┐ ┌─────────────────────┐ |
使用多對多關聯表 food_calculation_cats 來處理「一筆計算記錄可以關聯多隻貓」的需求,比起在 food_calculations 裡存 cat_ids JSON 陣列更乾淨。
未來規劃
目前 Cat-Raising 完成了 MVP 階段,主要功能都已實作。第二階段規劃包括:
P1 高優先級:
- 健康記錄管理(疫苗、醫療、體重追蹤)
- 飲食日記系統
P2 中優先級:
- 智能提醒(餵食、用藥、健檢)
- 支出管理
- 庫存追蹤
P3 低優先級:
- 數據分析儀表板
- AI 建議系統
結語
做 Cat-Raising 最大的收穫是:解決自己的痛點是最好的專案動力。
現在每次買新貓糧,我就打開手機輸入成分,幾秒鐘就知道這款貓糧的營養品質如何。不用再手動算乾物質,不用再對照標準表,一切都自動化了。
專案已開源,歡迎參考:
- 線上 Demo:部署在 Vercel 上
- 技術棧:Next.js 14 + Supabase + Tailwind CSS
- 完全免費:在免費額度內可支援約 1,000-2,000 活躍用戶
希望這篇開發筆記對想做寵物科技應用的開發者有所幫助!
🐈 願每一隻貓咪都能吃得健康、活得開心。