Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

規則原因
每做完一個功能就跑一次 npm run buildbuild 不過立刻回報,不要累積問題
build 不過不繼續往下做一個 bug 沒解完,不開下一個主題
每次只修一個東西兩個 bug 一起貼,AI 會混淆

4.10 專案結束回顧 SOP

每做完一個網站,執行以下 15 分鐘流程。這不是額外工作,是讓下一個網站更快完成的投資。

流程

① 你對 AI 說:
   「請讀 PROJECT_NOTES.md,對照 SETUP_GUIDE.md,
    提取這次專案跟之前專案的差異中,
    有哪些值得寫進手冊但還沒寫進去的?」

② AI 回傳 3-5 條建議,每條格式:
   - 教訓:[一句話]
   - 建議寫入:§X.X
   - 原因:[為什麼這是可複製的經驗]

③ 你逐條確認:
   ☐ 寫進去   ☐ 暫緩(等更多案例)   ☐ 不寫(太特殊)

④ AI 把確認的條目寫進手冊對應章節

案例:從 ming-website 提取的教訓

原始經驗寫進手冊哪裡
產品對比表在手機上不能用 <table>,要同時做桌面表格 + 手機卡片兩個版本(hidden md:block / md:hidden§5.3 首頁設計原則
按鈕顏色用 string 欄位讓客戶手打 HEX → 改成 select 下拉(8 色可選)§6.4 設計原則
行銷頁出現「Home Assistant / Zigbee / Intel N100」,客戶會自己 Google 比價,覺得「不就是買零件」§4.6 技術名防洩漏,補真實案例

為什麼這個流程重要

第一個網站 → 手冊有 100% 的「做了什麼」 第二個網站 → 手冊有 100% 的「做了什麼」+ 80% 的「差在哪」 第五個網站 → 手冊開始出現「預測」:接到新案,AI 在你開工前就說「這個客戶需要產品對比表,見 §5.3;這個客戶是科技業,注意 §4.6 技術名洩漏」

記得好,才能越做越快。 PROJECT_NOTES.md 不是工作日誌,是教訓日誌:

❌ 不好的記錄:
  「今天做了產品頁,完成」

✅ 好的記錄:
  「產品頁完成。學到:對比表在手機上不能用 <table>,
   要同時做兩個版本(桌面表格 + 手機卡片)。
   之前以為 responsive 會自動處理,結果不會。
   解法:hidden md:block / md:hidden 兩套並存」

[[#table-of-contents|← 回目錄]]


第 5 章:一頁一頁拆解

👤 你:決定架構、審美驗收🤖 AI:產出 .astro 檔案、確保手機/桌面雙版正常

5.1 頁面總覽(13 頁)

路由檔案類型說明
/index.astro動態首頁 Hero + 3 卡片 + 最新 3 篇
/blogblog/index.astro動態部落格文章列表
/blog/[...slug]blog/[...slug].astro動態文章 detail
/destinationsdestinations.astro動態目的地卡片列表
/destinations/[slug]destinations/[slug].astro動態目的地 detail
/gallerygallery.astro動態攝影集 + Lightbox
/aboutabout.astro動態關於我(CMS collection)
/contactcontact.astro靜態聯絡表單(mailto)
/admin-guideadmin-guide.astro靜態後台使用說明
/404404.astro靜態404 頁面
/privacyprivacy.astro靜態隱私權政策
/termsterms.astro靜態使用條款
/rss.xmlrss.xml.ts動態RSS Feed

5.2 核心架構:Layout.astro

---
import Header from '../components/Header.astro';
import Footer from '../components/Footer.astro';
const siteUrl = 'https://你的網域';
const { title, description, image } = Astro.props;
---
<head>
  <title>{title}</title>
  <meta property="og:title" content={title} />
  <meta property="og:image" content={`${siteUrl}${image}`} />
  <link rel="alternate" type="application/rss+xml" href="/rss.xml" />
  <script type="application/ld+json" set:html={...} />