🎮 拾光 · 控制中心

Cron audit dashboard · 5 agent 自動跑
尚未載入
Q&A 對照表 SOURCE OF TRUTH
章節 / 題型 / 搜尋 · 對照遊戲 sentence / question / 答案
Q&A 數據總覽 DECISION
即時計算 · 章節 / 單元 / 題數 + 題型佔比 (自動從 lessons-ch*.json 統計, 加章加題自動更新)
UI/UX 標準 v3.2 童話版
7 題型 + 2-col mobile · 禁 ✓ · 規則對齊修正 · UX 比例參考
🗺 Map 🐱 Profile ⭐ Tasks 📖 ×7 題型 +4
載入中…

🎯 一鍵指令 (複製 → 下次 session 貼)

🔬 架構建議 Architecture · 業界 2026 掃描

每次 cron 掃業界做法 → 分析 Pickup 適配 → 推薦是否改架構. 自動顯示最新一筆 (audit-file 驅動, 不再累積).
載入中…

🦉 Duolingo 痛點 → 拾光優化機會

2025 網路批評 + 教學弱點掃描。把它們的弱點變成拾光的差異化。✅=已是我們的設計 / 🔜=可加。 來源:autolingual review · TechCrunch AI backlash · Trustpilot · PR Daily。
① 句子隨機、無真實情境、不連貫 — Duo 被罵「背沒用的句子、字句隨機不成文」。
🟢 ROI 最高 ✅ 拾光對策:每章 = 一個完整童話故事 (桃太郎/灰姑娘…),句子都在劇情裡 → 這是我們最大差異化,行銷主打。
② 不解釋文法、學完不會自己造句 — Duo 主要靠翻譯,缺語境文法 → 無法自產句。
🟢 ✅ 對策:grammar-mc 貼原文語境 + 每題溫度中文解釋 + 新「外文打字」產出題 (看中文打英文)。可再加「為什麼」小註解強化。
③「新單字」其實早教過很多次 — Trustpilot 常見抱怨。
🟡 ✅ 對策:開場 2 節「真·沒學過的字」預習 + SRS 錯題庫。🔜 可強化:出題前查 vocab 已學表,別把學過的標成新字。
④ 翻譯不道地 / 有文法錯 — Duo AI 內容被批品質下降。
🟢 ✅ 對策:真人策劃 + 母語檢查;已上「回報問題」鈕 (B.466) 收使用者回饋 → 之後 cron 讀 pickup.reports 修。
⑤ 不教口說 / 真實對話 — Duo 最大教學缺口。
🟡 ROI 中 🔜 對策:speak-back 題型 schema 已存在但未鋪題 → 可鋪「跟讀奶奶」口說練習 (用 Web Speech 辨識,免費起步)。
⑥ 過度遊戲化、streak 壓力大、學習淪次要 — 連勝焦慮被詬病。
🟢 ✅ 對策:兒童非懲罰式設計 (force-correct + blindRetry, 無死亡), 體力友善可補。保持遊戲化輕量、學習優先。
⑦ AI-first 品質降 + 隱私疑慮 (2025 大反彈) — 用戶不滿淪 AI 訓練資料。
🟡 ROI 中 (行銷) 🔜 對策:打「真人奶奶溫暖策劃、不拿小孩資料訓練 AI」當對外差異化文案,接 Duo 出走用戶。

🖼️ 待生圖片 (8 個一批)

用 ChatGPT/Gemini 生圖。每批點「複製」貼進去。同角色不同姿勢/裝扮:每批先貼「一致性鎖」再貼該批 8 句,確保是同一隻不會變形。生完去背 (rembg) 放 public/mascots/。
🔒 一致性鎖 (每批最前面先貼這段)
Studio Ghibli 暖色手繪 isometric chibi 貼紙風: 大頭小身、純色塊「無黑邊」、軟陰影、坐/站在白色圓角小平台上、奶油底 #fef8ed、暖色調 (橄欖綠 #7d9a4f / 赤陶 #c84a3a / 琥珀 #e7a44a)。整組角色必須「完全一致」: 同一張臉、同比例、同配色,只換姿勢/表情。輸出透明背景 PNG。
批次 1 — Mochi 三花貓 ×8 表情
角色: Mochi = 三花貓, 白底配橘+黑斑塊, 圓圓綠眼, 粉紅小鼻, 害羞但勇敢。生 8 張同一隻不同姿勢:
1) 端正坐著微笑 (idle)  2) 開心跳起來  3) 歪頭思考 (爪抵下巴)  4) 難過耳朵垂下
5) 蜷著睡覺  6) 揮手打招呼  7) 趴著看一本小書  8) 灑彩帶慶祝
批次 2 — Hana 柴犬 ×8 表情
角色: Hana = 柴犬, 米黃毛, 捲尾, 溫和笑臉。生 8 張同一隻不同姿勢:
1) 坐著搖尾  2) 趴著專心聽  3) 奔跑  4) 開心吠叫  5) 想睡  6) 歪頭好奇  7) 玩耍  8) 歡呼加油
批次 3 — 奶奶 ×8 表情
角色: 奶奶 = 慈祥老奶奶, 灰髮挽髻, 圓框眼鏡, 柔軟針織衫, 溫暖笑容。生 8 張同一人不同姿勢:
1) 坐椅子翻開書說故事  2) 揮手  3) 微笑特寫  4) 輕輕指方向  5) 端茶  6) 拍手  7) 思考  8) 揮手道晚安
批次 4+ — 章節場景卡 (painterly Ghibli, 非 isometric)
場景背景用「painterly 宮崎駿水彩」風 (不是 chibi, 因角色不在場景內), 暖色氛圍, 16:9。每章一張:
ch1 桃太郎=春日河邊大桃漂來 / ch2 醜小鴨=蘆葦池塘 / ch3 龜兔=賽道森林 / ch4 駱駝=金黃沙漠 / ch5 Baba Yaga=雞腳屋暗森林 / ch6 六天鵝=城堡夜空 / ch7 葉限=池塘紅鰭魚 / ch8 三隻小豬=磚草木三屋…(依 storyRegistry 補完)
批次 5 — 英檢看圖題圖卡 (picture-mc, 配 YLE/GEPT spec)
用途: YLE 看圖辨字 + GEPT 看圖辨義 (picture-mc) 的圖。風格照既有 isometric chibi/Ghibli 暖色標準, 單一主體置中, 透明底, 1:1, 光從左上。每批 8 張同主題:
批 A 日常名詞: cat / dog / bus / sun / book / apple / ball / house
批 B 動作 (現在進行式): reading / eating / running / sleeping / jumping / drinking / writing / playing
批 C 位置介系詞: ball under table / on table / in box / behind door / next to chair / between books
命名: exam-pic-.webp (e.g. exam-pic-cat.webp)。對應 picture-mc 的 imageUrl 欄。
spec: docs/standards/2026-06-29-cambridge-yle-item-spec.md + 2026-06-29-gept-item-spec.md

📌 一次性 Todos

🚩 回報處理 SOP (待玩家 + DB 後啟用)
回報鈕已上 (B.466), 暫存 localStorage pickup.reports。等有玩家 + 後端後:cron 定期讀回報 → 逐筆檢查並修題;同一題多人回報 → 列出來給作者決策 (要不要改/接受答案)。目前無玩家無 DB, 先擱置。
設定一次永久解決,跟「定時稽核」的急修不同性質的基礎建設任務
🎨 Claude Design 工作流 — UI/設計系統迭代 (非插圖)
是什麼: claude.ai/design — AI 畫版面/元件/tokens, 雙向 /design-sync 接 Claude Code 需要: Pro/Max 訂閱 + Claude Code v2.1.181+ 不是: 不生吉祥物/實物插圖 (那走 ChatGPT/Gemini)
  • Claude Code 跑 /design-sync → pull Pickup 設計系統 (tokens + ui/components) 進 Claude Design
  • canvas 上設計新 surface (英檢入口 / 連勝 / 地圖 v2) — 用真元件
  • Export →「Send to Claude Code」→ handoff bundle → 對真元件庫落地
  • 實作完 /design-sync push 回 canvas (雙向同步)
  • 先挑一個小 surface 試跑整輪, 再決定擴大
🔊 Ch25-33 奶奶語音 MP3 批次 — ARCH-REC #90 (需 OPENAI_API_KEY)
來源: 2026-06-28T1212 content-qa audit P0-1 (最高 ROI) 現況: CHAPTERS_WITH_MP3=Set([1]) — Ch25-33 (含英檢) 的聽力題全靠 WebSpeech fallback (iOS Safari 不穩) 成本: ~$1 OpenAI TTS · 各章 unique 句子 (djb2 dedup) 風險: 中 (空改 set 會 404, 必須先產真檔)
  • 在有 OPENAI_API_KEY 的環境 (本機 .env 或 shell)
  • node tools/generate-grandma-audio.js 25 … 一路到 33 (djb2 dedup, idempotent 可重跑)
  • 確認 public/audio/lessons/ 多出該批 MP3
  • 產完才src/audio/tts.ts CHAPTERS_WITH_MP3Set([1,25,26,27,28,29,30,31,32,33])
  • npm run build 綠 → commit + deploy
📄 audit
🔑 永久 token 設定 — 從此 deploy 不卡 infisical login
影響: wordwar + cheng.robot 預估: 10 min 風險: 低 頻率: 一次
  • infisical dashboard 建 desktop-deploy Machine Identity
  • 配 Universal Auth method, TTL=0 (永久)
  • 創 Client Secret, copy Client ID + Secret 到 1Password
  • wordwar + cheng.robot project 各 Add Identity
  • PowerShell admin 設 2 條 SetEnvironmentVariable
  • 新 PowerShell echo $env:INFISICAL_UNIVERSAL_AUTH_CLIENT_ID 驗證
  • 跑 deploy 測試一次,跟 Claude 報「永久 token OK」
📄 完整 doc 🔗 infisical dashboard
🗄️ 後端啟用 — 程式碼已 ship (B.308),剩你外部 provision
程式碼: ✅ P1-P4 全寫完 (functions/ + D1 schema + 前端 client) 你要做: ~20 min (P1+P2) 風險: 低 (沒接好前 app 照常)
  • P1+P2 (作弊堵死,先做這個):
  • wrangler d1 create pickup-db
  • wrangler d1 execute pickup-db --remote --file=migrations/0001_init.sql
  • CF dashboard → Pages → pickupwords → Settings → Functions → D1 database bindings:Variable name = DB 選 pickup-db(用 dashboard 綁,別寫 wrangler.toml 假 id — 會讓 deploy 掛)
  • 同頁 Variables and Secrets:設 JWT_SECRET(任意長隨機字串)
  • 重新部署 → 開 app 自動領匿名帳號 + 上推進度;換裝置驗證同步;改 localStorage 重開被洗掉 = 作弊堵死
  • P3 (家長 email,選):RESEND_API_KEY + 驗證寄信網域
  • P4 (金流,上架時): Stripe → STRIPE_SECRET + STRIPE_WEBHOOK_SECRET + webhook 指向 /api/iap/verify;Apple → IAP 商品 + APPLE_SHARED_SECRET
📄 設計 doc 🔗 CF dashboard
🌐 多語版本 — 5 語言完整 ✅ (繁/簡/英/日/韓 UI+內容);剩日韓 TTS
已 ship: B.393 統一語言 + B.394 onboarding + B.395 5語UI+簡中 + B.396-410 日韓內容 下一步: 日/韓 TTS (選);真帳號接後端 (待 D1) 分析: 2nd 日文 (童話+Ghibli+読み聞かせ 資產複用最高) · 3rd 韓文 (人均英語教育花費全球第一) · 簡中 (繁→簡近零成本) 已完整
  • 統一語言 (B.393): 題目畫面 prompt 全進 i18n,跟著語言走
  • 初始流程 (B.394): 初始畫面 → 登入/註冊 (本地) → 語言 → 程度 → 完成;品牌化載入畫面
  • 5 語言 UI (B.395): 繁中/簡中/英/日/韓 — 介面字典全到位 (日韓真人翻譯),onboarding + 設定可選
  • 簡中完整 (B.395): opencc 執行時繁→簡,UI + 全部題目內容 (句/解說/選項/單字卡) opencc 執行時自動轉簡 — 含新增的英檢章也自動涵蓋,永遠同步、零內容檔。t2cn lazy-load (只簡中用戶抓 38KB)
  • 日/韓題目內容 (B.396-410): 故事章 (ch0-31) × 日韓 = 64 overlay 翻完 (真人);英檢章 ch32-33 日韓 overlay 已補 (native 語氣潤飾, 對齊真人範本)。overlay 架構 (lessons-i18n/) 母檔不動、漸進可擴
  • App Store 上架: 一個 app + 商店頁分語言在地化 (非多 app)。5 語言商店文案範本已備 → docs/marketing/app-store-listings.md,App Store Connect 直接貼
  • 日/韓 TTS: 題目解說語音 (現只英文句 + 中文 WebSpeech)
  • 真帳號接後端: onboarding 本地帳號 → 接 B.308 anon-account/sync (待 D1 provision 後)
🔔 站外提醒 (真實 push 通知) — 以後再做
B.311 砍掉舊「Mochi 通知」(只是站內 toast, 非站外) 預估: 中 相依: 需 PWA push / Capacitor 原生通知
  • 目標:app 關著時也能提醒「奶奶今晚的故事在等你」(真站外 push)
  • web:PWA Service Worker Push API + VAPID key + 後端排程發送 (接 D1 後)
  • iOS:Capacitor 原生 local/push notification (上架後)
  • copy framework 舊稿在 git 歷史 (B.311 砍的 src/notifications/copy.ts) 可參考
📄 後端 doc (排程發送靠 D1)
📱 平板 UI/UX + 橫屏 (landscape) — 以後做
per user 2026-06-16 預估: 大 相依: 手機版 layout 穩定後
  • 偵測 tablet / 寬螢幕 → landscape 版面 (地圖 + lesson 兩欄或置中加寬)
  • lesson 橫屏: 圖片槽放左、選項放右 (利用寬度)
  • 地圖橫屏: 路徑加寬 / 多欄, 不要只置中一條
  • 沿用手機版「完全符合螢幕、不外溢」規則 (B.315) 套到平板尺寸
  • 測 iPad Safari + Android 平板 + 橫豎切換不破版
📄 UI/UX 標準
🎧 Capacitor 原生音訊 — 外部音樂混音 + 題目語音不壓 — 上架時做
per user 2026-06-18 預估: 小-中 相依: Capacitor iOS shell (Phase 2.5)
  • 目標:玩家自己耳機的音樂 + app 同時播,且題目語音 (TTS) 絕對不被壓低(鐵則 #5)
  • iOS: AVAudioSession category .ambient + .mixWithOthers → 不中斷外部音樂
  • 但題目語音播放時要全音量蓋過(或短暫 duck 外部音樂),BGM 可降(現有 duckBgm 已只降 BGM)
  • web 端現況:設定可關 BGM 讓外部音樂播(已做 B.329);完整混音是原生才有
  • Android: AudioManager focus gain transient-may-duck 對應設定
📄 音訊鐵則 #5
🤖 啟用 cron 自動修(全部安全的都修,剩下分隔報告)
地基已就緒(護欄+分級+prompt) 你做: 1 步 風險: 中(內容改寫也自動上;但過 build+答案不變才上)
  • 已備好:tools/check-answer-index.cjs(答案位置防竄改護欄)+ docs/standards/auto-fix-tiers.md(分級+gate)
  • 啟用步驟:複製下面 prompt → 貼到 claude.ai/code/routines 的「content cron」routine,取代原本「只寫 audit」的 prompt
  • 全部修:Tier A 機械式 + Tier B 內容改寫,只要過 build + 答案不變就自動修+merge
  • 剩下分隔出來:Tier C 結構/判斷 + 任何沒過 gate 被還原的 → 不自動改,寫 audit + Telegram 逐條列給你看
  • 只動 lessons、碰正解/schema/標準 = 禁;想保守回 Tier-A-only:prompt 第 4 步加「只 Tier A」
📄 分級+prompt
🔄 2026-06-09 React Native Pivot
6 個跟 Web/DOM/Phaser/Web Audio 強綁的項目已搬到 📦 archive →。仍適用但實作要換棧的項目加 ⚠️ 標籤。