Migration 之後發生乜事:8 日嘅複利回報
我將個 blog migrate 到 Next.js,以為最難嘅部分已經過咗。然後複利開始——8 日內 6 篇 mega guide、一個更醒嘅 AI 助手、原生 newsletter、bot 保護同 SEO 大翻新。
八日前,我用 4 日 rebuild 咗成個 blog backend。我將 485 篇 WordPress 文章 migrate 到 Next.js,令 Sydney(我嘅 AI chatbot)復活,同 ship 咗一個 production site。
我以為呢個就係個故事。Migration done,慶祝,move on。
我錯咗。Migration 唔係終點——佢係起跑線。
以下係我個 site 喺 2 月 5 日 vs 今日嘅對比:
| Feature | 2 月 5 日(Migration 當日) | 2 月 13 日(今日) |
|---|---|---|
| Blog posts | 485(由 WordPress migrate) | 492(6 篇新 mega guide) |
| Sydney AI | 基本 RAG,未測試過質量 | 評估過、優化過、81% hit rate |
| Newsletter | Beehiiv embed(第三方) | 原生 Supabase + Resend,按興趣分 |
| SEO | 基本 sitemap + meta tags | Structured data、FAQ schema、llms.txt、AEO |
| 安全 | 只有 rate limiting | Cloudflare Turnstile + rate limiting |
| 性能 | 基本 Lighthouse check | 用 Chrome DevTools MCP 做系統性 profiling |
| Featured images | 手動整 | AI 生成 pipeline(Gemini + auto-optimize) |
每一個改進嘅發生都係因為前一個令佢變得更容易。呢個就係我冇預期到嘅複利。
Unlock:你嘅 Blog 而家係 Code
冇人會話你知由 WordPress migrate 到 code-based stack 之後嘅一件事:migration 本身唔係重點。 重點係之後變成可能嘅嘢。
當你嘅 blog 係 Git repo 入面嘅 492 個 MDX 檔而唔係 MySQL database 入面嘅 row,一切都變咗:
- 每篇文章係一個檔 — Claude Code 可以大規模 read、search 同 modify
- 每個改動係一個 diff — 你可以 review 50 篇文同時改咗乜
- 每個 feature 係 composable — 你嘅 newsletter system 可以讀同 AI chatbot 一樣嘅 post metadata
- 每次 deploy 係一個 command —
pnpm build && vercel --prod,搞掂
用 WordPress,update 12 篇 blog post 意味住 login wp-admin、逐篇 click、改嘢、update、repeat。用 MDX 檔同 Claude Code?我可以話「喺所有 12 篇現有公園指南加返國家公園 pillar post 嘅 link」然後佢就 read 每個檔、喺啱嘅 context 加啱嘅 cross-link、然後 show 我 diff。全部 12 個 update 幾分鐘搞掂。
呢個就係 unlock。唔係 migration。係之後嚟嘅 velocity。
4 日寫 6 篇 Mega Guide
Migration 之後我 build 嘅第一樣嘢?Content。好多。
我想咗幾個月寫全面嘅 expat 指南——嗰種 2,000-4,000 字嘅 pillar post,真正幫到正喺搬到美國嘅混亂中嘅人。WordPress 令呢件事好痛苦。每篇文要手動 formatting、upload 圖片、設定 SEO plugin、管理 category。
而家?Pipeline 係咁嘅:
- Brainstorm 文章結構同大綱
- 寫 成篇 MDX,SEO/AEO 優化一齊做
- 生成 featured image — Claude 讀篇文、寫 prompt、send 去 Gemini 生成圖
- Optimize — Python script 轉 WebP、壓縮 for web
- Upload 去 Vercel Blob
- Publish —
git push、vercel --prod、pnpm db:publish - Sydney 即刻知 — 篇文 sync 到 Supabase 連 embedding
以下係嗰 4 日 ship 咗嘅嘢:
| 文章 | 題目 | 字數 |
|---|---|---|
| Healthcare 指南 | HSA、FSA 同 HDHP 解釋 | ~3,200 |
| Credit Building | 由零到 720+ credit score | ~3,500 |
| 儲蓄同投資 | T-Bills vs HYSA 比較 | ~2,800 |
| 信用卡 Rewards | Points、miles、cashback 策略 | ~3,000 |
| 搬遷指南 | 完整搬到美國 playbook | ~3,800 |
| 國家公園 | 26 個公園、4 條 road trip | ~4,200 |
每篇文都跟同一個 AEO pattern:answer-first 開頭、comparison table、120-180 字 section、bold 定義、底部 FAQ schema。呢種結構可以獲得多 340% 嘅 AI 引用。
國家公園指南係最大嘅——一篇 pillar post link 返 12 篇現有嘅公園 review。我同時 build 咗一個 PhotoGallery component,因為 scroll 過 20 張獨立圖片好恐怖。而家係一個乾淨嘅 grid 加 lightbox。簡單,但有效。
Sydney 變聰明咗
當我喺 migration 期間復活 Sydney,佢係 work 嘅——我 launch 前手動測試過。佢可以答問題、搵相關文章、cite sources。但手動測試只會話你知「呢個 seem okay」。佢唔會話你知 幾 okay,或者邊度有 gap,或者點樣改善。
我冇系統性嘅方法量度質量——冇 measurement 就冇辦法改善。
所以我 build 咗一個 RAG evaluation framework。32 個測試 query 涵蓋 12 個 category,每個都有我 hand-curate 嘅 expected result。好似「Expat 應該攞咩信用卡?」應該 return credit building 指南。「同我講 Yosemite」應該 return Yosemite 遊記。
然後我測試咗 30 個唔同嘅設定組合——6 個 similarity threshold × 5 個 result count——量度 hit rate、precision 同 temporal diversity。
結果令人大開眼界:
| 指標 | 之前(Default) | 之後(Optimized) |
|---|---|---|
| Hit rate | ~30% | 81.2% |
| Zero-hit queries | 30 個入面 6 個 | 30 個入面 0 個 |
| Temporal spread | 1.2 年 | 6.7 年 |
最大嘅 fix 係尷尬嘅:OpenAI SDK 喺 Next.js 下面靜靜 drop 咗 dimensions parameter。Sydney 生成緊 1536-dimension embedding 但 search 一個 384-dimension index。難怪結果差。轉用直接 fetch() call 一晚之間就 fix 咗。
我同時擴展咗 Sydney 嘅 system prompt 涵蓋所有 490+ 篇 blog 嘅題目——佢而家識講國家公園、信用卡、healthcare 同完整嘅 expat 內容庫。唔再只係 AI 同 marketing。
兩個 command 自己試:
pnpm eval:rag # 用 local Supabase 測試
pnpm eval:rag:prod # 用 production 測試
而家我可以真正量度 Sydney 幾時變聰明。呢種 infrastructure 你喺 WordPress 永遠唔會 build。
大規模做 SEO 同 AEO
2026 年嘅 SEO 唔再只係 Google。佢係關於當有人問你嘅內容可以答嘅問題時,被 ChatGPT、Perplexity 同 Claude 引用。
我喺一個 weekend 做咗完整嘅 SEO/AEO stack:
傳統 search:
- 動態 sitemap(639 頁 indexed)
- Structured data — Person、WebSite、Article、BreadcrumbList、FAQPage schemas
- RSS feed for syndication
- Google Search Console verified
AI 引擎(AEO/GEO):
llms.txt— 俾 AI crawler 嘅 priority content guide(GPTBot、Claude-Web、PerplexityBot 全部喺robots.txt俾入)- 每個 section 開頭嘅 answer-first pattern(頭 150 字嘅 bold key statement)
- 問題格式嘅 H2 配合人問 AI 助手嘅方式
- FAQ section 自動偵測並 render 成 FAQPage schema
性能:
我用 Chrome DevTools MCP profile 唔同嘅頁面類型——homepage、blog listing、個別 post、/ask 頁面——同搵出 bottleneck。可以喺同一個 Claude Code session run performance trace、分析結果、fix 問題係⋯⋯不合理地高效。
結果?我寫嘅每篇新文自動有 structured data、FAQ schema(如果有 FAQ section)、同 format for AI extraction。冇 plugin。冇手動設定。呢個就係 site 而家嘅運作方式。
Beehiiv Out,原生 Newsletter In
呢個令我意外。我有一個喺 Beehiiv 運作嘅 newsletter。佢收 email。佢 send 更新。點解要換?
三個原因:
- 控制 — 我想要按興趣嘅 subscription。「AI 同科技」嘅訂戶唔應該收到國家公園內容。Beehiiv 免費 tier 唔 support。
- 整合 — 我嘅訂戶數據而家同 Sydney 嘅 search index 住喺同一個 Supabase database。One source of truth。
- 成本 — Supabase(free tier)+ Resend(free tier for low volume)= $0/月。
我 build 嘅系統:
- Double opt-in — subscribe → verification email → confirmed → welcome email 連個人化推薦
- 5 個興趣 group — AI、Expat Life、Leadership、Marketing、Travel & National Parks
- Smart matching — post category 自動 map 到訂戶興趣。當我 publish 信用卡指南,只有「Expat Life」訂戶收到通知。
- Daily cron — Vercel 喺 PST 11 AM run job,搵過去 48 小時嘅文章,send targeted 通知
- Deduplication —
notification_logtable 防止重複 email,永遠
最正嘅部分?每篇 blog post 底部嘅 subscribe form 根據文章嘅 category 自動 pre-select 相關興趣。睇緊 AI 文章?當你 scroll 到底 subscribe 嗰陣「AI 同科技」pill 已經 pre-selected。
由零開始 build 呢個聽落好多工。大約一個晚上嘅 focused effort。Supabase migration、API routes、email templates 同 cron job — Claude Code handle scaffolding 而我 focus logic 同 copy。
安全:隱形直到你需要
有一個 public-facing AI chatbot 同 newsletter signup,我有兩個 bot 最鍾意 abuse 嘅 endpoint。Rate limiting 已經有(Upstash Redis,每分鐘 5 個 request),但我想要第二層。
Cloudflare Turnstile 登場——一個隱形 CAPTCHA,只係喺懷疑可疑活動先 show challenge。99% 嘅真實訪客完全隱形。對 bot?一道牆。
我先加喺 /ask endpoint(Sydney chat),然後用完全一樣嘅 pattern 加喺 /api/subscribe。同一個 verification library、同一個 graceful degradation:
- 冇設定環境變數 → bypass(local dev 唔需要)
- Cloudflare API down → fail-open(rate limiter 做 fallback)
- Token missing 但 secret key 有設 → reject(捉到 bypass frontend 嘅 bot)
呢個 reuse 就係點解係 compounding 嘅故事。Newsletter 嘅 Turnstile integration 用咗幾分鐘而唔係幾個鐘,因為 infrastructure 由 Sydney 嗰度已經有。
複利效應
以下係我冇 plan 但自然發生嘅嘢:
Migration 到 Next.js(2 月 1-5 日)
└─→ MDX 檔令 Claude Code 可以大規模 read/modify 內容
└─→ 6 篇 mega guide 寫好連 SEO/AEO 優化(2 月 6-11 日)
└─→ 新內容暴露 Sydney 嘅搜索質量問題
└─→ RAG eval framework build 好,Sydney 優化(2 月 11 日)
└─→ 更多內容需要 newsletter(唔係 Beehiiv)
└─→ 原生 newsletter build 喺 Supabase 上(2 月 12 日)
└─→ Public endpoint 需要 bot 保護
└─→ Turnstile 加到 Sydney + subscribe(2 月 12-13 日)
冇一個係作為 sequence plan 嘅。每一個 reveal 下一個需要。Migration 令內容創作快。快嘅內容創作暴露搜索質量 gap。Fix 搜索令我想要更好嘅 distribution。更好嘅 distribution 需要保護。
呢個就係複利。 每個改進唔止係加 value——佢 multiply 之前所有嘢嘅 value。 :)
而條 common thread 穿過所有嘢?我 site 嘅每一部分而家都係 code,可以被 programmatically read、test 同 modify。呢個就係真正嘅 unlock。
數字
因為我知你想知:
| 指標 | 數值 |
|---|---|
| Migration 以來嘅日數 | 8 |
| 新 blog post | 7(包括呢篇) |
| 新 feature shipped | 6(newsletter、Turnstile ×2、RAG eval、SEO stack、PhotoGallery) |
| Blog post updated | 12+(cross-linking、broken link fix) |
| 新增 code 行數 | ~5,600 |
| 新增 database table | 2(subscribers、notification_log) |
| 新增 API endpoint | 4(subscribe、verify、unsubscribe、cron) |
| 成本增加 | $0/月(全部 free tier) |
What's Next
我仲未完。Compounding 仲未停:
- 更多 expat 指南 — 稅務策略、簽證時間線、銀行比較。呢個系列有腿。
- Sydney 繼續變聰明 — 而家我可以量度質量,我想將 hit rate 推過 90%。
- 更多用 AI build 嘅 deep dive — 啲工具每個星期都喺進化。我邊做邊記錄。(最新:喺唔識 Swift 嘅情況下 build 原生 iOS app,同發現 AI 帶你去到 60%——最後嘅 40% 先係 product 真正所在。)
但老實講?我主要只係興奮可以繼續寫。17 年 blogging 以來第一次,publish 新文真正係好玩——唔再係 45 分鐘嘅 WordPress 苦差。 :D
你有冇試過 migration 或大嘅技術決定之後呢種 compounding?我好奇——你第一個意料之外嘅 unlock 係乜?
祝好,
Chandler
常見問題
網站開發入面嘅複利效應係乜?
複利效應係當你 site 嘅每一個改進令下一個改進變得更快更容易。 例如,migrate 到 code-based stack 令 AI 輔助嘅內容創作成為可能,呢個暴露咗搜索質量問題,呢個帶到 build evaluation framework。每一步都 build on 前一步。
點樣優化 blog post for AI 搜索引擎?
AI 搜索引擎偏好結構化、answer-first 嘅內容配清晰嘅 heading 同精簡嘅 section。 關鍵技巧包括:頭 150 字嘅 bold definitional statement、問題格式嘅 H2 heading、comparison table、120-180 字嘅 section 同 FAQ schema。呢啲 pattern 可以獲得多達 340% 嘅 AI 引用。
RAG evaluation framework 係乜?
RAG evaluation framework 測試你嘅 AI 助手搵到同 return 相關內容嘅能力。 佢用預定義嘅 query 配 expected result(ground truth)同量度 hit rate、precision 同 temporal diversity 等指標。呢個令你可以系統性優化搜索設定而唔係靠猜。
點解用自定 newsletter system 取代 Beehiiv?
自定 newsletter system 俾你完全控制訂戶數據、按興趣 targeting 同同你現有 database 嘅整合。 用 Supabase + Resend build,我得到按興趣嘅 subscription、自動通知同 $0/月 hosting——全部同 Sydney 嘅 search index 整合。
Cloudflare Turnstile 同傳統 CAPTCHA 有咩分別?
Cloudflare Turnstile 係一個隱形嘅 bot 偵測系統,只對可疑訪客 show challenge。 唔似傳統 CAPTCHA 要每個用戶解 puzzle,Turnstile 對合法用戶靜靜運行。佢用 browser signal 偵測 bot 而唔打斷用戶體驗。
仲喺 code、仲喺學、仲喺睇住 compound interest 增長。




