這個部落格,我想了兩年.

說「想」其實不太準確,更像是一種執念。早期我還不會寫前後端,也不會寫嵌入式程式碼,當時還在玩電子,偶然間看到@ushio的 B 站影片和網站,覺得很好玩,我也想試試看。後來花了半年左右的時間,從零學會寫 C 和一點點 JS/CSS,使用 Hexet 搭建了一個靜態部落格,部署在 GitHub Pages 上,也算是擁有了自己的小天地。

Hexo:快速、簡潔且強大的部落格框架。 , hexo.io, opens in new tab
這是一張 Hexo 專案首頁的螢幕截圖,網站採用深色主題,具備六角形的「H」標誌,頂部導覽列包含 Docs、API、News、Plugins、Themes 與 About。首頁大標題寫著「快速、簡潔且功能強大的部落格框架」,下方是一行類似終端機的安裝指令 `npm install hexo-cli -g`,旁邊顯示 41k GitHub 星標、5k 分支、每月 212k 下載次數,以及 X 上 @hexojs 的關注數。其下是一條發佈時間表,列出 8.1.0(2025-10-26)、8.0.0(2025-09-16)、7.3.0(2024-07-02)與 7.2.0(2024-04-17)等版本,接著頁面進入功能區段,強調「極速」與「Markdown 支援」。此圖證明了 Hexo 目前的發佈節奏與官方網站上顯示的社群採用指標。
Hexo:一個快速、簡潔且功能強大的部落格框架。 , hexo.io, opens in new tab
這是一張 Hexo 專案首頁的螢幕截圖,網站採用深色主題,具備六角形的「H」標誌,頂部導覽列包含 Docs、API、News、Plugins、Themes 與 About。首頁大標題寫著「快速、簡潔且功能強大的部落格框架」,下方是一行類似終端機的安裝指令 `npm install hexo-cli -g`,旁邊顯示 41k GitHub 星標、5k 分支、每月 212k 下載次數,以及 X 上 @hexojs 的關注數。其下是一條發佈時間表,列出 8.1.0(2025-10-26)、8.0.0(2025-09-16)、7.3.0(2024-07-02)與 7.2.0(2024-04-17)等版本,接著頁面進入功能區段,強調「極速」與「Markdown 支援」。此圖證明了 Hexo 目前的發佈節奏與官方網站上顯示的社群採用指標。

再后来,看到了 @Innei 的小站,设计很精致、功能也很全,当时的我看了一眼我就想要,甚至还赞助支持了,虽然后面没用上但是这钱也花的不怨 因为我摸到了 React 源码,就和我最初看到 C 一样,不过就是代码嘛,有什么大不了的,总有一天我要自己写一个。

ushio , sakura-ushio.icu, opens in new tab
個人部落格首頁的螢幕截圖顯示側邊欄有一個動漫風格的頭像,名稱「小汐」、「首頁」連結,以及「所有文章/友鏈/關於我」導覽,並伴有 GitHub 與其他社群圖示,位於置頂文章的資訊流旁。最上方的文章於 2023-01-29 發布,標記為「置頂」,標題為「PD-METER-R4」,註記為「正在開發,相較於 R3 優化布局,更換主控,增加少量新功能」,並透過兩張照片展示標示為「USBC-R4 SAKURA」的綠色 PCB,分別為元件面與裸露的背面,放置於布料背景上。其下方是第二篇標題為「WORX-BAT-Charger」、日期為 2023-02-14 的文章,畫面在底部被截斷。此圖片作為正在進行的硬體專案的證據,記錄 USB‑C PD(電力傳輸)測量裝置的迭代修訂。

之後,我看到了 @Innei 的小站,設計很精緻、功能也很完整,當時我看了一眼就想要,甚至還贊助支持了,雖然後來沒用上,但這筆錢花得不後悔,因為我接觸到了 React 原始碼,就像我最初看到 C 時一樣,不過只是程式碼而已,沒什麼大不了的,總有一天我要自己寫一個。

寧靜的森林

那是 2024 年,然後 24、25、26 年到現在

從那之後就停不下來了。

失控

一開始只是想給 @colmugx Hexo 主題 Nlvi 加個深淺色切換,用 Dark Reader 的 JS 糊了一個,醜,不滿意。然後學 CSS @media,再到 JS SPA 切換,TailwindCSS .dark class, 再到 SSR next-theme,最後手搓 Cookie + Head Sync Inline 腳本解決 FOUC 閃爍,我折騰了四五種方案。

🎨 一個簡潔的 Hexo 主題。 , github.com, opens in new tab
這是一張宣傳部落格主題的螢幕截圖模型,左側顯示帶有珊瑚色底線的「Nlvi」文字商標標誌,旁邊配有兩個重疊的瀏覽器視窗預覽,展示使用 Hexo 靜態網站生成器建構的網站。兩個預覽窗格均顯示同一篇發佈於 2013-12-27 的示範文章,標題為「Elements」,內容為佔位的 Lorem Ipsum 文本,並呈現完整的排版範例:從大到小的 1 至 6 級標題、帶有樣式連結的段落、粗體、斜體、底線文字及引用區塊,接著是一個三欄表格,表頭為「Table Header 1/2/3」且有「Division」列。頂部導覽列顯示「ARTICLE、ARCHIVES、TAGS、ABOUT」以及搜尋圖示,表明這是一個風格指南或主題示範頁面,用於展示 Hexo 主題中 HTML 元素的呈現效果。

但這只是冰山一角。看到 React 之後,我從石器時代的 Hexo 和 Vanilla JS 一路走到了 Next.js 13 Page Router,又拐去看 Vue、研究 SPA 路由、理解 index.html fallback,專案新建了無數次。買了伺服器,折騰 Docker、Nginx、NAS,嫌 1Panel 醜手寫了 Canopy 面板 研究 NAS 儲存陣列寫了 RFS,搞 SSL 被國內環境折磨的 acme.sh 抽風逼到用 Rust 寫了個反向代理:Vane & Lazyacme,本來只是一个晚上三小時寫出來的八百行垃圾,結果群友一怂恿,寫了四個月,HTTP/3、Zero‑Copy、Layer 模型、Flow 引擎全往裡塞。後面還有 Seam,一個全棧框架,也是天坑,以後再說吧。

過度工程

然後 AI 時代來了,焦慮又翻了一倍

最具諷刺意味的是,這些東西本來應該是在有了部落格之後,一邊記錄一邊完成的。結果部落格一再草草收場,想法越來越多,卻找不到地方記錄它們。一方面內心在譴責;說好要完成 Vane,卻做不到,只好停下;另一方面則是越做越遠的無力感。我一直記得自己想做什麼,但就是做不出來。仔細想想,我其實已經很久沒坐下來寫什麼東西了,現在回頭看,這一切都指向同一件事——過度工程。

我當時其實並不不覺得自己在跑偏。Vane?反正部落格以後也要部署,總得有個反向代理吧。Seam?反正遲早要寫全棧,不如先把我理想中的框架搞好。每一步都有理由,每一步都是"以後用得上"。但問題是,"以後"永遠不會來,因為我從未開始...

失敗

做部落格實際上不需要一個反向代理,不需要一個自研框架。而當時的我把它們當成了前置條件,作為了那個永遠 Blocking 但是卻合理的理由,但它們從來都不是。真正的前置條件只有一個:坐下來,把第一篇文章寫出來。

其實部落格不是沒動過,恰恰相反,我做了三次

Vercel , vercel.com, opens in new tab
這是一張 Next.js 首頁的螢幕截圖,採用深色主題,具有三角形標誌,頂部導覽列列出 Showcase、Docs、Blog、Templates、Enterprise、一個搜尋列,以及 Deploy 與 Learn 按鈕。主視覺區寫著「The React Framework for the Web」,其下的說明文字指出 Next.js 被全球一些最大的公司用來使用 React 元件建構高品質的 Web 應用程式。其下方有「Get Started」與「Learn Next.js」兩個按鈕,以及一行類似終端機的指令列「npx create-next-app@latest」,顯示此網站是該框架官方的行銷與上手導覽頁面。

第一次還是 Next.js 13 Page Router 那會。那時候我蒙懂 SPA 是什麼,SSR、SSG、ISR 這些概念一個都不清楚,但看別人說 SSR 好,那我也要用。結果寫著寫著發現自己根本不理解這些架構在解決什麼問題,做不下去了。後來呢,轉 Vue 2 純 SPA,為什麼選 Vue?說來慚愧,覺得名字好聽,反正也新,試試呗。也沒撐多久。第三次回到 React,從單 JSX 開始,學了 TypeScript,會了 TSX,理解了 CJS 和 ESM 的區別,愛上了 Reactive,用上了 Lucide、Framer Motion、Radix UI 這些日後離不開的庫——這次終於像點樣子了。但我還是失敗了,因為本質上我只是在模仿,別人用什麼我就拿來用,看起來像那麼回事,實際上根本不理解為什麼要這樣做。再加上 AI 的幻覺加持,很多東西都能跑起來一個 MVP,但 Scale Up 的時候全是坑。

Remix , remix.run, opens in new tab
這是一張 Remix 框架網站的螢幕截圖,左上角是 Remix 標誌,右上角有導覽列連結至 Blog、Jam、Store 和 V2 Docs。畫面中央的標題寫著「Remix 3 正在積極開發中」,副標題為「一個基於 Web APIs 的全新全端框架」,其下是一幅車形物件被黑色布料覆蓋的插圖,布料覆蓋在引擎蓋上時露出 Remix 箭頭標誌和一條彩虹條紋的對角帶。這張覆蓋在車上的圖像讓人聯想到產品發表或預告,暗示 Remix 3 是即將推出且仍在開發中的版本。

後來又學了 React(Remix) Router Loader、Next.js 15 App Router、RSC,但這時候日常已經很忙了,沒什麼時間寫程式,倒也沒機會第四次失敗。現在想起來,我的網站從 Next.js 13 寫到了 Next.js 15,前腳剛遷移完成,還沒上線,Next.js 16 beta-1 就出了。

放手吧

說"想開了"其實不準確,是我累了。

一張螢幕截圖,顯示在終端或應用程式視窗中,深色主題的資料表,標題為截斷的路徑,結尾為「roject」,列出 2026-03-03 至 2026-03-13 的每日模型使用情況,欄位包括使用的模型(haiku-4-5、opus-4-6、sonnet-4-6 的組合)、多個數值使用欄位達到十億級別,最後的美元成本欄位每日介於約 97.92 美元至 1,765.56 美元。最高成本與代幣數出現在 2026-03-09(最大欄位超過 32.7 億,成本 1,765.56 美元),而 2026-03-12 則急速下降至 97.92 美元,暗示該日僅部分或異常。這似乎是 AI API 使用與計費追蹤的證據,可能來自軟體專案的成本監控儀表板。

AI 時代的節奏太快了。模型一個接一個迭代,新技術一輪接一輪冒出來,我越來越焦慮,好像停下來就要被超越。最瘋的時候一天寫 16 個小時代碼,Token 一天就能燒 $1.9k USD (大概 2 月的時候吧),人快廢了。但讓這一切停下來的不是什麼頓悟,就是單純的累了。在越來越緊的節奏下,最後一根稻草壓下來,我反而釋然了,想開了,擺爛了;這樣,也挺好的。

我開始放手。放棄曾經執著的東西,學會點到為止,明天的事明天再說。Vane 沒做完?先放著。Seam 還差很遠?以後再來。部落格不完美?先上線。開始完全 Vibe Coding,沒問題就不管,有問題再說。

奇怪的是,放手之後品質並沒有變差。我想這大概是因為之前那些「古法」程式設計的日子沒有白費;早在 GPT-2 時代我就開始使用 AI 了,但那時候我還在老老實實地寫每一行程式碼、理解每一個概念。那段經驗給了我底子,與其說後來 Vibe Coding 不如說是 Context Coding,該有的判斷力還在,並沒有因為放手就出什麼低階錯誤或是事故。

是之前所有的折騰,給了我現在放手的資本

原點

最終的方案反而很簡單:All in Cloudflare。R2 物件存儲、D1 Edge 資料庫、KV 做快取、Worker 跑 SSR,全部 Serverless,沒有伺服器。

Cloudflare Worker , workers.cloudflare.com, opens in new tab
這是一張行銷網站首頁區塊的截圖,畫面呈現在暖色橘色漸層背景上,帶有細微的點狀紋理。頂部有一條導覽列,包含「Products」、「Solutions」、「Resources」和「Pricing」的連結,右側則有「Login」與「Start building」按鈕。標題寫著「Everything we learned from powering 20% of the Internet — yours by default」,其下的說明文字指出公司為 Cloudflare,並將其描述為「具備運算、AI 推論與儲存的 AI Cloud」,讓使用者「直接交付應用程式,而非管理基礎設施」,下方中央再有一個「Start building」的行動呼籲按鈕。

這個答案諷刺嗎?太諷刺了。因為在到達這個「簡單」的終點之前,我走了一整圈彎路。曾經計畫自建,所以要管伺服器、折騰 Docker、管容器,於是寫了 Canopy 做管理面板,寫了 Lazycert 管證書,寫了 Vane 做反向代理,寫了 Twig 做資源監控埋點。一堆專案,就為了伺候一台垃圾伺服器。

存儲也是一樣。我嫌對象存儲貴,想用自己伺服器的硬碟,於是寫了 RFS 一種 vfs 為了原子去重合併單文件,甚至復活了 80‑90年代 的註冊表理念,最後還透過 FUSE 掛載起來了。結果呢,花了更多時間造了一個不那麼好的輪子,伺服器還空跑了一年,完全就是徹底的虧本生意。

Vercel , vercel.com, opens in new tab
Vercel 行銷首頁的螢幕截圖,背景為黑色,頂部導覽列顯示「Products(產品)」「Resources(資源)」「Solutions(解決方案)」「Enterprise(企業)」與「Pricing(定價)」,以及「Ask AI(詢問 AI)」「Log In(登入)」「Sign Up(註冊)」按鈕,位於三角形的 Vercel 標誌旁。下方有大標題「在 AI 雲端建置與部署」,接著的說明文字為「Vercel 提供開發者工具與雲端基礎設施,協助建置、擴展與保護更快速、更個人化的網站」,並有兩個按鈕分別寫著「開始部署」與「取得示範」。畫面下半部以發光的多面體三角棱鏡為主體,呈線框網格風格,藍、綠、橙、紅光在格狀背景上輻射,顯然是 Vercel 標誌的立體化、風格化藝術呈現。

最後繞了一大圈,還是回到了 Serverless,Vercel 的概念不錯,但我不喜歡 Next.js;而且 Vercel 的魔法太多了,還有那個中間件設計提前編譯跑在 Edge 上,最後仍然割裂,甚至出了幾個 CVE,還不如把所有東西都放在源站一起。相較之下 Cloudflare Worker 就很好,達到了另一種極端,小於 10 MB 的產物編譯成 WASM,能在 Edge 上執行真正的業務邏輯,這正是我想要的。除了花錢之外沒什麼缺點──但說起來也不算缺點,畢竟省下的時間就是錢。

少即是多

這句話我聽過無數遍,但花了兩年才真正理解它的含義。

回歸工程的本質:「Make it function, make it correct, then make it exceptional.」我終於走上了正軌,讓它 functional 了。現在的部落格簡陋嗎?簡陋。不完整嗎?確實不完整。但總比沒有好。如果你連上線都沒有,一直在做那個「也許需要」的東西,一直在追求看不見的完美,最後什麼都拿不出來。這不是妥協,而是工程上的取捨,反正我已經想開了。所以我想開了。不再為一個細節執著,反而走出了門。手機相簿裡已經很久沒有戶外的照片了,隨手拍了一下路邊的——已經很久沒出門了。

這是一張戶外拍攝的照片,俯視沿街道或人行道種植的低矮茂密的小葉灌木樹籬,花崗岩路緣從左下角斜向右上方,左下角可見鋪好的道路。樹籬上淡綠色的新芽點綴在較暗的木質枝條上,樹幹基部在上緣附近可見,灌木後方是一條覆蓋有覆蓋物或裸露的棕色地面。明亮的直射陽光在葉子和路緣上投下銳利的陰影,暗示照片拍攝於正午左右。

回頭看之前走的彎路,後悔嗎?不後悔。有些事你不自己試試,也許永遠想不明白。更何況在 AI 時代,想走我當年的老路已經基本沒有機會了,太多工作流已經被改變。另外這個專案是 Taki,100% AI Coding,但這不意味著不能長期維護,不意味著沒有人味。其實有沒有 AI 不重要,再說了,我喜歡的也不是寫程式本身,而是 Building 一個東西...