尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Bonbon & 馬米親子 Podcast《車車遊樂園》的官方 看圖聽故事 網站。 面向 學齡前~低年級 親子:每集音檔 + 黏土風插圖翻頁 + 逐字字幕 + 網頁小遊戲(純 Podcast 做不到的互動層)。產品路線見 TODOS.md — 產品路線圖。 public/stories/、public/characters/ 內音訊與插圖禁止再散布(見授權與免責)。 • Next.js 16 App Router、React 19.2 stable、TypeScript strict、CSS Modules(無 Tailwind) • 以 SSG 預渲染 為主;少數 Route Handler(許願/email 訂閱 API,可選 Neon Postgres) • Vitest 單元測試 + Playwright E2E • 部署:Vercel(@vercel/analytics)查看完整 README ↗
Bonbon & 馬米親子 Podcast《車車遊樂園》的官方 看圖聽故事 網站。
面向 學齡前~低年級 親子:每集音檔 + 黏土風插圖翻頁 + 逐字字幕 + 網頁小遊戲(純 Podcast 做不到的互動層)。產品路線見 TODOS.md — 產品路線圖。
| 正式站 | podcast-website-mu.vercel.app |
| 版本 | 1.3.0 |
| 待辦 | TODOS.md |
| 設計 | DESIGN.md · RESEARCH.md |
| 儲存庫 | GitHub(程式碼 MIT) |
| 授權 | MIT · /legal · DISCLAIMER.md |
public/stories/、public/characters/內音訊與插圖禁止再散布(見授權與免責)。
@vercel/analytics)| 區塊 | 路由 | 說明 |
|---|---|---|
| Landing Hub | / | Storyline 式四段 scroll-snap 入口(故事/睡前/黏土/衛教) |
| 全部故事頁 | /stories | 靜態殼+client 篩選 island;最新集 Hero、收藏區、車種/主題篩選(?vehicle=、?tag=,可分享) |
| 故事詳情 | /story/[slug] | SEO 落地頁、分享、收藏、訂閱收聽 CTA、ShowNotes、親子延伸、完播反思、地圖島徽章 |
| 播放器 | /story/[slug]/play | 全螢幕翻頁、逐字字幕、進度條、字幕字級;插圖 AVIF → WebP → JPG;音訊 preload="none"(Range 隨播) |
| 逐字稿 | /story/[slug]/transcript.vtt | 完整音檔逐字稿 WebVTT(來自 data/subtitles/,非翻頁場景字幕;無障礙/GEO) |
| 新集通知名單 | /subscribe | 家長 Email 登記(目前只收名單、不寄新集上線信;未設 DB/寄信時引導至收聽平台) |
| 主題 | /topic、/topic/[tag] | 主題索引與分類頁(SSG + FAQ schema) |
| 車種 | /vehicles/[vehicle] | 車種分類頁(SSG + GEO FAQ) |
| 宇宙地圖 | /adventures | 五島滿版海洋、pan/zoom/fly-to(點島飛抵島心、再點同島回全景)、島上探索點 /adventures/[zone]/[hotspot]、漫遊 NPC、?zone= deep link |
| 角色圖鑑 | /characters | data/characters.json 定裝照與出場故事 |
| 親子遊樂地圖 | /for-parents/play-map | 靜態殼+PlayMapClient island;主瀏覽為 22 縣市磚牆+分組名單(首屏不掛 Leaflet),地圖為已選縣市/附近後的 view=map 次要分頁;15 縣市景點、可分享篩選 URL、SSR 全台名單+ItemList |
| 家庭儀表板 | /for-parents/dashboard | 本機 localStorage 收聽/遊戲摘要(不上傳) |
| 小遊戲 | /games | 著色本為第一站,與街機兩款同園;遊戲資產按需預載 |
| 節目數據 | /studio | 製作團隊專用(noindex、不在 sitemap);含待生圖佇列 |
| 關於/法律 | /about、/legal | 關於我們+給家長的常見問題(FAQPage、代表性集數)、使用條款;舊 /for-parents 永久轉址到 /about |
| RSS | /feed.xml | Podcast feed(含 Podcasting 2.0 擴充) |
| PWA | 、 |
data/games.ts)| 路由 | 名稱 | 備註 |
|---|---|---|
/games/block-drop | 繽紛樂園 | 落下方塊消除(GameKit) |
/games/candy-match | 繽紛消消樂 | 關卡地圖 + 消除棋盤(GameKit) |
/games/coloring-book | 繪本著色 | 定裝/場景線稿著色(不掛 GameKit);線稿:npm run generate:coloring-lineart;封面:npm run generate:coloring-cover |
GameKit 跨遊戲進度(星星、獎牌、車庫)見 GAMEKIT-ARCHITECTURE.md。
npm install
npm run dev
| 指令 | 用途 |
|---|---|
npm run dev | 開發伺服器 |
npm run build | 正式建置(prebuild 自動跑 generate:llms-full) |
npm run start | 執行建置結果 |
npm run lint | ESLint(零 warnings) |
npm run typecheck | TypeScript strict 型別檢查 |
npm test | Vitest 單元測試 |
npm run test:e2e | Playwright E2E(自動 build/啟動 production server;不要先用 next dev 佔用 3000) |
npm run test:e2e:public | 上線 gate:public smoke + public axe(CI build-and-public-e2e) |
npm run test:e2e:ci | 兒童主路徑 e2e(smoke/a11y/地圖/遊戲/訂閱/UX-P1-5 觸控;CI e2e-child-path;不含 visual) |
npm run test:visual | D2 視覺回歸(預設 skip;本機 pre-push 工具,刻意不進 CI。見 test:visual:trusted) |
npm run test:visual:trusted | 設 VISUAL_BASELINE_TRUSTED=1+VISUAL_FIXTURE=1 後跑 visual spec:用凍結資料(固定 6 集、12 個景點,見 lib/visual-fixture.ts)另外 build 到 .next-visual、跑在 3200 埠,上新集不會讓基準失效;伺服器不是 fixture build 時會直接停(<html data-visual-fixture>)。CI/Vercel 上開這個旗標會 build 失敗。基準於 2026-08-30 全面重錄(59 張;前一次 2026-08-24)。重產再加 -- --update-snapshots,並逐張人工目檢後才提交。有 pre-push 閘門(VIS-DEBT-3):動到 components//app/ 的 tsx/css 但零 baseline 變更會擋下 push;確認視覺真的沒動時用 SKIP_VISUAL_GATE=1 git push。npm install 會經由 prepare 自動把 core.hooksPath 指到 .githooks |
npm run check | 品質閘門:test + verify:episodes + verify:zone-art + verify:map-art + build |
npm run font:subset | 重新子集化中文字型(新增文案後) |
test:e2e 預設使用自己的 production server;若要重用已啟動的 production server,才明確設定 PW_REUSE_SERVER=1。
| 指令 | 用途 |
|---|---|
npm run sync:apple | 從 Apple Podcasts RSS 同步新集(見下方) |
npm run transcribe | whisper.cpp 本機轉錄字幕 → data/subtitles/<slug>.json |
npm run proofread:subtitles | 字幕 lint/fix/--mark(illustrate 前必做) |
npm run illustrate | OpenAI 切場景 + 生圖(需 OPENAI_API_KEY,CI 不生圖) |
npm run export:video | 靜圖匯出 1920×1080 mp4(docs/VIDEO-EXPORT.md)。會動的流程見 docs/VIDEO-GENERATE.md,片段 CLI 尚未落地 |
npm run verify:episodes | 對照 ep-9/ep-10 標準驗證集數接線 |
npm run verify:browse-index | 驗證 browse-index.json 與故事資料一致 |
npm run generate:story-blurs | 故事圖 blur placeholder |
npm run optimize:lcp-images | 預生成 landing/hero-home/故事全幕 WebP/AVIF(--verify 只檢查不寫檔) |
npm run generate:coloring-lineart | 由定裝/場景 JPG 產生著色線稿 PNG(演算法版;--only <id>/--kind/--verify) |
npm run generate:coloring-cover | 繪本著色 hero cover(黏土風 1448×1086 webp;寫入 public/.games-staging/<run>/,人工審後 --approve;需 OPENAI_API_KEY,CI 不跑) |
npm run generate:orange-express-art | 小橘特快車黏土封面(1536×1024)與小橘透明貼紙(另做 sm/);寫入 public/.games-staging/orange-express/<run>/ 並出併排審稿圖與封面裁切審稿圖,人工審後 --approve(一併改 data/games.ts 封面、art.ts 貼紙路徑、寫 SOURCES.md);--only cover|sticker 只生一張、--dry-run 只印 prompt;需 OPENAI_API_KEY,CI 不跑 |
npm run generate:coloring-ai-lineart | AI 重生著色線稿(images.edit+定裝 ref;character/scene 分流 prompt;gate 含構圖 edgeIou;寫入 public/.coloring-staging/<run>/,人工審 contact sheet+清單後 --approve <id> 才上線;硬閘 16 calls/run,需 OPENAI_API_KEY,CI 不跑) |
| 指令 | 用途 |
|---|---|
npm run verify:zone-art / verify:map-art | 驗證島嶼/地圖美術資產契約 |
npm run generate:map-art / generate:forest-zone | AI 生地圖/森林島美術 |
npm run generate:roamer-assets | 漫遊 NPC 精靈 |
npm run generate:llms-full | 手動重生 public/llms-full.txt |
npm run migrate | 執行 DB migration(scripts/migrations/) |
本 repo 用 Meta + Domain 兩層規範 AI agent 分工。一般 chat 不會自動派子 agent;只有打出 slash command 才進入編排模式。
| 指令 | 用途 | 指令檔 |
|---|---|---|
/agent-plan | 依 L2/L3 風險分級規劃;必要時安排工程、設計或對抗審 → Approved Plan(預設不實作) | .cursor/commands/agent-plan.md · .claude/commands/agent-plan.md |
/agent-action | 依 Plan Task 派工 → 整合 → Verify →(可選)Ship | .cursor/commands/agent-action.md · .claude/commands/agent-action.md |
收尾依風險列出 Agent 執行分配表: L0/L1 可省略;L2/L3 列實際 agent、model slug、產出與狀態。
| 文件 | 內容 |
|---|---|
| docs/AGENT-WORKFLOW.md | Meta:模型分工、L0–L3、Plan 模板 |
| docs/AGENT-DOMAIN.md | Domain:紅線、驗證矩陣、Protected paths |
| docs/AGENT-FAILURES.md | 目前模型呼叫協議與未解除記錄;歷史案例見 docs/archive/AGENT-FAILURES-2026.md |
適合 Vercel、Netlify 等靜態/Edge 平台。
Production 請設定:
NEXT_PUBLIC_SITE_URL=https://你的網域
用於 Open Graph、RSS、canonical 與站內絕對連結。未設時 production fallback 到 lib/site-url.ts 的 CANONICAL_SITE_URL。
| 變數 | 用途 |
|---|---|
NEXT_PUBLIC_SITE_URL | 站點 canonical URL(必填於 production) |
NEXT_PUBLIC_AUDIO_BASE_URL | 可選的公開音檔 CDN/物件儲存 origin;未設定時 fallback 至 /stories/。外部 origin 須支援音檔 Range request;跨網域播放請允許本站來源(會員私有音檔不在本輪) |
DATABASE_URL | 樂園許願 + email 訂閱 + 站內留言牆(Neon);未設則許願→mailto、訂閱→#connect;/feedback 仍 200 且表單可填,送出失敗才顯示 mailto 備援 |
FEEDBACK_MODERATION_SECRET | /studio/feedback 審核密語(server-only)。未設則後台顯示提示、審核 API 503。不要加 NEXT_PUBLIC_ |
UPSTASH_REDIS_REST_URL / UPSTASH_REDIS_REST_TOKEN | 公開表單與審核登入的分散式節流;production 未設時 POST/登入 fail-closed 503,GET 牆仍可空狀態 |
RESEND_API_KEY / SUBSCRIBE_FROM_EMAIL | 名單確認信(只用來驗證信箱;目前不寄新集上線信);任一未設時訂閱 API 安全降級為不可用 |
OPENAI_API_KEY | 僅本機 illustrate/地圖資產生成;CI 不放 |
SENTRY_DSN / NEXT_PUBLIC_SENTRY_DSN | 可選錯誤上報。瀏覽器走 @sentry/browser(無 BrowserTracing);未設則不上報 |
SYNC_ISSUE_* | GHA 同步後 GitHub Issue 通知(見 .env.example) |
完整說明見 .env.example。
Neon/DATABASE_URL 為選配。未設定時不需要執行 migration;許願與 Email 訂閱維持降級,/feedback 表單仍可填(送出失敗時才出現 mailto 備援)。啟用資料庫時依序跑:
npm run migrate -- 005_legal_consent_audit.sql(家長同意政策版本)npm run migrate -- 006_feedback_messages.sql(留言牆)舊資料不回填、不推定同意版本。審核後台另需 FEEDBACK_MODERATION_SECRET。
SoundOn 新集: 多數由 Apple Podcasts 自動同步 每日上架(
ep-Nslug、pageCount: 1)。以下為手動在manualStories新增完整繪本時使用。
public/stories/<slug>/(slug 英文小寫,與網址一致;現階段同步/轉錄仍以此為 staging source)audio.mp3、01.jpg(多頁:02.jpg…);公開音檔上線後可由 NEXT_PUBLIC_AUDIO_BASE_URL 將瀏覽器/RSS 指向外部 origindata/stories.ts — 在 manualStories 加一筆(pageCount 與插圖張數一致)npm run optimize:lcp-images(為每張 NN.jpg 產同名 .avif/.webp;播放頁 <picture> 依序採用)npm run font:subsetnpm test && npm run buildslug 與資料夾名稱一致audio.mp3 可播放、01.jpg 存在NN.jpg 有同名 .avif/.webp(npm run optimize:lcp-images -- --verify)ep 為目前最大集數 + 1pageCount 與插圖張數一致/feed.xml 含新集/studio)製作團隊專用,不在首頁曝光;頁尾極小字「節目數據」或書籤 /studio。noindex,不在 sitemap。
| 檔案 | 用途 |
|---|---|
app/studio/page.tsx | 節目數據中心 |
lib/studio/platforms.ts | 各平台後台 URL(含 SoundOn,不進公開 ConnectHub) |
components/studio/EngagementMetricsPanel.tsx | 本機 localStorage 互動驗收 |
components/studio/IllustrationQueuePanel.tsx | 待生圖佇列(catalog pageCount=1) |
data/illustration-queue.json | 生圖佇列 overlay(本機 notify/--approve 寫入) |
官網與 SoundOn 不會自動連動;管線只讀 Apple Podcasts 公開 RSS(iTunes Lookup,無需 API key)。
| 檔案 | 用途 |
|---|---|
data/apple-synced.json | sync 腳本追加的新集 metadata |
data/apple-sync-state.json | 已處理 RSS guid,以及每一集的 metadata/封面/blur/字幕進度 |
data/apple-sync.defaults.json | 新集預設;overrides.<slug> 可覆寫單集 |
data/browse-index.json | 車種/主題關鍵字推斷(CI 會 commit) |
每日 GHA 上架框架:
public/stories/ep-N/audio.mp3 + Apple 封面 01.jpgpageCount: 1(單圖 MVP);摘要自動去 SoundOn 尾註transcribe-backfill workflow 之後補,同一集失敗 3 次才開 issuestory-zones、reflection-prompts、story-dates、episode-faqs 四個 sidecar 一起補齊;封面 blur 與音檔長度在驗證前寫入。FAQ 先產生可驗證的 MVP stub,之後由人工依劇情改寫npm run sync:validate、再推上固定分支 sync/apple。驗證只查同步產物,不跑全站 npm test 或 npm run build。同一類失敗連續兩次才開一張 Issue。job 不等 CI;看門狗盯還沒合入的 PR,以及 RSS 有、站上還沒有的集數npm run sync:apple -- --dry-run # 預覽不寫檔
npm run sync:apple # 實際同步
Workflow: .github/workflows/sync-apple-podcast.yml(repository_dispatch 準時觸發 + cron 後備)、.github/workflows/sync-watchdog.yml(RSS 逾時告警)。
GitHub 內建
schedule為 best-effort,常延遲。要準時請用外部 cron 打repository_dispatch(sync-now/watchdog-now),設定見下方舊版說明或 workflow 註解。
| 情況 | 行為 | Issue label |
|---|---|---|
| GHA 同步新集並 push 成功 | 開「待生圖」Issue;若看門狗已開 RSS stale,改那張單、不另開第二張 | illustration |
本機 npm run sync:apple 繞過 Actions 直接 push | 不會自動開單,push 後須另跑 npm run sync:notify(同上,會升級已開的 stale) | illustration |
RSS 有新集、仍在等第一次 sync/合入(預設 ≥8h;yaml STALE_HOURS=3 不提早開單) | 看門狗靜默 | — |
| RSS 逾時仍未上站(超過等待窗,且 sync 沒在跑) | 看門狗開告警;上站後由 notify-live 改成待生圖 | sync-alert + sync-stale-rss |
| 單次 CI 失敗 | 細節在 Actions logs;workflow 失敗另開 sync-job-failure(與待生圖分開) | sync-job-failure |
本機務必先 git push 成功,再跑通知(走與 GHA 相同的 notify-live 路徑,去重不重開)。
Issue 文案會寫「MVP 已上線」——若尚未 push 就 sync:notify,會開出站上還沒有的假「已上站」單。
git push # 必須先成功
npm run sync:notify # 讀本次 sync report,為新 ep-N 開/去重「待生圖」Issue
npm run sync:notify:reconcile # 可選:另掃現有 catalog 補漏(最多 3 筆,跳過已存在 open/closed 同標題單)
SYNC_ALERT_DRY_RUN=1 npm run sync:notify # 只印出將執行的 gh 動作,不實際開單(可先預覽)
gh auth login;未登入或 API 失敗時 fail-soft(不會讓指令當掉,只印警告與提示),可加 --strict(如 tsx scripts/sync-alert.ts notify-live --strict)讓有待生圖卻全數失敗時 exit 非 0,方便腳本化檢查。npm run sync:apple 偵測到新集時,收尾會印出「push 後請跑 npm run sync:notify」的提醒(--dry-run 不會印此區塊)。SYNC_REPORT_PATH 未設時本機預設寫入 .cache/sync-run-report.json(已 .gitignore);GHA 設定 SYNC_REPORT_PATH 時優先採用,workflow 不受影響。請在 repo 根目錄執行 npm run sync:notify(與 sync:apple 相同 cwd)。report.dryRun === true、report 已超過 24 小時(stale)、或 report 的 gitHead 不是目前 HEAD 的近期祖先時,sync:notify 會拒絕開單。GHA/本機都是先寫 report 再 commit,因此 gitHead 會是 parent——這算合法,避免用過期/錯分支的結果誤發通知。app/
page.tsx Landing Hub(四段 scroll-snap)
stories/page.tsx 全部故事頁
story/[slug]/ 故事詳情 + play 播放器 + transcript.vtt
adventures/page.tsx 車車宇宙地圖
characters/page.tsx 角色圖鑑
for-parents/ dashboard + play-map + articles(親子指南已併進 about)
subscribe/page.tsx 新集 email 訂閱
games/ 街機兩款 + 繪本著色
topic/、vehicles/ 主題/車種索引
studio/、about/、legal/ 數據中心、關於、條款
api/zone-wish/ 許願 API(可選 Neon)
api/subscribe/ email 訂閱 API(可選 Neon)
feed.xml/、robots.ts、sitemap.ts
components/
landing/ Landing Hub、頂欄、嘟嘟吉祥物
universe/ 地圖、島嶼、ZoneSheet、漫遊者
games/ 遊戲 shell、canvas 與共用 GameKit 元件
story/ ShowNotes、反思提問、親子延伸、島徽章
home/ /stories 區塊渲染
studio/、for-parents/、decor/
data/
content.ts Story 查詢 API(合併手動 + Apple + sidecar)
stories.ts 手動維護集(完整繪本)
apple-synced.json GHA 同步集
characters.json、scenes/、subtitles/
playgrounds.ts 親子景點(Zod 契約在 playgrounds.schema.ts,僅測試/CI)
universe.ts、universe-zones.ts 地圖五島(Zod 契約在 universe.schema.ts,僅測試/CI)
reflection-prompts.ts、family-activities.ts、parent-guides.ts
hooks/ 遊戲、地圖、無障礙、家長儀表板 hooks
lib/
gamekit/ 遊戲 runtime、進度、React hooks
universe/ 地圖美術、deep link、OG
story-geo.ts、for-parents.ts GEO/家長端 resolver
story-play-image.ts 播放頁插圖 AVIF/WebP 路徑與 CACHE_STORY idle 清單
sentry-client.ts 瀏覽器 Sentry 輕量 init
progress-store.ts localStorage 收藏、繼續收聽、遊戲進度
platform-utm.ts 收聽平台外連 UTM 歸因
zone-wish-*.ts 許願 schema/DB/rate limit
subscribe-*.ts 訂閱 schema/DB/rate limit
scripts/
sync-apple-podcast.ts Apple RSS 同步
transcribe.ts、illustrate.ts
generate-llms-full.ts GEO llms-full 生成
verify-*.ts 集數/索引/地圖資產驗證
lib/ apple-rss、illustrate-core、subtitle-proofread 等
docs/ 見下方「文件索引」
public/
stories/<slug>/ 每集音檔與插圖
adventures/ 地圖/島嶼/漫遊者資產
characters/、landing/、games/
llms.txt、llms-full.txt
.cursor/、.claude/ Agent slash commands 與規則
架構分層慣例:data/*.ts(型別+常數+*.test.ts)→ lib/*-query.ts(resolver)→ components/<area>/ + CSS Modules。
npm run transcribe)逐字字幕在側車檔 data/subtitles/<slug>.json,由 whisper.cpp 本機轉錄(音檔不外送)。播放器有側車檔即自動套用;否則回退 captions/captionTimes。
brew install whisper-cpp
mkdir -p models && curl -L -o models/ggml-large-v3.bin \
https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v3.bin
npm run transcribe -- ep-7 # 指定集
npm run transcribe -- --all # 全部有 audio.mp3 的集
草稿必校對(illustrate 前必做):docs/SUBTITLE-PROOFREAD.md
npm run proofread:subtitles -- ep-N --mark
字幕轉錄在 transcribe-backfill workflow。本機 npm run sync:apple 仍可在有 whisper 時順便轉錄;SKIP_TRANSCRIBE=1 會跳過、不中斷。
npm run illustrate)讓 pageCount:1 的集數依台詞自動產生黏土風插圖系列。播放器依 captionTimes + pageCount 換圖,不改播放器。
唯一需 OpenAI API 的付費功能;本機手動、人工審圖後才上線。
標準範本: ep-9、ep-10。驗證:npm run verify:episodes。
OPENAI_API_KEY=sk-... npm run illustrate -- ep-9 --segment-only # 只切場景
OPENAI_API_KEY=sk-... npm run illustrate -- ep-9 # 生圖到暫存
open public/.illustrate-staging/ep-9/contact.html # 審圖
npm run illustrate -- ep-9 --approve # 上線
npm run optimize:lcp-images # 為新 JPG 補 AVIF/WebP
| 旗標 | 作用 |
|---|---|
--segment-only | 只產 data/scenes/<slug>.json |
--scene N | 重抽第 N 幕(付費;agent 須先列幕號等人確認,禁止自行連抽) |
--approve | 暫存 → public/ + 寫接線 |
角色名冊 data/characters.json、定裝照 public/characters/、跨集一致性見 README 舊節或 EPISODE-WORKFLOW.md。
中文內文用自託管 jf-open 粉圓(huninn) 子集(app/fonts/huninn-subset.woff2),中文標題用 源泉圓體 TW Bold 子集(app/fonts/gensen-rounded-tw-bold-subset.woff2)。新增文案後:
curl -sL https://github.com/justfont/open-huninn-font/releases/download/v2.1/jf-openhuninn-2.1.ttf -o /tmp/huninn.ttf
curl -sL https://raw.githubusercontent.com/ButTaiwan/gensen-font/master/otf/TW/GenSenRounded2TW-B.otf -o /tmp/GenSenRounded2TW-B.otf
npm run font:subset
| 階段 | 重點 |
|---|---|
| STEM-P1 互動故事 | 完播反思提問、重訪量測(當務之急) |
| STEM-P2 實驗室 | 組裝車、斜坡物理、開放式探索 |
| STEM-P3 家長端 | /for-parents、家庭儀表板、共讀指引 |
| STEM-P4 商業化 | freemium + 家長訂閱 |
原則:玩不像作業 · 幼兒不競賽計時 · 家長信任與透明付費。完整條目見 TODOS.md。
| 文件 | 說明 |
|---|---|
| EPISODE-WORKFLOW.md | 單集全幕插圖標準流程 |
| SUBTITLE-PROOFREAD.md | 字幕校對 SOP |
| VIDEO-EXPORT.md | YouTube 整集影片匯出 |
| GAMEKIT-ARCHITECTURE.md | GameKit 分層與新增遊戲 |
| GAME-PERFORMANCE.md | 遊戲載入策略 |
| UNIVERSE-ART-BIBLE.md | 樂園地圖美術聖經 |
| FOR-PARENTS-DATA.md | 家長端資料盤點 |
| GEO-CONTENT-CONTRACT.md | GEO 內容欄位契約 |
| geo-checklist.md | GEO 上線後人工檢查 |
| metrics/README.md | 成長量測週報模板與 UTM 對照 |
| AGENT-WORKFLOW.md | Agent 編排 Meta |
| AGENT-DOMAIN.md |
| 文件 | 說明 |
|---|---|
| LICENSE | 網站程式碼 MIT |
| DISCLAIMER.md | 節目內容版權、禁止散布、建議年齡 |
| THIRD_PARTY_NOTICES.md | 字型與商標摘要 |
| /legal | 對外使用條款 |
Podcast 音檔、插圖、字幕與品牌內容屬 Bonbon & 馬米;未經書面同意禁止轉載、下載或散布。AI 插圖須人工審圖後才 --approve 上線。
manifest.jsonsw.js主畫面圖示;收藏、繼續收聽、遊戲進度、主題偏好(cheche:progress localStorage)。CACHE_STORY 只排 current±1 以外的 AVIF idle、不預抓整集 MP3;只快取完整 200(Range 206 不入庫,避免 Landing autoplay 壞掉)。維持 v6 |
| GEO | public/llms.txt、llms-full.txt | AI 引用語料(build 前 prebuild 自動生成 llms-full);robots.ts 分流檢索/訓練爬蟲 |
| Agent Domain 紅線 |
| proposals/ | 每週設計評審週報 |