十年沒寫程式,我用 Claude Code 蓋了一個網站|奇鋒國際 PeakQi 跳到主要內容
← 回到觀點 製作筆記

十年沒寫程式,我用 Claude Code 蓋了一個網站

我會寫程式,但十年沒動過;我做動畫,但不會製作素材。16 個工作天、414 個提交,一個人從零做出中英雙語 32 頁的公司官網。這是完整的工作記錄——包含卡住的那一天、丟掉的東西,以及一個我沒想到的解法。

2026 年 8 月 8 日 · 11 分鐘閱讀

品牌屋 3D 塔樓——六個房間對應六門生意,隨頁面捲動一層一層走上去

我是 Allen,奇鋒國際的成員。

先把位置站清楚,不然後面講什麼都是虛的:我會寫程式,但大概十年沒動過了。我也做動畫,一個畫面精不精緻、節奏對不對,我看得出來。

我沒有的是另一半能力——製作素材。把腦袋裡的東西變成可以用的圖層、模型、貼圖、分鏡,我做不到。過去十年技術棧也換了好幾輪,我知道該做什麼,但不知道現在該怎麼做。

所以這個專案我的分工很明確:用 Claude Code 安排開發流程、盯著它除錯、一輪一輪把視覺推到夠精緻為止。判斷留在我這邊,產出交給它。

停手十年最直接的後果是,我腦袋裡的技術架構停在十年前。這一塊它補得最好——不只是照著我說的做,而是主動給前端上的建議:這個效果現在有更省的做法、這個結構在手機上會出問題、這裡可以改成瀏覽器原生支援的方式。我不必先去補完十年的技術債,就可以直接想「我要什麼畫面」,然後放手去試。

結果它做到了。

2026 年 7 月 16 日到 8 月 8 日之間,我用 Claude Code 從零蓋出公司官網 peakqi.com——中英雙語共 32 個頁面、一段 three.js 的捲動分鏡、一層可以整個關掉的 WebGL 增強層,還有兩支自己寫的素材產生管線。

全部的程式碼都公開在 GitHub,提交歷史沒有整理過。

這篇不是成功心得,是工作記錄。


這個網站到底是什麼

不是模板。技術規格如下:

項目內容
架構原生 JavaScript,沒有前端框架。全站文案、價格、案例集中在單一 content.js
首頁three.js 載入一顆 42 網格的相機 GLB 模型,隨捲動經歷組裝、拆解、零件說明、攤開藍圖、組回原型、翻面六個階段
渲染層hero-engine.js(Canvas 2D 分鏡)、gl-engine.js(WebGL 增強層,可整層關掉)、micro-engine.js(微互動)
降級策略reduced-motion、save-data、deviceMemory < 4、寬度 < 900、context lost、shader 失敗——任一條件成立就自動降級,敘事完整保留
素材產生器tools/gen-allen-art.mjs(194 條 SVG 路徑歸位成九塊剛體)、tools/gen-allen-room-assets.py(40 層拆解,內建自我驗算)
部署Vercel + GitHub Actions;表單走 serverless function 分流到 Google 試算表 / Email / Notion
語言繁體中文與英文,各 16 頁
首頁分鏡第 02 階段「拆解」:相機本體與對應的字卡同時在場,右側是階段索引
首頁分鏡第 02 階段「拆解」:相機本體與對應的字卡同時在場,右側是階段索引

想直接看成品的話,首頁案例方案說明 是三個最能看出差異的地方。


16 天的節奏

日期提交數主要進展
7/16–7/1828骨架、部署管線、解決方案頁動畫
7/1960首頁相機分鏡;LCD 影片定位(見下一節)
7/20–7/2152場景架構重構、手機全面修正
7/2261六隻怪獸、品牌卡動畫、全站文案重寫
7/232RWD 修正
7/24–7/310停工
8/01–8/0212乾淨網址、表單收件端點上線
8/03–8/0451手機版總審查、技術 SEO、設計衝刺
8/0557三輪實機回饋、Allen 小劇場、選單彩蛋
8/0645英文版 16 頁全站上線
8/07–8/0841收尾與潤飾

多數日子投入 3–4 小時,衝刺日更長。

截至 2026 年 8 月 8 日,整個 repo 共 414 個提交,其中 409 個落在上面這 16 個工作天裡(另外 5 個是五月設定網域與 repo 時留下的)。你可以用 git rev-list --count HEAD 自己數。


卡住的那一天:7 月 19 日

我要把五支業務短片貼到 3D 相機背面的 LCD 螢幕上。聽起來是小事。那天的 60 個提交裡,超過一半在處理這一件事。

嘗試順序,照 commit 記錄:

  1. three.js VideoTexture 貼在平面上 → 影片溢出螢幕
  2. 無盡調整定位參數(vpx0.88/vpy-0.06vpx0.667/vpy-0.251vpx0.851/vpy-0.268⋯)
  3. 用 shader 寫 rounded-box SDF 遮罩做圓角
  4. 手切自訂 8 控制點 BufferGeometry,斜角要貼合螢幕開口
  5. 卡頓、銳角、飄移,整個方案放棄
  6. 改成 DOM 影片疊層:每幀把 3D 螢幕的控制點投影成畫面像素,動態設定 clip-path
  7. 錨點還是用猜的 → 改成錨到 GLB 裡真正的螢幕面 mesh(Object_12)
  8. 開始窮舉角度:+3 度 → 削到角落 → 0 度 → +1.5 度 → −2 度
  9. 圓角改成 24 個控制點,但 clip-path 迴圈還寫死 8 → 影片被裁成頂端一條細線
  10. 修好,改成四角定位,二次貝茲做圓角
  11. 右下角單獨再調

十一次。到這裡我已經沒有更好的想法了。

然後 Claude Code 做了一件我沒想到的事:它做了一個工具,讓我自己用滑鼠把四個角拖到定位。

畫面出現四個藍色把手,我拖,它即時把座標反投影回 3D mesh 上重建裁切,左上角同步顯示一組可以直接複製回程式碼的座標陣列。我拖了幾下,複製,貼上。

下一個提交是:

影片四角採用使用者用 __cornerTool 拖曳對位後的精確值,精準貼合螢幕
首頁分鏡第 03 階段「發光線稿」:相機拆成零件,以線框呈現
首頁分鏡第 03 階段「發光線稿」:相機拆成零件,以線框呈現

那一整天算不出來的東西,最後的解法是不算了——做一個介面,讓看得見畫面的人來判斷。

我原本以為 AI 寫程式的價值在於它算得比我準。那天我發現不是。它的價值在於它知道什麼時候該停止計算、把判斷權交回給我,並且順手把交接的工具也做好。


失敗與回滾

7 月 22 日,我試著讓它自動重新設計「六大功能」區塊。結果不能用。

提交記錄:

還原六大功能區:移除失敗的編輯設計自動實驗(583c6f7)

回滾之後改成手工做:先鋪一層瑞士編輯格線,再讓六隻角色一隻一隻破格——01 坐在格線上把 hairline 壓彎、02 雙手吊在格頂引體向上、03 趴在橫線上、04 單手吊線盪鞦韆、05 走鋼索、06 倒掛在線下。六個獨立提交,一隻一隻來。

六隻零件怪獸各自用不同姿態破格,腳下那條 2px 全黑的線是瑞士編輯格線
六隻零件怪獸各自用不同姿態破格,腳下那條 2px 全黑的線是瑞士編輯格線

比自動重設計花了更多時間,但成果好很多。這件事教我的分工是:結構可以交給它,品味不行。


誠實性也是工程問題

有幾個提交我特別想提:

PeakOps P4:誠實性修正(移除不實與自相矛盾的陳述) Pricing 重做:⋯ 移除不實承諾 案例頁 Phase B 下半:作品卡狀態、案例編號、Lightbox 說明(誠實不捏造)

寫行銷文案的時候,很容易滑向那種聽起來很厲害但其實沒有內容、甚至和前段互相矛盾的句子。Claude 有指出這些地方。這不是我要求的功能,是它在改稿過程中主動提的。

到今天為止,網站上還有一批「需要事實才能寫」的項目是空著的——合約條件、保證條款的性質、資安的具體宣稱、案例的成效數字。那些我還沒有可以拿出來的憑據,所以寧可不寫。這也是為什麼 方案說明 上寫的是「依需求報價」而不是一個數字。

一個新公司的官網最容易犯的錯,就是把自己講得比實際大。一個會抓到這件事的協作者,比多一個會寫 CSS 的協作者有價值。


我們發展出的工作方式

驗收探針

專案裡有一個 .peakops-audit/ 目錄,放的是不在網站路由上的驗收頁。無頭瀏覽器幾乎不跑 requestAnimationFrame,所以這些頁面支援 ?step=N 參數:把 rAF 換成固定 dt 的手動時鐘,推 N 幀,截圖因此可重現。

這是為了讓「動畫對不對」這種主觀問題,變成可以逐像素比對的問題。

代理併行審查

8 月 3 日的手機版總審查,提交寫著:

32 筆定罪逐一修復 + 複驗(55+8 代理兩輪)

派出多個代理去跑不同視口與情境,回報問題清單,逐項修復後再複驗一輪。

共用詞彙

「母動畫」是捲動驅動的主軸,「子動畫」是每一幕內部自己跑的時間軸。這組詞是做到一半自然長出來的,之後我只要說「這一幕的子動畫凍結了」,它就知道要去看哪裡。

追根因,不修表象

8 月 5 日有一個提交:

機器人「沒站在線上」的真因:它們腳下那條線幾乎看不見

我回報的是「機器人沒站好」,實際問題是線的對比度不夠。


一個私心

關於我們 頁上有一個機器人,站在自己的工作間裡。它叫 Allen。

它的工作間有 40 個手工拆出來的圖層,會隨訪客當地的時間變成白天、黃昏或夜晚。窗外的雲會飄,夜裡有星星和一顆慢慢升起的月亮;雲會擋住星星,月亮從雲後面浮起來的時候雲會微微透光,月光也會打在窗外的建築上。有六個地方可以點——窗戶、檯燈的開關、馬克杯、海報、控制台、工具排——點下去它會轉頭看過去。

Allen 的工作間,白天
Allen 的工作間,白天
同一個工作間,夜晚:星星、月亮與從窗口灑進來的月光
同一個工作間,夜晚:星星、月亮與從窗口灑進來的月光

技術上這是全站最麻煩的一塊。整套天色不是準備三張圖片,而是用 multiply 壓暗加 screen 提亮兩層分級圖,在 sRGB 空間精確推導出來(實測平均差 0.3 階)。

素材產生器會自我驗算:把底板加元件貼回去,和原稿逐像素比對。這裡有一個細節值得說——關卡看的不是 RMSE。轉檔把整張放大再換算回來,每一條描邊都會差個 1px,那種差異 RMSE 看得到、眼睛看不到。真正要擋的是「一整塊東西不見了」,所以關卡是「差異超過 60 的連通區域必須是 0 塊」。目前 RMSE 是 3.74,不合格區域 0 塊。

這一段沒有任何商業理由。我只是想在自己蓋的網站裡放一個自己。

同一個念頭還生出一個更小的:用手機打開選單,六隻零件怪獸裡會有一隻在裡面——吊在語言切換鈕上,或是從選單項目之間垂下來。每次出現的角色和戲碼都不一樣,一共十五齣,一齣一齣畫的。沒有人需要這個。但如果把它拿掉,我會是全站最捨不得的那一塊。

手機選單:一隻怪獸吊在語言切換鈕上,另一隻從選單項目之間垂下來
手機選單:一隻怪獸吊在語言切換鈕上,另一隻從選單項目之間垂下來

8 月 6 日:一天做完整個英文站

45 個提交,16 個英文頁面上線。

包含 i18n 底座、hero-scenes.js 裡上百處 canvas 畫的字包 t()、153 條素材路徑絕對化、雙語 sitemap(33 個 URL 帶 hreflang 三件組)、雙語 JSON-LD、/en 路由。中文站零像素迴歸。

這是整個專案裡我到現在還覺得最不真實的一天。


數字

項目數值
提交總數414(截至 2026-08-08)
工作天16 天,橫跨 24 個日曆天
開發人數1 人(公司團隊 3 人)
多數日子投入3–4 小時
頁面數中英雙語各 16 頁,共 32 頁
工具Claude Code(Claude Max 訂閱方案)
全程使用其他 AI 工具沒有
我的背景會寫程式,但十年沒動過;會做動畫;不會製作素材

給正在猶豫的人

如果你和我一樣——判斷得出什麼東西好,但手上做不出來——我的經驗是:「做不出來」那半邊,現在可以外包了。

十年沒寫程式這件事,在這個專案裡幾乎沒有變成障礙。真正有用的是另外兩件事:我知道一個畫面什麼時候「還差一點」,以及我講得出差在哪裡。這兩件事沒有人能代替我做。

所以不要外包判斷。7 月 22 日那次自動重設計失敗,就是因為我把品味也一起交出去了。整個專案裡所有好的部分,都是我知道自己要什麼、然後花時間把它講清楚的那些。

程式碼全部公開在 github.com/Peakqi-com/peakqi-website,提交歷史沒有整理。上面每一句話都可以自己去驗證。

如果你想聊聊怎麼把 AI 接進自己的流程,預約 15 分鐘的導入評估 就可以。