Side Projects
點點百科 TapPedia

給 2-6 歲孩子的中英雙語認知百科。真實照片、中英名稱與語音導讀,部分物品另有示範影片、原生聲音與「草莓長在田裡」這類真實世界關聯頁。零廣告、零追蹤、不需註冊,網頁版免安裝直接用。Flutter Web 部署於 Cloudflare Workers,內容由自建 AI 產線(gpt-image、本機 MLX TTS、ComfyUI 影片)生成、人工審核後打包上 R2。
要解決的問題
2 到 4 歲的孩子正在詞彙爆炸期,看到什麼都想知道「這是什麼」。市面上的幼兒 App 多半是插畫、廣告或連續播放的影片,高品質的繁體中文幼兒多媒體內容也很少。點點百科想做的是一個家長陪著一起看的工具:用真實照片認識身邊的東西,再把畫面接回生活裡。
畫面截圖
主要功能
一屏一物,點物品本身
每個物品用一張真實照片佔滿畫面,點照片就播放名稱與一句童語描述,重複點立即重播。設計依據是幼兒研究:點目標物本身才有助於學詞彙,多餘的互動反而干擾。
中英雙語語音
每個物品都有繁體中文與英文名稱和語音導讀,可以切換著聽;播放時文字會跟著語音逐字變色。中文採用台灣家庭日常的說法。
真實世界關聯
部分物品有「長在哪裡」「用什麼做的」這類關聯頁,例如草莓長在田裡、爆米花是玉米做的,關聯可以一路連到另一個物品。
影片、3D 與猜猜看
部分物品另有示範影片或 3D 檢視,也有用剪影猜物品的小遊戲。素材缺席時按鈕直接隱藏,不顯示灰掉的按鈕,因為對幼兒來說那就像壞掉的玩具。
給家長的設計
家長入口要長按兩秒才進得去,裡面有使用說明與共讀建議;搜尋刻意不自動彈出鍵盤,孩子誤觸也只會看到一個可以關掉的面板。
零廣告、零追蹤
不需要註冊帳號,沒有廣告、內購、推播或分析套件,也不會建立孩子的瀏覽紀錄。網頁版免安裝,打開瀏覽器就能用。
技術架構
App 用 Flutter 寫,正式產品是部署在 Cloudflare Workers 上的 Flutter Web,官網則是不載入外部字型與 JavaScript 的純 HTML/CSS。內容不在使用者端即時生成,而是由自建產線預先產出、人工審核後才發布:主圖用 gpt-image 生成,語音導讀用本機 MLX 上的 TTS 模型,示範影片走 ComfyUI。打包腳本會驗證素材完整性、轉成 WebP 等出貨格式、以內容雜湊命名檔案,再連同版本化的 catalog 上傳到 R2。資料模型以物品為中心,名稱與描述原生多語系,並保留每個素材的 prompt 與生成參數,未來可以用更強的模型重新生成。
技術挑戰與取捨
讓 AI 產線產出對幼兒正確的內容
教育內容的正確性比什麼都重要,所以 AI 只當產線工具,使用者拿到的一律是預先生成、人工審核過的素材,打包腳本只收審核通過的物品。早期為了讓影片能演出「剝開」「咬一口」,把動作寫進主圖描述,結果番茄看起來像爛掉、橘子被挖掉一塊,食物包的前 10 張主圖有 5 張報廢。後來規則改成主圖一律呈現完整、乾淨、最典型的樣子,影片改為選配,要演動作時改選動作而不改主圖。生產也改成一次一個主題包、整包目視後才做下一包;找出三個系統性的 prompt 錯誤後,同一包接下來的 14 張就沒有再失敗。
關聯圖的主體必須和主圖一致
關聯頁是這個產品比點讀書更有價值的地方,但一開始的關聯圖常常畫成別的東西:狗的主圖是黃金獵犬,棲息圖卻生成柴犬;牛奶的「從哪裡來」只畫出牧場,畫面裡沒有牛。對正在學這個詞的 2 歲孩子來說,這會造成混淆。解法是把關聯圖 prompt 的主體綁定到主圖用的同一份描述,場景描述只負責環境,而且關聯的另一方必須寫進場景裡。沒有真實關聯的物品,例如馬桶或沙發,就不硬湊關聯。
Flutter Web 的載入與零外部連線
Flutter Web 的渲染引擎壓縮後仍有約 2 MB,而預設放在固定路徑,瀏覽器每次進站都得重新驗證。建置後處理把引擎搬到以內容雜湊命名的目錄,並產生對應的快取標頭,讓引擎可以長期快取,會改版的入口檔則維持每次驗證。為了守住不連第三方的承諾,網頁字型改用依實際內容產生的子集自行託管,3D 模型也不用需要從外部抓解碼器的壓縮格式。
現況
網頁版已在 app.tappedia.com 開放,全部內容免費、需連網使用;目前沒有上架 App Store 或 Google Play 的計畫,可以把網頁加到手機主畫面使用。
使用技術
- Flutter Web
- Dart
- Cloudflare Workers
- R2
- AI Pipeline
- MLX TTS
- ComfyUI


