[{"data":1,"prerenderedAt":1777},["ShallowReactive",2],{"blog:\u002Fblog\u002Fnuxt\u002Fai-assisted-claude-md":3},{"id":4,"title":5,"author":6,"body":7,"category":1760,"date":1761,"description":1762,"draft":1763,"extension":1764,"image":1765,"meta":1766,"navigation":137,"path":1767,"seo":1768,"series":1769,"seriesOrder":283,"seriesTitle":1770,"stem":1771,"tags":1772,"updatedAt":1765,"__hash__":1776},"blog\u002Fblog\u002Fnuxt\u002Fai-assisted-claude-md\u002Findex.md","AI 輔助開發與 CLAUDE.md","charles",{"type":8,"value":9,"toc":1724},"minimark",[10,14,18,34,37,40,44,49,52,67,70,81,84,87,114,187,191,196,220,224,332,336,394,398,496,498,502,506,509,512,532,536,547,555,635,639,642,710,714,842,844,847,850,856,860,866,960,964,967,1076,1078,1082,1086,1093,1118,1125,1145,1152,1185,1192,1220,1224,1231,1288,1295,1329,1336,1368,1375,1402,1404,1407,1411,1417,1423,1434,1439,1497,1501,1506,1510,1548,1550,1553,1556,1599,1601,1604,1641,1643,1646,1649,1652,1684,1687,1689,1692,1720],[11,12,13],"h2",{"id":13},"這篇要解決什麼問題",[15,16,17],"p",{},"AI 已經成為開發流程的重要夥伴，但 AI 不是萬能的。要讓 AI 真正幫上忙，你需要：",[19,20,21,25,28,31],"ul",{},[22,23,24],"li",{},"清楚的專案規範（CLAUDE.md）",[22,26,27],{},"結構化的知識系統（AI Skills）",[22,29,30],{},"自動化的開發流程",[22,32,33],{},"明確的協作界線",[15,35,36],{},"這篇文章將分享如何讓 AI 成為有效的開發夥伴。",[38,39],"hr",{},[11,41,43],{"id":42},"claudemd-設計理念","CLAUDE.md 設計理念",[45,46,48],"h3",{"id":47},"為什麼需要-claudemd","為什麼需要 CLAUDE.md",[15,50,51],{},"CLAUDE.md 是專案的「AI 使用手冊」，告訴 AI：",[53,54,55,58,61,64],"ol",{},[22,56,57],{},"專案使用的技術棧與規範",[22,59,60],{},"開發流程與最佳實踐",[22,62,63],{},"禁止事項與常見陷阱",[22,65,66],{},"語言偏好與溝通方式",[15,68,69],{},"沒有 CLAUDE.md，AI 會：",[19,71,72,75,78],{},[22,73,74],{},"使用自己的預設風格",[22,76,77],{},"不知道專案的特殊規範",[22,79,80],{},"可能踩到已知的坑",[45,82,83],{"id":83},"結構設計原則",[15,85,86],{},"好的 CLAUDE.md 應該：",[53,88,89,96,102,108],{},[22,90,91,95],{},[92,93,94],"strong",{},"有目錄導覽","：方便定位重要章節",[22,97,98,101],{},[92,99,100],{},"分優先等級","：標記必讀 vs 參考",[22,103,104,107],{},[92,105,106],{},"簡潔明確","：AI 的 context 有限",[22,109,110,113],{},[92,111,112],{},"提供範例","：示範正確的寫法",[115,116,121],"pre",{"className":117,"code":118,"language":119,"meta":120,"style":120},"language-markdown shiki shiki-themes material-theme-lighter github-light github-dark","## 📑 目錄導覽\n\n| 章節                      | 說明          | 重要性  |\n| ------------------------- | ------------- | ------- |\n| 語言偏好                  | 繁體中文規範  | 🔴 必讀 |\n| Standards                 | 核心技術規範  | 🔴 必讀 |\n| Development Workflow      | TDD 開發流程  | 🔴 必讀 |\n| Database Guidelines       | Supabase 規範 | 🔴 必讀 |\n| Vue Component Conventions | 元件撰寫規範  | 🟡 參考 |\n| Git Commit Conventions    | Commit 格式   | 🟡 參考 |\n","markdown","",[122,123,124,132,139,145,151,157,163,169,175,181],"code",{"__ignoreMap":120},[125,126,129],"span",{"class":127,"line":128},"line",1,[125,130,131],{},"## 📑 目錄導覽\n",[125,133,135],{"class":127,"line":134},2,[125,136,138],{"emptyLinePlaceholder":137},true,"\n",[125,140,142],{"class":127,"line":141},3,[125,143,144],{},"| 章節                      | 說明          | 重要性  |\n",[125,146,148],{"class":127,"line":147},4,[125,149,150],{},"| ------------------------- | ------------- | ------- |\n",[125,152,154],{"class":127,"line":153},5,[125,155,156],{},"| 語言偏好                  | 繁體中文規範  | 🔴 必讀 |\n",[125,158,160],{"class":127,"line":159},6,[125,161,162],{},"| Standards                 | 核心技術規範  | 🔴 必讀 |\n",[125,164,166],{"class":127,"line":165},7,[125,167,168],{},"| Development Workflow      | TDD 開發流程  | 🔴 必讀 |\n",[125,170,172],{"class":127,"line":171},8,[125,173,174],{},"| Database Guidelines       | Supabase 規範 | 🔴 必讀 |\n",[125,176,178],{"class":127,"line":177},9,[125,179,180],{},"| Vue Component Conventions | 元件撰寫規範  | 🟡 參考 |\n",[125,182,184],{"class":127,"line":183},10,[125,185,186],{},"| Git Commit Conventions    | Commit 格式   | 🟡 參考 |\n",[45,188,190],{"id":189},"claudemd-核心章節","CLAUDE.md 核心章節",[192,193,195],"h4",{"id":194},"_1-語言偏好","1. 語言偏好",[115,197,199],{"className":117,"code":198,"language":119,"meta":120,"style":120},"## 🗣️ 語言偏好\n\n> Claude 必須**一律使用繁體中文（Traditional Chinese, zh-TW）**\n> **絕對禁止使用簡體中文（Simplified Chinese, zh-CN）**\n",[122,200,201,206,210,215],{"__ignoreMap":120},[125,202,203],{"class":127,"line":128},[125,204,205],{},"## 🗣️ 語言偏好\n",[125,207,208],{"class":127,"line":134},[125,209,138],{"emptyLinePlaceholder":137},[125,211,212],{"class":127,"line":141},[125,213,214],{},"> Claude 必須**一律使用繁體中文（Traditional Chinese, zh-TW）**\n",[125,216,217],{"class":127,"line":147},[125,218,219],{},"> **絕對禁止使用簡體中文（Simplified Chinese, zh-CN）**\n",[192,221,223],{"id":222},"_2-standards必讀","2. Standards（必讀）",[115,225,227],{"className":117,"code":226,"language":119,"meta":120,"style":120},"## ⚠️ Standards\n\n**MUST FOLLOW THESE RULES, NO EXCEPTIONS**\n\n### Core Technologies\n\n- **Stack**: Nuxt 4, Vue 3, TypeScript, Tailwind CSS, Nuxt UI\n- **Patterns**: ALWAYS use Composition API + `\u003Cscript setup>`\n- **Type Safety**: prefer `interface` over `type`\n\n### Code Style\n\n- **Styling**: ALWAYS use TailwindCSS, NEVER manual CSS\n- **Colors**: DO NOT hard code colors\n- **Exports**: ALWAYS prefer named exports\n\n### Development Environment\n\n- **Dev Server**: NEVER launch it yourself\n- **TDD**: 先寫測試，再實作\n",[122,228,229,234,238,243,247,252,256,261,266,271,275,281,286,292,298,304,309,315,320,326],{"__ignoreMap":120},[125,230,231],{"class":127,"line":128},[125,232,233],{},"## ⚠️ Standards\n",[125,235,236],{"class":127,"line":134},[125,237,138],{"emptyLinePlaceholder":137},[125,239,240],{"class":127,"line":141},[125,241,242],{},"**MUST FOLLOW THESE RULES, NO EXCEPTIONS**\n",[125,244,245],{"class":127,"line":147},[125,246,138],{"emptyLinePlaceholder":137},[125,248,249],{"class":127,"line":153},[125,250,251],{},"### Core Technologies\n",[125,253,254],{"class":127,"line":159},[125,255,138],{"emptyLinePlaceholder":137},[125,257,258],{"class":127,"line":165},[125,259,260],{},"- **Stack**: Nuxt 4, Vue 3, TypeScript, Tailwind CSS, Nuxt UI\n",[125,262,263],{"class":127,"line":171},[125,264,265],{},"- **Patterns**: ALWAYS use Composition API + `\u003Cscript setup>`\n",[125,267,268],{"class":127,"line":177},[125,269,270],{},"- **Type Safety**: prefer `interface` over `type`\n",[125,272,273],{"class":127,"line":183},[125,274,138],{"emptyLinePlaceholder":137},[125,276,278],{"class":127,"line":277},11,[125,279,280],{},"### Code Style\n",[125,282,284],{"class":127,"line":283},12,[125,285,138],{"emptyLinePlaceholder":137},[125,287,289],{"class":127,"line":288},13,[125,290,291],{},"- **Styling**: ALWAYS use TailwindCSS, NEVER manual CSS\n",[125,293,295],{"class":127,"line":294},14,[125,296,297],{},"- **Colors**: DO NOT hard code colors\n",[125,299,301],{"class":127,"line":300},15,[125,302,303],{},"- **Exports**: ALWAYS prefer named exports\n",[125,305,307],{"class":127,"line":306},16,[125,308,138],{"emptyLinePlaceholder":137},[125,310,312],{"class":127,"line":311},17,[125,313,314],{},"### Development Environment\n",[125,316,318],{"class":127,"line":317},18,[125,319,138],{"emptyLinePlaceholder":137},[125,321,323],{"class":127,"line":322},19,[125,324,325],{},"- **Dev Server**: NEVER launch it yourself\n",[125,327,329],{"class":127,"line":328},20,[125,330,331],{},"- **TDD**: 先寫測試，再實作\n",[192,333,335],{"id":334},"_3-development-workflow","3. Development Workflow",[115,337,339],{"className":117,"code":338,"language":119,"meta":120,"style":120},"## 🔄 Development Workflow\n\n### Workflow Steps\n\n1. **Plan**: 規劃任務，與使用者確認\n2. **Design**: 設計測試案例\n3. **Red**: 先寫失敗的測試\n4. **Green**: 寫最小實作讓測試通過\n5. **Refactor**: 重構，保持綠燈\n6. **Stage**: 測試全部通過後才 git add\n7. **Review**: 分析是否需要更多測試\n",[122,340,341,346,350,355,359,364,369,374,379,384,389],{"__ignoreMap":120},[125,342,343],{"class":127,"line":128},[125,344,345],{},"## 🔄 Development Workflow\n",[125,347,348],{"class":127,"line":134},[125,349,138],{"emptyLinePlaceholder":137},[125,351,352],{"class":127,"line":141},[125,353,354],{},"### Workflow Steps\n",[125,356,357],{"class":127,"line":147},[125,358,138],{"emptyLinePlaceholder":137},[125,360,361],{"class":127,"line":153},[125,362,363],{},"1. **Plan**: 規劃任務，與使用者確認\n",[125,365,366],{"class":127,"line":159},[125,367,368],{},"2. **Design**: 設計測試案例\n",[125,370,371],{"class":127,"line":165},[125,372,373],{},"3. **Red**: 先寫失敗的測試\n",[125,375,376],{"class":127,"line":171},[125,377,378],{},"4. **Green**: 寫最小實作讓測試通過\n",[125,380,381],{"class":127,"line":177},[125,382,383],{},"5. **Refactor**: 重構，保持綠燈\n",[125,385,386],{"class":127,"line":183},[125,387,388],{},"6. **Stage**: 測試全部通過後才 git add\n",[125,390,391],{"class":127,"line":277},[125,392,393],{},"7. **Review**: 分析是否需要更多測試\n",[192,395,397],{"id":396},"_4-database-guidelines","4. Database Guidelines",[115,399,401],{"className":117,"code":400,"language":119,"meta":120,"style":120},"## 🗄️ Database Guidelines\n\n### 認證架構 - CRITICAL\n\n\u002F\u002F ❌ FORBIDDEN\nconst user = useSupabaseUser()\n\n\u002F\u002F ✅ CORRECT\nconst { user, loggedIn } = useUserSession()\n\n### Migration Rules\n\n- 所有 migration 必須先在本地建立\n- 禁止用 GUI 直接改 schema\n- 禁止手動建立 .sql 檔案\n\n### Function Security\n\n\u002F\u002F ✅ 必須設定 search_path = ''\nSET search_path = ''\n",[122,402,403,408,412,417,421,426,431,435,440,445,449,454,458,463,468,473,477,482,486,491],{"__ignoreMap":120},[125,404,405],{"class":127,"line":128},[125,406,407],{},"## 🗄️ Database Guidelines\n",[125,409,410],{"class":127,"line":134},[125,411,138],{"emptyLinePlaceholder":137},[125,413,414],{"class":127,"line":141},[125,415,416],{},"### 認證架構 - CRITICAL\n",[125,418,419],{"class":127,"line":147},[125,420,138],{"emptyLinePlaceholder":137},[125,422,423],{"class":127,"line":153},[125,424,425],{},"\u002F\u002F ❌ FORBIDDEN\n",[125,427,428],{"class":127,"line":159},[125,429,430],{},"const user = useSupabaseUser()\n",[125,432,433],{"class":127,"line":165},[125,434,138],{"emptyLinePlaceholder":137},[125,436,437],{"class":127,"line":171},[125,438,439],{},"\u002F\u002F ✅ CORRECT\n",[125,441,442],{"class":127,"line":177},[125,443,444],{},"const { user, loggedIn } = useUserSession()\n",[125,446,447],{"class":127,"line":183},[125,448,138],{"emptyLinePlaceholder":137},[125,450,451],{"class":127,"line":277},[125,452,453],{},"### Migration Rules\n",[125,455,456],{"class":127,"line":283},[125,457,138],{"emptyLinePlaceholder":137},[125,459,460],{"class":127,"line":288},[125,461,462],{},"- 所有 migration 必須先在本地建立\n",[125,464,465],{"class":127,"line":294},[125,466,467],{},"- 禁止用 GUI 直接改 schema\n",[125,469,470],{"class":127,"line":300},[125,471,472],{},"- 禁止手動建立 .sql 檔案\n",[125,474,475],{"class":127,"line":306},[125,476,138],{"emptyLinePlaceholder":137},[125,478,479],{"class":127,"line":311},[125,480,481],{},"### Function Security\n",[125,483,484],{"class":127,"line":317},[125,485,138],{"emptyLinePlaceholder":137},[125,487,488],{"class":127,"line":322},[125,489,490],{},"\u002F\u002F ✅ 必須設定 search_path = ''\n",[125,492,493],{"class":127,"line":328},[125,494,495],{},"SET search_path = ''\n",[38,497],{},[11,499,501],{"id":500},"ai-skills-系統","AI Skills 系統",[45,503,505],{"id":504},"為什麼需要-skills","為什麼需要 Skills",[15,507,508],{},"CLAUDE.md 適合放通用規範，但特定技術的詳細知識（如 Nuxt UI 的 125+ 元件）放在 CLAUDE.md 會太長。",[15,510,511],{},"AI Skills 解決這個問題：",[19,513,514,520,526],{},[22,515,516,519],{},[92,517,518],{},"按需載入","：只在需要時載入相關知識",[22,521,522,525],{},[92,523,524],{},"模組化","：每個 skill 專注一個領域",[22,527,528,531],{},[92,529,530],{},"可更新","：技術 skills 可自動同步最新版本",[45,533,535],{"id":534},"技術-skills自動更新","技術 Skills（自動更新）",[15,537,538,539,546],{},"透過 ",[540,541,545],"a",{"href":542,"rel":543},"https:\u002F\u002Fgithub.com\u002Fonmax\u002Fnuxt-skills",[544],"nofollow","nuxt-skills"," 自動維護：",[115,548,553],{"className":549,"code":551,"language":552},[550],"language-text",".claude\u002Fskills\u002F\n├── nuxt\u002F                 # Nuxt 4 框架\n│   ├── SKILL.md\n│   └── references\u002F\n├── nuxt-ui\u002F              # Nuxt UI 4 元件\n│   ├── SKILL.md\n│   ├── references\u002F\n│   └── components\u002F       # 125+ 元件說明\n├── vue\u002F                  # Vue 3 Composition API\n├── vueuse\u002F               # VueUse composables\n├── reka-ui\u002F              # Headless UI 元件\n└── ...\n","text",[122,554,551],{"__ignoreMap":120},[556,557,558,571],"table",{},[559,560,561],"thead",{},[562,563,564,568],"tr",{},[565,566,567],"th",{},"Skill",[565,569,570],{},"用途",[572,573,574,585,595,605,615,625],"tbody",{},[562,575,576,582],{},[577,578,579],"td",{},[122,580,581],{},"nuxt",[577,583,584],{},"Nuxt 4 框架開發",[562,586,587,592],{},[577,588,589],{},[122,590,591],{},"nuxt-ui",[577,593,594],{},"Nuxt UI 4 元件使用",[562,596,597,602],{},[577,598,599],{},[122,600,601],{},"nuxt-better-auth",[577,603,604],{},"認證整合",[562,606,607,612],{},[577,608,609],{},[122,610,611],{},"vue",[577,613,614],{},"Vue 3 Composition API",[562,616,617,622],{},[577,618,619],{},[122,620,621],{},"vueuse",[577,623,624],{},"VueUse composables",[562,626,627,632],{},[577,628,629],{},[122,630,631],{},"reka-ui",[577,633,634],{},"Headless UI 元件",[45,636,638],{"id":637},"情境-skills本地維護","情境 Skills（本地維護）",[15,640,641],{},"當特定開發情境發生時自動載入：",[556,643,644,656],{},[559,645,646],{},[562,647,648,650,653],{},[565,649,567],{},[565,651,652],{},"觸發時機",[565,654,655],{},"說明",[572,657,658,671,684,697],{},[562,659,660,665,668],{},[577,661,662],{},[122,663,664],{},"supabase-rls",[577,666,667],{},"建立 RLS Policy 時",[577,669,670],{},"RLS 設計規範",[562,672,673,678,681],{},[577,674,675],{},[122,676,677],{},"supabase-migration",[577,679,680],{},"建立 migration 時",[577,682,683],{},"Local-First 流程",[562,685,686,691,694],{},[577,687,688],{},[122,689,690],{},"server-api",[577,692,693],{},"建立 Server API 時",[577,695,696],{},"Zod 驗證、權限檢查",[562,698,699,704,707],{},[577,700,701],{},[122,702,703],{},"pinia-store",[577,705,706],{},"建立 Pinia Store 時",[577,708,709],{},"Composition API 寫法",[45,711,713],{"id":712},"skill-結構範例","Skill 結構範例",[115,715,717],{"className":117,"code":716,"language":119,"meta":120,"style":120},"# Nuxt UI v4\n\n## When to Use\n\n- Installing\u002Fconfiguring @nuxt\u002Fui\n- Using UI components (Button, Card, Table, Form, etc.)\n- Customizing theme\n\n**For Vue component patterns:** use `vue` skill\n**For Nuxt routing\u002Fserver:** use `nuxt` skill\n\n## Available Guidance\n\n| File                       | Topics                         |\n| -------------------------- | ------------------------------ |\n| references\u002Finstallation.md | Nuxt\u002FVue setup                 |\n| references\u002Ftheming.md      | Semantic colors, CSS variables |\n| components\u002F\\*.md           | Per-component details          |\n\n## Quick Reference\n\n\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\nmodules: ['@nuxt\u002Fui'],\n})\n",[122,718,719,724,728,733,737,742,747,752,756,761,766,770,775,779,784,789,794,799,804,808,813,818,824,830,836],{"__ignoreMap":120},[125,720,721],{"class":127,"line":128},[125,722,723],{},"# Nuxt UI v4\n",[125,725,726],{"class":127,"line":134},[125,727,138],{"emptyLinePlaceholder":137},[125,729,730],{"class":127,"line":141},[125,731,732],{},"## When to Use\n",[125,734,735],{"class":127,"line":147},[125,736,138],{"emptyLinePlaceholder":137},[125,738,739],{"class":127,"line":153},[125,740,741],{},"- Installing\u002Fconfiguring @nuxt\u002Fui\n",[125,743,744],{"class":127,"line":159},[125,745,746],{},"- Using UI components (Button, Card, Table, Form, etc.)\n",[125,748,749],{"class":127,"line":165},[125,750,751],{},"- Customizing theme\n",[125,753,754],{"class":127,"line":171},[125,755,138],{"emptyLinePlaceholder":137},[125,757,758],{"class":127,"line":177},[125,759,760],{},"**For Vue component patterns:** use `vue` skill\n",[125,762,763],{"class":127,"line":183},[125,764,765],{},"**For Nuxt routing\u002Fserver:** use `nuxt` skill\n",[125,767,768],{"class":127,"line":277},[125,769,138],{"emptyLinePlaceholder":137},[125,771,772],{"class":127,"line":283},[125,773,774],{},"## Available Guidance\n",[125,776,777],{"class":127,"line":288},[125,778,138],{"emptyLinePlaceholder":137},[125,780,781],{"class":127,"line":294},[125,782,783],{},"| File                       | Topics                         |\n",[125,785,786],{"class":127,"line":300},[125,787,788],{},"| -------------------------- | ------------------------------ |\n",[125,790,791],{"class":127,"line":306},[125,792,793],{},"| references\u002Finstallation.md | Nuxt\u002FVue setup                 |\n",[125,795,796],{"class":127,"line":311},[125,797,798],{},"| references\u002Ftheming.md      | Semantic colors, CSS variables |\n",[125,800,801],{"class":127,"line":317},[125,802,803],{},"| components\u002F\\*.md           | Per-component details          |\n",[125,805,806],{"class":127,"line":322},[125,807,138],{"emptyLinePlaceholder":137},[125,809,810],{"class":127,"line":328},[125,811,812],{},"## Quick Reference\n",[125,814,816],{"class":127,"line":815},21,[125,817,138],{"emptyLinePlaceholder":137},[125,819,821],{"class":127,"line":820},22,[125,822,823],{},"\u002F\u002F nuxt.config.ts\n",[125,825,827],{"class":127,"line":826},23,[125,828,829],{},"export default defineNuxtConfig({\n",[125,831,833],{"class":127,"line":832},24,[125,834,835],{},"modules: ['@nuxt\u002Fui'],\n",[125,837,839],{"class":127,"line":838},25,[125,840,841],{},"})\n",[38,843],{},[11,845,846],{"id":846},"自動化工作流程",[45,848,849],{"id":849},"完成實作後的自動流程",[115,851,854],{"className":852,"code":853,"language":552},[550],"完成實作\n    │\n    ▼\n┌─────────────────────────────────────────┐\n│  1. pnpm format                         │\n│     ↓ 失敗 → 自動修復 → 重試            │\n│  2. pnpm lint                           │\n│     ↓ 失敗 → 分析錯誤 → 修復 → 重試     │\n│  3. pnpm typecheck                      │\n│     ↓ 失敗 → 分析類型錯誤 → 修復 → 重試 │\n│  4. pnpm test                           │\n│     ↓ 失敗 → 分析測試失敗 → 修復 → 重試 │\n│  5. 全部通過                             │\n└─────────────────────────────────────────┘\n    │\n    ▼\n詢問：「檢查全部通過，是否要 commit？」\n    │\n    ▼\n分析變更 → 建議分組 → 逐一 commit\n    │\n    ▼\n詢問：「是否要升級版本？（minor \u002F patch \u002F 否）」\n    │\n    ▼\n執行版本升級 + deploy commit + tag\n",[122,855,853],{"__ignoreMap":120},[45,857,859],{"id":858},"自動-commit-規範","自動 Commit 規範",[115,861,864],{"className":862,"code":863,"language":552},[550],"\u003Cemoji type>: \u003Cdescription>\n\nGenerated with [Claude Code](https:\u002F\u002Fclaude.ai\u002Fcode)\n\nCo-Authored-By: Claude \u003Cnoreply@anthropic.com>\n",[122,865,863],{"__ignoreMap":120},[556,867,868,881],{},[559,869,870],{},[562,871,872,875,878],{},[565,873,874],{},"Emoji",[565,876,877],{},"Type",[565,879,880],{},"Description",[572,882,883,894,905,916,927,938,949],{},[562,884,885,888,891],{},[577,886,887],{},"✨",[577,889,890],{},"feat",[577,892,893],{},"New feature",[562,895,896,899,902],{},[577,897,898],{},"🐛",[577,900,901],{},"fix",[577,903,904],{},"Bug fix",[562,906,907,910,913],{},[577,908,909],{},"🧹",[577,911,912],{},"chore",[577,914,915],{},"Maintenance",[562,917,918,921,924],{},[577,919,920],{},"🔨",[577,922,923],{},"refactor",[577,925,926],{},"Refactoring",[562,928,929,932,935],{},[577,930,931],{},"🧪",[577,933,934],{},"test",[577,936,937],{},"Testing",[562,939,940,943,946],{},[577,941,942],{},"📝",[577,944,945],{},"docs",[577,947,948],{},"Documentation",[562,950,951,954,957],{},[577,952,953],{},"🚀",[577,955,956],{},"deploy",[577,958,959],{},"Deployment",[45,961,963],{"id":962},"自動-migration-驗證","自動 Migration 驗證",[15,965,966],{},"建立或修改 migration 後自動執行：",[115,968,972],{"className":969,"code":970,"language":971,"meta":120,"style":120},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","# 1. 重置資料庫測試 migration\nsupabase db reset\n\n# 2. 安全檢查\nsupabase db lint --level warning\n\n# 3. 重新產生 TypeScript 類型\nsupabase gen types typescript --local | tee app\u002Ftypes\u002Fdatabase.types.ts > \u002Fdev\u002Fnull\n\n# 4. 類型檢查\npnpm typecheck\n","bash",[122,973,974,980,993,997,1002,1018,1022,1027,1059,1063,1068],{"__ignoreMap":120},[125,975,976],{"class":127,"line":128},[125,977,979],{"class":978},"sutJx","# 1. 重置資料庫測試 migration\n",[125,981,982,986,990],{"class":127,"line":134},[125,983,985],{"class":984},"sbgvK","supabase",[125,987,989],{"class":988},"s_sjI"," db",[125,991,992],{"class":988}," reset\n",[125,994,995],{"class":127,"line":141},[125,996,138],{"emptyLinePlaceholder":137},[125,998,999],{"class":127,"line":147},[125,1000,1001],{"class":978},"# 2. 安全檢查\n",[125,1003,1004,1006,1008,1011,1015],{"class":127,"line":153},[125,1005,985],{"class":984},[125,1007,989],{"class":988},[125,1009,1010],{"class":988}," lint",[125,1012,1014],{"class":1013},"stzsN"," --level",[125,1016,1017],{"class":988}," warning\n",[125,1019,1020],{"class":127,"line":159},[125,1021,138],{"emptyLinePlaceholder":137},[125,1023,1024],{"class":127,"line":165},[125,1025,1026],{"class":978},"# 3. 重新產生 TypeScript 類型\n",[125,1028,1029,1031,1034,1037,1040,1043,1047,1050,1053,1056],{"class":127,"line":171},[125,1030,985],{"class":984},[125,1032,1033],{"class":988}," gen",[125,1035,1036],{"class":988}," types",[125,1038,1039],{"class":988}," typescript",[125,1041,1042],{"class":1013}," --local",[125,1044,1046],{"class":1045},"smGrS"," |",[125,1048,1049],{"class":984}," tee",[125,1051,1052],{"class":988}," app\u002Ftypes\u002Fdatabase.types.ts",[125,1054,1055],{"class":1045}," >",[125,1057,1058],{"class":988}," \u002Fdev\u002Fnull\n",[125,1060,1061],{"class":127,"line":177},[125,1062,138],{"emptyLinePlaceholder":137},[125,1064,1065],{"class":127,"line":183},[125,1066,1067],{"class":978},"# 4. 類型檢查\n",[125,1069,1070,1073],{"class":127,"line":277},[125,1071,1072],{"class":984},"pnpm",[125,1074,1075],{"class":988}," typecheck\n",[38,1077],{},[11,1079,1081],{"id":1080},"ai-協作的-dos-and-donts","AI 協作的 Do's and Don'ts",[45,1083,1085],{"id":1084},"dos","✅ Do's",[53,1087,1088],{},[22,1089,1090],{},[92,1091,1092],{},"提供清晰的上下文",[115,1094,1096],{"className":117,"code":1095,"language":119,"meta":120,"style":120},"✅ 好的提示：\n「我要在 \u002Fapi\u002Fv1\u002Fusers 新增一個 POST API，\n用來建立使用者。請參考 API_DESIGN_GUIDE.md 的模式，\n使用 Zod 驗證，並加入 requireUserSession 權限檢查。」\n",[122,1097,1098,1103,1108,1113],{"__ignoreMap":120},[125,1099,1100],{"class":127,"line":128},[125,1101,1102],{},"✅ 好的提示：\n",[125,1104,1105],{"class":127,"line":134},[125,1106,1107],{},"「我要在 \u002Fapi\u002Fv1\u002Fusers 新增一個 POST API，\n",[125,1109,1110],{"class":127,"line":141},[125,1111,1112],{},"用來建立使用者。請參考 API_DESIGN_GUIDE.md 的模式，\n",[125,1114,1115],{"class":127,"line":147},[125,1116,1117],{},"使用 Zod 驗證，並加入 requireUserSession 權限檢查。」\n",[53,1119,1120],{"start":134},[22,1121,1122],{},[92,1123,1124],{},"使用 CLAUDE.md",[115,1126,1128],{"className":117,"code":1127,"language":119,"meta":120,"style":120},"✅ 好的做法：\n在 CLAUDE.md 中明確定義規範，\n讓 AI 在每次對話開始時就了解專案脈絡。\n",[122,1129,1130,1135,1140],{"__ignoreMap":120},[125,1131,1132],{"class":127,"line":128},[125,1133,1134],{},"✅ 好的做法：\n",[125,1136,1137],{"class":127,"line":134},[125,1138,1139],{},"在 CLAUDE.md 中明確定義規範，\n",[125,1141,1142],{"class":127,"line":141},[125,1143,1144],{},"讓 AI 在每次對話開始時就了解專案脈絡。\n",[53,1146,1147],{"start":141},[22,1148,1149],{},[92,1150,1151],{},"分階段執行",[115,1153,1155],{"className":117,"code":1154,"language":119,"meta":120,"style":120},"✅ 好的做法：\n\n1. 先請 AI 分析需求\n2. 確認理解正確後，請 AI 設計測試\n3. 確認測試案例後，請 AI 實作\n4. 最後請 AI 驗證並重構\n",[122,1156,1157,1161,1165,1170,1175,1180],{"__ignoreMap":120},[125,1158,1159],{"class":127,"line":128},[125,1160,1134],{},[125,1162,1163],{"class":127,"line":134},[125,1164,138],{"emptyLinePlaceholder":137},[125,1166,1167],{"class":127,"line":141},[125,1168,1169],{},"1. 先請 AI 分析需求\n",[125,1171,1172],{"class":127,"line":147},[125,1173,1174],{},"2. 確認理解正確後，請 AI 設計測試\n",[125,1176,1177],{"class":127,"line":153},[125,1178,1179],{},"3. 確認測試案例後，請 AI 實作\n",[125,1181,1182],{"class":127,"line":159},[125,1183,1184],{},"4. 最後請 AI 驗證並重構\n",[53,1186,1187],{"start":147},[22,1188,1189],{},[92,1190,1191],{},"驗證輸出",[115,1193,1195],{"className":117,"code":1194,"language":119,"meta":120,"style":120},"✅ 好的做法：\n\n- 執行測試確認功能正確\n- 檢查程式碼是否符合規範\n- 使用 pnpm check 驗證所有檢查\n",[122,1196,1197,1201,1205,1210,1215],{"__ignoreMap":120},[125,1198,1199],{"class":127,"line":128},[125,1200,1134],{},[125,1202,1203],{"class":127,"line":134},[125,1204,138],{"emptyLinePlaceholder":137},[125,1206,1207],{"class":127,"line":141},[125,1208,1209],{},"- 執行測試確認功能正確\n",[125,1211,1212],{"class":127,"line":147},[125,1213,1214],{},"- 檢查程式碼是否符合規範\n",[125,1216,1217],{"class":127,"line":153},[125,1218,1219],{},"- 使用 pnpm check 驗證所有檢查\n",[45,1221,1223],{"id":1222},"donts","❌ Don'ts",[53,1225,1226],{},[22,1227,1228],{},[92,1229,1230],{},"不要盲目信任",[115,1232,1234],{"className":117,"code":1233,"language":119,"meta":120,"style":120},"❌ AI 可能會：\n\n- 幻覺（編造不存在的 API）\n- 過度自信（說「這樣就可以了」但其實不行）\n- 忽略邊界案例\n\n✅ 解決方式：\n\n- 始終執行測試\n- 質疑不確定的答案\n- 要求提供參考來源\n",[122,1235,1236,1241,1245,1250,1255,1260,1264,1269,1273,1278,1283],{"__ignoreMap":120},[125,1237,1238],{"class":127,"line":128},[125,1239,1240],{},"❌ AI 可能會：\n",[125,1242,1243],{"class":127,"line":134},[125,1244,138],{"emptyLinePlaceholder":137},[125,1246,1247],{"class":127,"line":141},[125,1248,1249],{},"- 幻覺（編造不存在的 API）\n",[125,1251,1252],{"class":127,"line":147},[125,1253,1254],{},"- 過度自信（說「這樣就可以了」但其實不行）\n",[125,1256,1257],{"class":127,"line":153},[125,1258,1259],{},"- 忽略邊界案例\n",[125,1261,1262],{"class":127,"line":159},[125,1263,138],{"emptyLinePlaceholder":137},[125,1265,1266],{"class":127,"line":165},[125,1267,1268],{},"✅ 解決方式：\n",[125,1270,1271],{"class":127,"line":171},[125,1272,138],{"emptyLinePlaceholder":137},[125,1274,1275],{"class":127,"line":177},[125,1276,1277],{},"- 始終執行測試\n",[125,1279,1280],{"class":127,"line":183},[125,1281,1282],{},"- 質疑不確定的答案\n",[125,1284,1285],{"class":127,"line":277},[125,1286,1287],{},"- 要求提供參考來源\n",[53,1289,1290],{"start":134},[22,1291,1292],{},[92,1293,1294],{},"不要省略規範",[115,1296,1298],{"className":117,"code":1297,"language":119,"meta":120,"style":120},"❌ 錯誤做法：\n「幫我寫一個 API」\n\n✅ 正確做法：\n「依照 CLAUDE.md 的規範，\n幫我寫一個 \u002Fapi\u002Fv1\u002Fusers 的 POST API」\n",[122,1299,1300,1305,1310,1314,1319,1324],{"__ignoreMap":120},[125,1301,1302],{"class":127,"line":128},[125,1303,1304],{},"❌ 錯誤做法：\n",[125,1306,1307],{"class":127,"line":134},[125,1308,1309],{},"「幫我寫一個 API」\n",[125,1311,1312],{"class":127,"line":141},[125,1313,138],{"emptyLinePlaceholder":137},[125,1315,1316],{"class":127,"line":147},[125,1317,1318],{},"✅ 正確做法：\n",[125,1320,1321],{"class":127,"line":153},[125,1322,1323],{},"「依照 CLAUDE.md 的規範，\n",[125,1325,1326],{"class":127,"line":159},[125,1327,1328],{},"幫我寫一個 \u002Fapi\u002Fv1\u002Fusers 的 POST API」\n",[53,1330,1331],{"start":141},[22,1332,1333],{},[92,1334,1335],{},"不要一次要求太多",[115,1337,1339],{"className":117,"code":1338,"language":119,"meta":120,"style":120},"❌ 錯誤做法：\n「幫我實作完整的使用者管理系統，\n包含 CRUD、權限、驗證、測試」\n\n✅ 正確做法：\n分成多個小任務，逐一完成\n",[122,1340,1341,1345,1350,1355,1359,1363],{"__ignoreMap":120},[125,1342,1343],{"class":127,"line":128},[125,1344,1304],{},[125,1346,1347],{"class":127,"line":134},[125,1348,1349],{},"「幫我實作完整的使用者管理系統，\n",[125,1351,1352],{"class":127,"line":141},[125,1353,1354],{},"包含 CRUD、權限、驗證、測試」\n",[125,1356,1357],{"class":127,"line":147},[125,1358,138],{"emptyLinePlaceholder":137},[125,1360,1361],{"class":127,"line":153},[125,1362,1318],{},[125,1364,1365],{"class":127,"line":159},[125,1366,1367],{},"分成多個小任務，逐一完成\n",[53,1369,1370],{"start":147},[22,1371,1372],{},[92,1373,1374],{},"不要忽略測試",[115,1376,1378],{"className":117,"code":1377,"language":119,"meta":120,"style":120},"❌ 錯誤做法：\n「幫我寫功能就好，測試晚點再說」\n\n✅ 正確做法：\n遵循 TDD：先寫測試，再實作\n",[122,1379,1380,1384,1389,1393,1397],{"__ignoreMap":120},[125,1381,1382],{"class":127,"line":128},[125,1383,1304],{},[125,1385,1386],{"class":127,"line":134},[125,1387,1388],{},"「幫我寫功能就好，測試晚點再說」\n",[125,1390,1391],{"class":127,"line":141},[125,1392,138],{"emptyLinePlaceholder":137},[125,1394,1395],{"class":127,"line":147},[125,1396,1318],{},[125,1398,1399],{"class":127,"line":153},[125,1400,1401],{},"遵循 TDD：先寫測試，再實作\n",[38,1403],{},[11,1405,1406],{"id":1406},"踩坑經驗",[45,1408,1410],{"id":1409},"ai-不遵守規範的除錯方式","AI 不遵守規範的除錯方式",[15,1412,1413,1416],{},[92,1414,1415],{},"問題","：AI 沒有按照 CLAUDE.md 的規範行事。",[15,1418,1419,1422],{},[92,1420,1421],{},"原因","：",[53,1424,1425,1428,1431],{},[22,1426,1427],{},"規範不夠明確",[22,1429,1430],{},"規範被其他上下文覆蓋",[22,1432,1433],{},"AI 的「習慣」與規範衝突",[15,1435,1436,1422],{},[92,1437,1438],{},"解決",[115,1440,1442],{"className":117,"code":1441,"language":119,"meta":120,"style":120},"1. 檢查規範是否足夠明確\n   - 使用 MUST \u002F NEVER \u002F ALWAYS 強調\n   - 提供正確和錯誤的範例\n\n2. 在對話中重申關鍵規範\n   - 「請確保使用繁體中文」\n   - 「請遵循 TDD 流程」\n\n3. 分階段確認每個步驟\n   - 「你打算怎麼實作？」\n   - 「這樣做符合規範嗎？」\n",[122,1443,1444,1449,1454,1459,1463,1468,1473,1478,1482,1487,1492],{"__ignoreMap":120},[125,1445,1446],{"class":127,"line":128},[125,1447,1448],{},"1. 檢查規範是否足夠明確\n",[125,1450,1451],{"class":127,"line":134},[125,1452,1453],{},"   - 使用 MUST \u002F NEVER \u002F ALWAYS 強調\n",[125,1455,1456],{"class":127,"line":141},[125,1457,1458],{},"   - 提供正確和錯誤的範例\n",[125,1460,1461],{"class":127,"line":147},[125,1462,138],{"emptyLinePlaceholder":137},[125,1464,1465],{"class":127,"line":153},[125,1466,1467],{},"2. 在對話中重申關鍵規範\n",[125,1469,1470],{"class":127,"line":159},[125,1471,1472],{},"   - 「請確保使用繁體中文」\n",[125,1474,1475],{"class":127,"line":165},[125,1476,1477],{},"   - 「請遵循 TDD 流程」\n",[125,1479,1480],{"class":127,"line":171},[125,1481,138],{"emptyLinePlaceholder":137},[125,1483,1484],{"class":127,"line":177},[125,1485,1486],{},"3. 分階段確認每個步驟\n",[125,1488,1489],{"class":127,"line":183},[125,1490,1491],{},"   - 「你打算怎麼實作？」\n",[125,1493,1494],{"class":127,"line":277},[125,1495,1496],{},"   - 「這樣做符合規範嗎？」\n",[45,1498,1500],{"id":1499},"ai-產生的程式碼品質不佳","AI 產生的程式碼品質不佳",[15,1502,1503,1505],{},[92,1504,1415],{},"：AI 產生的程式碼可以跑，但風格不一致。",[15,1507,1508,1422],{},[92,1509,1438],{},[115,1511,1513],{"className":117,"code":1512,"language":119,"meta":120,"style":120},"1. 在 CLAUDE.md 明確定義 Code Style\n\n2. 設定自動格式化\n   - oxfmt \u002F prettier\n   - eslint \u002F oxlint\n\n3. 要求 AI 執行 pnpm check 後再提交\n",[122,1514,1515,1520,1524,1529,1534,1539,1543],{"__ignoreMap":120},[125,1516,1517],{"class":127,"line":128},[125,1518,1519],{},"1. 在 CLAUDE.md 明確定義 Code Style\n",[125,1521,1522],{"class":127,"line":134},[125,1523,138],{"emptyLinePlaceholder":137},[125,1525,1526],{"class":127,"line":141},[125,1527,1528],{},"2. 設定自動格式化\n",[125,1530,1531],{"class":127,"line":147},[125,1532,1533],{},"   - oxfmt \u002F prettier\n",[125,1535,1536],{"class":127,"line":153},[125,1537,1538],{},"   - eslint \u002F oxlint\n",[125,1540,1541],{"class":127,"line":159},[125,1542,138],{"emptyLinePlaceholder":137},[125,1544,1545],{"class":127,"line":165},[125,1546,1547],{},"3. 要求 AI 執行 pnpm check 後再提交\n",[38,1549],{},[11,1551,1552],{"id":1552},"檢查清單",[15,1554,1555],{},"設定 AI 輔助開發時確認：",[19,1557,1560,1569,1575,1581,1587,1593],{"className":1558},[1559],"contains-task-list",[22,1561,1564,1568],{"className":1562},[1563],"task-list-item",[1565,1566],"input",{"disabled":137,"type":1567},"checkbox"," CLAUDE.md 包含所有必要規範",[22,1570,1572,1574],{"className":1571},[1563],[1565,1573],{"disabled":137,"type":1567}," 規範使用 MUST \u002F NEVER 等明確用語",[22,1576,1578,1580],{"className":1577},[1563],[1565,1579],{"disabled":137,"type":1567}," 提供正確和錯誤的範例",[22,1582,1584,1586],{"className":1583},[1563],[1565,1585],{"disabled":137,"type":1567}," 設定 AI Skills 目錄",[22,1588,1590,1592],{"className":1589},[1563],[1565,1591],{"disabled":137,"type":1567}," 自動化流程正確配置",[22,1594,1596,1598],{"className":1595},[1563],[1565,1597],{"disabled":137,"type":1567}," 團隊成員了解 AI 協作規範",[38,1600],{},[11,1602,1603],{"id":1603},"最佳實踐總結",[53,1605,1606,1612,1618,1624,1630,1636],{},[22,1607,1608,1611],{},[92,1609,1610],{},"CLAUDE.md 必備","：專案規範的單一來源",[22,1613,1614,1617],{},[92,1615,1616],{},"Skills 分層","：技術 Skills 自動更新，情境 Skills 手動維護",[22,1619,1620,1623],{},[92,1621,1622],{},"自動化優先","：讓 AI 執行重複性工作",[22,1625,1626,1629],{},[92,1627,1628],{},"人類把關","：關鍵決策由人類做出",[22,1631,1632,1635],{},[92,1633,1634],{},"持續驗證","：不要跳過測試和檢查",[22,1637,1638,1640],{},[92,1639,1151],{},"：複雜任務拆分成小步驟",[38,1642],{},[11,1644,1645],{"id":1645},"系列總結",[15,1647,1648],{},"恭喜你完成了「Nuxt 4 全棧實戰筆記」系列！",[15,1650,1651],{},"我們涵蓋了：",[53,1653,1654,1660,1666,1672,1678],{},[22,1655,1656,1659],{},[92,1657,1658],{},"基礎架構","：專案結構、Nuxt UI、TypeScript",[22,1661,1662,1665],{},[92,1663,1664],{},"認證授權","：Better Auth、RBAC",[22,1667,1668,1671],{},[92,1669,1670],{},"Supabase","：Local-First、RLS、Function 安全",[22,1673,1674,1677],{},[92,1675,1676],{},"Server API","：Nitro、Pinia Colada",[22,1679,1680,1683],{},[92,1681,1682],{},"開發流程","：TDD、AI 輔助開發",[15,1685,1686],{},"這些實戰經驗來自真實專案的踩坑與學習，希望對你有幫助！",[38,1688],{},[11,1690,1691],{"id":1691},"延伸閱讀",[19,1693,1694,1701,1706,1713],{},[22,1695,1696],{},[540,1697,1700],{"href":1698,"rel":1699},"https:\u002F\u002Fdocs.anthropic.com\u002Fclaude\u002Fdocs",[544],"Claude Code 文件",[22,1702,1703],{},[540,1704,545],{"href":542,"rel":1705},[544],[22,1707,1708,1709],{},"上一篇：",[540,1710,1712],{"href":1711},"\u002Fblog\u002Fnuxt\u002Ftdd-testing-workflow","TDD 與自動化測試",[22,1714,1715,1716],{},"系列首篇：",[540,1717,1719],{"href":1718},"\u002Fblog\u002Fnuxt\u002Ffullstack-architecture","專案架構設計",[1721,1722,1723],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":120,"searchDepth":141,"depth":141,"links":1725},[1726,1727,1737,1743,1748,1752,1756,1757,1758,1759],{"id":13,"depth":134,"text":13},{"id":42,"depth":134,"text":43,"children":1728},[1729,1730,1731],{"id":47,"depth":141,"text":48},{"id":83,"depth":141,"text":83},{"id":189,"depth":141,"text":190,"children":1732},[1733,1734,1735,1736],{"id":194,"depth":147,"text":195},{"id":222,"depth":147,"text":223},{"id":334,"depth":147,"text":335},{"id":396,"depth":147,"text":397},{"id":500,"depth":134,"text":501,"children":1738},[1739,1740,1741,1742],{"id":504,"depth":141,"text":505},{"id":534,"depth":141,"text":535},{"id":637,"depth":141,"text":638},{"id":712,"depth":141,"text":713},{"id":846,"depth":134,"text":846,"children":1744},[1745,1746,1747],{"id":849,"depth":141,"text":849},{"id":858,"depth":141,"text":859},{"id":962,"depth":141,"text":963},{"id":1080,"depth":134,"text":1081,"children":1749},[1750,1751],{"id":1084,"depth":141,"text":1085},{"id":1222,"depth":141,"text":1223},{"id":1406,"depth":134,"text":1406,"children":1753},[1754,1755],{"id":1409,"depth":141,"text":1410},{"id":1499,"depth":141,"text":1500},{"id":1552,"depth":134,"text":1552},{"id":1603,"depth":134,"text":1603},{"id":1645,"depth":134,"text":1645},{"id":1691,"depth":134,"text":1691},"Nuxt","2026-01-22","設計 CLAUDE.md 專案規範，建立 AI Skills 系統與自動化開發流程，提升與 AI 協作的效率。",false,"md",null,{},"\u002Fblog\u002Fnuxt\u002Fai-assisted-claude-md",{"title":5,"description":1762},"nuxt-fullstack","Nuxt 4 全棧實戰筆記","blog\u002Fnuxt\u002Fai-assisted-claude-md\u002Findex",[1760,1773,1774,1775],"TDD","Vitest","AI","HQdIZGuFcrVikJ0v24Fv1fC2gfoaAUTpVdPnAHSahks",1780512499430]