<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Engineer on kiwi-walk</title>
    <link>https://kiwi-walk.com/blogs/engineer/</link>
    <description>Recent content in Engineer on kiwi-walk</description>
    <image>
      <title>kiwi-walk</title>
      <url>https://cdn.kiwi-walk.com/static/images/logos/logo-nobg.png</url>
      <link>https://cdn.kiwi-walk.com/static/images/logos/logo-nobg.png</link>
    </image>
    <generator>Hugo -- 0.140.1</generator>
    <language>zh-tw</language>
    <lastBuildDate>Wed, 14 Oct 2026 22:00:00 +0800</lastBuildDate>
    <atom:link href="https://kiwi-walk.com/blogs/engineer/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Day30 回顧：與 claude 共舞的 30 天</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day30-retrospective/</link>
      <pubDate>Wed, 14 Oct 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day30-retrospective/</guid>
      <description>系列最後一天，不照前面的五段模板。先說寫這 30 篇的收穫：逼 AI 回顧 session、我再爬一遍，補上 vibe-coding 時「看過 plan、結果對了就 go」留下的理解落差。再說為什麼我接受「vibe-coding 就是一直造輪子」：造輪子是養品味的過程。接著整理這個月在資安、成本、UIUX、功能開發四塊的心得，最後是之後要繼續做的事。</description>
    </item>
    <item>
      <title>Day29 [llm-wiki] 查來的跟我寫的混在一起：note-enrich 改成原文一塊、補充一塊</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day29-enrich-block-promote/</link>
      <pubDate>Tue, 13 Oct 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day29-enrich-block-promote/</guid>
      <description>note-enrich 跑完的 raw 常常已經夠格當 wiki 頁，但要升格時卡在一件事：原本「就近融入」的規則讓我寫的句子和網路查來的句子混在一起，升格只能動 LLM 寫的部分，卻分不出是哪幾句。這篇記錄把輸出改成「原文一塊、## 補充一塊、## 來源清單」的取捨，為什麼不從 raw 全面改、已經 enrich 過的 20 幾篇為什麼不回頭拆，以及 enrich 結束時怎麼判斷該不該提議 wiki-build &amp;ndash;promote。也記錄兩份規格各寫各的 frontmatter，悄悄分歧出 kebab tag 和被挪用的 source 欄位。</description>
    </item>
    <item>
      <title>Day28 [llm-wiki] 把 Claude 執行中那一列換掉：細分階段、合併平行工具、列出 subagent、算 token 速度</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day28-thinking-line/</link>
      <pubDate>Mon, 12 Oct 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day28-thinking-line/</guid>
      <description>再寫一個 mod：thinking-line 在 Claude 執行中接管 spinner 那一列，顯示細分的階段、step 序號、平行工具合併、每個 subagent 在跑什麼，以及輸出 token 與每秒速度。記錄 Spinner 能改哪些欄位、token 為什麼一半是實值一半是估算、chunk 太密怎麼節流，以及桌面版畫不出多行時改走的路。</description>
    </item>
    <item>
      <title>Day27 [llm-wiki] 用 mod 裝飾我的 llm-wiki：我是如何強化我的 llm-wiki 儀錶板</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day27-claude-code-mods/</link>
      <pubDate>Sun, 11 Oct 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day27-claude-code-mods/</guid>
      <description>接續 Day26，這篇寫 navi 這個 mod 的畫面設計：橫條、狀態列、輸入框、側邊面板各自負責一種注意力；統計分頁以「哪裡還沒連起來、哪裡值得再寫、書的概念流到哪些域」三個問題分區，每個數字旁邊都附一個只填不送的動作；趣味分頁放單篇事實。記錄每個畫面要我關注什麼、門檻怎麼定、以及看到畫面之後改掉的地方。</description>
    </item>
    <item>
      <title>Day26 [llm-wiki] 在 Claude Code 用 mod 長一塊 llm-wiki 儀表板：TODO、近期 wiki、raw 堆積</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day26-vault-mod/</link>
      <pubDate>Sat, 10 Oct 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day26-vault-mod/</guid>
      <description>Claude Code 新推出了 mod，我試著導入 llm-wiki。主軸是為什麼要用 mod：先分清 skill、hook、MCP、plugin、mod 各管什麼，再從最直觀的介面開始，在 session 裡畫出 vault 儀表板：側邊面板列出 TODO.md 未完成項與近期新增 wiki，點項目就把對應 skill 指令填進輸入框、點 wiki 頁直接在 Obsidian 開；面板下半部畫各域 wiki 數與 raw 堆積；輸入框上方的橫條放今日隨機三頁，狀態列放待辦／Inbox／本週新增數。接著往下看 mod 的 hook：旁觀、改寫、接手三種行為，以及它排在既有守門 hook 前面這件事。也記錄怎麼算「近期新增」、怎麼打開 Obsidian、mod 放在哪、raw 堆積的第一版為什麼不能用，以及幾個驗證錯誤。</description>
    </item>
    <item>
      <title>Day25 [kiwi-walk] 把 Projects 塞入到 Blogs，但一直對 design 沒有很明確，說不定之後又會翻掉</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day25-blogs-kiwi-hub/</link>
      <pubDate>Fri, 09 Oct 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day25-blogs-kiwi-hub/</guid>
      <description>原本只想把 Projects 收進 /blogs/ 變成一個小方塊、順便讓它有趣一點，結果 /blogs/ 的方塊排版前後改了四版：原本的卡片、貼紙牆、改成三欄放描述，最後在 Claude Design 跑了三輪定稿成「走去哪裡？」的奇異鳥徽章，描述改成 hover 才出現。記錄每一版為什麼被換掉、Projects 怎麼在不搬目錄的情況下出現在 /blogs/、新畫的工程師 kiwi，以及幾個坑：worktree 沒拉主題時 Hugo 照樣 build 出空白頁、hover 不會晃是因為 Windows 關了動畫效果、設計稿在 claude.ai 上讀不到、寫這篇截圖時才發現徽章在寬螢幕排成 5＋3、字體跟全站不一樣。</description>
    </item>
    <item>
      <title>Day24 [travel-storage] 按上一頁就回總覽：捨棄「一趟旅行一個 HTML」，改成外殼＋JSON＋#網址</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day24-hash-routes/</link>
      <pubDate>Thu, 08 Oct 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day24-hash-routes/</guid>
      <description>Day19 定下的「每趟旅行是一個單一的 HTML」，用起來最困擾的是按上一頁就直接回總覽。這篇記錄把它翻掉的過程：為什麼光拆檔案沒用、要每個畫面都有網址；單一外殼加</description>
    </item>
    <item>
      <title>Day23 [travel-storage] 真正進入使用後，才發現新專案的破陋不堪阿</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day23-fixed-one-layer/</link>
      <pubDate>Wed, 07 Oct 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day23-fixed-one-layer/</guid>
      <description>指南升成主角之後，我拿手機實際用了一輪，丟給 Claude 一串體驗問題，第一條就是收回 Day21 做的「往下收、往上露」：「那個好卡，用一層就好了」。記錄這輪 UI 調整的取捨：固定哪一層（Claude 建議只固定頁首，我選頁首加日期列）、「← 總覽」收進選單還是整個拿掉、地區篩選要不要改下拉選單（地區要、類別不要），以及計畫被我退回六次、每次補了什麼。踩到的坑是為了壓低日期列把日期排成一行，最後一顆按鈕超出畫面 13px、整頁可以左右滑；之後「手機不能左右滑」寫成專案的硬規定，改版面前要在四種寬度量過。另外自動部署停住，改成手動部署。</description>
    </item>
    <item>
      <title>Day22 [travel-storage] 旅途中只開一頁：行前指南升成主角，去過的店寫回指南，頁首告訴我還剩幾天</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day22-guide-first/</link>
      <pubDate>Tue, 06 Oct 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day22-guide-first/</guid>
      <description>旅行頁原本以「回來後的紀錄」為主，行前指南只是一個原樣保留的內嵌分頁；實際用下來我只看指南。這次的目標是四件事：少切頁面、打開就是當天的建議行程、旅途中記下去了哪就同步回指南（之後找店先列還沒去的，回來後的整理也直接在上面做）、頁首講清楚還剩幾天。記錄的取捨有：指南的分項攤平成頁首導覽、手機用漢堡選單（下拉選單被我否決），地點總表併進指南、新店只能加在清單尾端，頁首日期併進原本那一列、改成時間軸；另外用地址補座標的腳本把每家店畫進示意圖，太遠或沒座標的用虛線圈。踩到的坑有：合併時一刀切掉一個函式導致整頁空白、記住的舊分頁讓預設頁失效、平滑捲動讓切分項看起來沒反應、手機上一列塞不下日期、只靠店名幾乎查不到座標。</description>
    </item>
    <item>
      <title>Day21 [travel-storage] 手機上內容與導覽搶畫面：固定列往下滑就收起；「吃」再分一層，資料由我丟給 AI 統整</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day21-food-subcategory/</link>
      <pubDate>Mon, 05 Oct 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day21-food-subcategory/</guid>
      <description>手機看行前指南時，頂部疊了三層固定列、約 190px。記錄為什麼選「往下滑收起」而不是壓縮高度、往上滑時再分兩段（滑一點只露出日期列，滑多才全部回來），為此破例改了說好原樣保留的指南樣式，以及讓收起不惱人的幾條規則：靠近頂端一定顯示、小於 8px 不判斷、捲到底的回彈不算往上滑、看不見的列鍵盤也碰不到。另一條線是地點總表的「吃」加上子分類與篩選按鈕：選項太少時 AI 可以上網補，但來源不明是隱憂，所以我改成自己丟資料給 Claude、由它查證與統整。</description>
    </item>
    <item>
      <title>Day20 [kiwi-walk] 寫了 aspect-ratio，卡片還是被截圖撐到 985px：把圖片拿出文件流</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day20-project-cards-and-mobile-menu/</link>
      <pubDate>Sun, 04 Oct 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day20-project-cards-and-mobile-menu/</guid>
      <description>/projects/ 的卡片明明寫了 aspect-ratio，Art-Tracking 還是被一張直式截圖撐到 985px：封面是 column flex 的子項目，圖片的 height 100% 對不到確定的高度，修法是把圖片改成絕對定位。另外記錄封面比例選 4:3、手動 weight 排序、Archived 分區、自動連到最新一篇開發紀錄、為了漢堡選單複製一份 PaperMod header，以及上線後第二輪把小卡精簡、封面從截圖換成 icon。坑包括只讀 CSS 就誤判、漏一行 project 讓最新一篇指錯、背景分頁量到 0×0、拿掉一層包裝後標題被主題蓋成 24px。</description>
    </item>
    <item>
      <title>Day19 [travel-storage] 一趟旅行只用一頁：出發前、旅途中、回來後都改同一份資料區</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day19-one-page-per-trip/</link>
      <pubDate>Sat, 03 Oct 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day19-one-page-per-trip/</guid>
      <description>新專案 travel-storage：跟 Claude 一起排行程，每趟旅行做成一個自含式 HTML，放成一個私人網站。這篇記錄旅行頁怎麼設計成「一頁走完一趟旅行」：模板照行前指南還是回來後的全紀錄、行程項目用 done/plan/skip 等狀態從計畫走到實際、行前指南原樣內嵌而不是拆掉重寫、總覽頁對還沒結束的旅行只給出發日期（網址也不帶地名）、旅途中「先在對話回選項，挑了才寫進頁面」的更新流程，以及離線快取的代價。</description>
    </item>
    <item>
      <title>Day18 [llm-wiki] obsidian-git push 總被另一個 session 卡住：設定圍籬，只開 worktree，主目錄留給 Obsidian 與個人手寫</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day18-worktree-by-default/</link>
      <pubDate>Fri, 02 Oct 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day18-worktree-by-default/</guid>
      <description>用 git 同步 vault 十天後的四個觀察：log 和 TODO 這種每個動作都會碰的檔一直衝突、手機能互動很實用、本機所有 session 都踩在 main 上互相卡住、GitHub 網頁可以直接當閱讀介面。今天一次 push 被另一個 session 沒 commit 的變更擋下來，於是把「每個 session 都開 worktree、不分任務大小」寫成規則，並用 SessionStart 與 PreToolUse 兩層 hook 擋住在主目錄寫檔。記錄過程中的取捨（為什麼不是看情況才開、為什麼保留 Obsidian 自動 pull、規則之外要不要用 hook 硬擋、收件重複要查 git 歷史還是另記一本帳、過期的決策檔怎麼刪），四個坑（hook 擋到自己要寫的另一個 repo、剛開的 worktree 被判成可清、log 同一個 hunk 混著兩個 session 的條目、在 worktree 裡長指令被拒），以及接下來要觀察的九件事。</description>
    </item>
    <item>
      <title>Day17 [llm-wiki] 引擎與燃料：skill 範本、使用時機、客製化要注意的地方</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day17-open-skills/</link>
      <pubDate>Thu, 01 Oct 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day17-open-skills/</guid>
      <description>Day11 列過 llm-wiki 的 15 個 skill，但只有名字、一句話用途和行數。今天附上 inbox-triage、wiki-query、wiki-build、note-enrich、note-explore、vault-maintain 的範本，拿掉個人資訊和我這個 vault 特有的部分。每個 skill 附上什麼時候用、自己客製化時要注意哪幾條。把 llm-wiki 看成一台引擎：wiki-build 是核心，inbox-triage 負責加燃料，wiki-query 產出答案，vault-maintain 定期檢修，note-enrich 和 note-explore 分別顧思考的廣度與深度。另外說明其他 skill 為什麼不放，以及一個容易誤解的地方：這六個不是各自獨立的指令，它們共用 index.md、log、TODO.md 幾個慣例，也會互相呼叫。</description>
    </item>
    <item>
      <title>Day16 [kiwi-walk] 照著設計 handoff 修部落格：handoff 自己也要先驗證</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day16-design-handoff/</link>
      <pubDate>Wed, 30 Sep 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day16-design-handoff/</guid>
      <description>拿一份附了檔案位置與 diff 的設計 handoff 修部落格，照做前先驗證，發現三處跟實際不符：layouts/blogs/list.html 會套到所有分類頁、水平捲動掃了 121 頁都重現不出來、閱讀時間到不了預期的 5–7 分鐘。另外記錄上一篇／下一篇怎麼定義「同分類」、Series 總覽頁怎麼做到英文網址配中文名稱，以及三個坑：Claude 把截圖時機誤判成 overflow 弄壞 image-zoom、html/template 把 var() 預設值轉成 ZgotmplZ、全站連結色的優先權把實心按鈕的字蓋成深色，而對比掃描用 3:1 當門檻漏抓了一顆。</description>
    </item>
    <item>
      <title>Day15 [coffee-review] 把杯測拆成三個階段：那顆解鎖按鈕是多餘的</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day15-cupping-three-stages/</link>
      <pubDate>Tue, 29 Sep 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day15-cupping-three-stages/</guid>
      <description>做 #97，把杯測表單拆成「設定、評分、揭曉」三個階段。方案在 plan mode 裡被推翻了五六次：解鎖按鈕拿掉、返回鍵拿掉、按鈕從底部搬到頂端、揭曉頁從表格改成杯卡、頒獎台畫了又撤。實作上把唯一一組評分元件搬到點開的杯卡下面，並用凍結順序避免改分數時卡片跳走；另外記錄 service worker 快取讓新 CSS 看不到、以及兩次 code review 抓到的 bug。</description>
    </item>
    <item>
      <title>Day14 [coffee-review] 記錄列表的排序與分組：杯測場次該算一筆還是好幾筆</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day14-records-sort-group/</link>
      <pubDate>Mon, 28 Sep 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day14-records-sort-group/</guid>
      <description>搬到 Cloudflare 之後回頭清 issue，關掉 5 張過時的，挑了列表排序與分組來做。記錄日期該照哪個欄位排、杯測場次在分組時怎麼算，以及 code review 抓到的兩個 bug：沒有杯的場次在分組時整個消失，和改排序時重新打 API 造成的舊畫面覆蓋。</description>
    </item>
    <item>
      <title>Day13 [llm-wiki] 同一個 vault 同時開三個 Claude session：git 擋不到的那種衝突</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day13-multi-session-git/</link>
      <pubDate>Sun, 27 Sep 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day13-multi-session-git/</guid>
      <description>vault 從 iCloud 搬到 git 時，防的是兩台機器互相覆蓋；但實際用法已經變成同一台電腦同時開好幾個 Claude session。共用一個工作目錄時 git 不會產生 merge conflict，只會靜默覆蓋。記錄一次真實撞車、一份八條的協定和它第一版建立在錯誤前提上的地方、log 月檔改用 merge=union 之後合併仍然出錯的兩種情況，以及接下來可能遇到的問題和走法。</description>
    </item>
    <item>
      <title>Day12 [coffee-review] 從 GitHub Pages &#43; Supabase 搬到 Cloudflare：登入整個搬出 app 之外</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day12-supabase-to-d1/</link>
      <pubDate>Sat, 26 Sep 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day12-supabase-to-d1/</guid>
      <description>Day5 到 Day7 的 coffee-review 跑在 GitHub Pages + Supabase 上，今天整套搬到 Cloudflare。改變最大的不是資料庫，是登入——原本 Google OAuth 是 app 的一部分，跑在瀏覽器裡、要處理 PKCE 與回跳；搬完之後 app.js 裡一行 OAuth 程式碼都沒有，登入被推到 Cloudflare Access，在請求碰到 Worker 之前就結束了。記錄兩個取捨、既有的 Google OAuth client 怎麼直接接上 Zero Trust、首次部署失敗與 AUD 只能靠一個 302 驗證的過程，以及 service worker 怎麼讓 Access 過期後回不去登入頁。</description>
    </item>
    <item>
      <title>Day11 [llm-wiki] 如果你要自己蓋一個：五步起手式、12 條習慣，和我繞過的遠路</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day11-claude-md-and-skills/</link>
      <pubDate>Fri, 25 Sep 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day11-claude-md-and-skills/</guid>
      <description>Day10 結尾給了四句起步順序，今天把它展開成可以照做的版本。CLAUDE.md 201 行逐段盤完之後最反直覺的一筆是：行為準則只佔 14 行，路由與結構佔掉一半。skill 從 9 個開始，現在 15 個，中間有 10 個名字已經退場。這篇講五步起手式、每步配一個我實際付過的代價，12 條寫進 skill 才會生效的使用習慣，加上我實際的 routines（半年只有 42 個活躍天，斷過兩次一整個月）。文末附一段可以直接複製給 AI 的建置 prompt，它會先訪談你 12 個問題，再照你的答案長出你自己的骨架。</description>
    </item>
    <item>
      <title>Day10 [llm-wiki] 756 個 markdown 怎麼被管住：三層架構、域優先、15 個 skill</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day10-what-is-llm-wiki/</link>
      <pubDate>Thu, 24 Sep 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day10-what-is-llm-wiki/</guid>
      <description>前兩天都在講這個筆記庫的儲存層——搬家的決定，和雲端同步碟咬出來的三類症狀。今天正式介紹它本身。Karpathy 的 LLM Wiki 架構是 Raw / Wiki / Schema 三層分工，我加的是「域優先」——用生活域當頂層資料夾，讓查詢有路徑可循，LLM 每次只讀 2 到 4 個檔而不是掃全庫。這篇講五個取捨：為什麼不用 RAG、為什麼域優先、為什麼 raw 不到五個檔不准開 wiki、為什麼規範要用 hook 擋、以及 skill 怎麼從原子指令收斂成管線。附三個實際踩過的判斷錯誤。</description>
    </item>
    <item>
      <title>Day9 [llm-wiki] iCloud 咬人的三種方式，和我為它長出的三層防線</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day09-icloud-three-bites/</link>
      <pubDate>Wed, 23 Sep 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day09-icloud-three-bites/</guid>
      <description>Day8 只交代了搬家的決定，把事故本身整篇往後推。這篇補上：一個同時活在兩台機器上、又刻意不用版本控制的 vault，被 iCloud 咬出的三類症狀——檔案脫水成佔位檔、rename 被雲端還原、以及最危險的靜默衝突副本（本尊消失、副本才是新版）。還有我為它長出的三層防線：CLAUDE.md、PreToolUse hook、定期巡檢，各自攔在錯誤的不同時間點，也各自有攔不到的東西。</description>
    </item>
    <item>
      <title>Day8 [llm-wiki] 被 iCloud 卡了五個月，換到 Obsidian Sync 才發現它同步不了 .claude</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day08-sync-dotfolder-icloud-to-git/</link>
      <pubDate>Tue, 22 Sep 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day08-sync-dotfolder-icloud-to-git/</guid>
      <description>放在 iCloud 的第二大腦 vault，五個月累積了檔案脫水、衝突副本、rename 被還原一整套症狀（細節明天單獨寫一篇）。搬到 Obsidian Sync 才發現它排除所有 dot 資料夾，.claude/ 的 15 個 skill 和 4 支 hook 一個都不同步。這篇記錄三個方案怎麼比、為什麼最後整個 vault 改用 git，以及三個坑：文件宣稱可攜但程式碼寫死、dispatcher 靜默不執行、我自己把路徑長度算錯。</description>
    </item>
    <item>
      <title>Day7 [coffee-review] 測試全綠，功能卻永遠是空的：查詢沒 select 的欄位</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day07-empty-flavor-chips/</link>
      <pubDate>Mon, 21 Sep 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day07-empty-flavor-chips/</guid>
      <description>店家頁的「常見風味」在線上永遠是空的，但負責統計的純函式有十幾條測試、全綠——問題不在算法，在查詢根本沒撈那兩個欄位。這篇記錄為什麼不直接把欄位加進去、假的 Supabase client 要假到什麼程度才抓得到這種 bug，順帶收掉草稿按「還原」就被清掉與全新安裝 SQL 缺欄位兩件，以及驗證修正時我怎麼用一行 git 把自己的修正刪掉。</description>
    </item>
    <item>
      <title>Day6 [coffee-review] 把「杯測」這個名字還給杯測：一場多杯的記錄類型</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day06-real-cupping-session/</link>
      <pubDate>Sun, 20 Sep 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day06-real-cupping-session/</guid>
      <description>coffee-review 原本的「杯測」其實是自己沖一支豆，真正的杯測是一次擺 N 杯、每杯用編號識別。這篇記錄舊名字讓位、編號預設手動、未評分當成一級狀態這些產品取捨，為什麼資料分成兩張表而不是一個 jsonb 陣列，以及一組評分元件怎麼輪流裝 N 杯。</description>
    </item>
    <item>
      <title>Day5 [coffee-review] 品鑑表單上的「店家」：筆記搬進表單、搜尋合成一格</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day05-shop-in-tasting-form/</link>
      <pubDate>Sat, 19 Sep 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day05-shop-in-tasting-form/</guid>
      <description>Coffee Review 品鑑表單最上面的「店家」有兩個問題：店家筆記只能從店家頁填，所以沒人填；選店家又拆成「選擇」和「新增」兩套，猜錯就撞 unique constraint。記錄把筆記搬進表單、把搜尋合成一個輸入框時的取捨（筆記要不要自己的儲存鍵、dirty 跟誰比、什麼時候才問 Google），以及 code review 才抓出來的三個坑：listener 疊兩層讓 chip 點了沒用、失敗 toast 被成功訊息蓋掉、把 LatLng 的方法拆下來呼叫讓從 Google 新增店家整條壞掉。</description>
    </item>
    <item>
      <title>Day4 [art-tracking] 掛上自己的網域，並用 Cloudflare Access 擋在登入後面</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day04-custom-domain-and-access/</link>
      <pubDate>Fri, 18 Sep 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day04-custom-domain-and-access/</guid>
      <description>Art-Tracking 上線後的第一個問題：只有 workers.dev 網址、API 全 401。記錄把它掛上 art.kiwi-walk.com、用 Cloudflare Access 保護整站卻讓 agent 路徑 bypass 的取捨，Worker 端怎麼自己驗 JWT 做到 fail closed，以及靠 302 裡的 AUD 抓出 policy 設錯的過程。</description>
    </item>
    <item>
      <title>Day3 [art-tracking] 技術選型：為什麼從 Vercel &#43; Supabase 搬到 Cloudflare，而不是像 coffee-review 用 GitHub Pages &#43; Supabase</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day03-stack-and-cloudflare/</link>
      <pubDate>Thu, 17 Sep 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day03-stack-and-cloudflare/</guid>
      <description>Art-Tracking 第一版跑在 Vercel + Supabase 上，第二版（2026-09）整個搬到 Cloudflare Workers。這篇講為什麼不能像 coffee-review、commute 一樣用 GitHub Pages + Supabase，為什麼不留在 Vercel，以及 Hono、Drizzle、D1、R2、Vitest workers pool 這幾個選擇各自的理由與代價。</description>
    </item>
    <item>
      <title>Day2 [art-tracking] 看展追蹤器要做什麼、不做什麼：規劃時的六個取捨</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day02-what-to-build/</link>
      <pubDate>Wed, 16 Sep 2026 22:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day02-what-to-build/</guid>
      <description>Art-Tracking 第二版動工前，先決定它是給誰用、抓什麼、狀態怎麼分、首頁要不要逼我表態、排序聽誰的、來源壞了怎麼辦。這篇記錄六個產品面的取捨與背後的理由，以及每一個取捨落到資料模型、ingest 合約與程式碼上長什麼樣。</description>
    </item>
    <item>
      <title>Day1 Side Project 專案盤點</title>
      <link>https://kiwi-walk.com/blogs/engineer/ironman-2026-day01-project-overview/</link>
      <pubDate>Tue, 15 Sep 2026 21:47:40 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/ironman-2026-day01-project-overview/</guid>
      <description>系列開場：用 Claude 把個人興趣做成網站，先盤點手上的四個 Side Project——Coffee Review、Commute、Daily 與正在製作的 Art-Tracking，以及前三個共用的「GitHub Pages + Supabase」架構。</description>
    </item>
    <item>
      <title>LLM Wiki 知識庫架構</title>
      <link>https://kiwi-walk.com/blogs/engineer/llm-wiki-architecture-blog/</link>
      <pubDate>Sun, 26 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/llm-wiki-architecture-blog/</guid>
      <description>用 Karpathy LLM Wiki 架構重建個人知識庫：域優先結構、Inbox 分類流程、成熟後的 Skill 管線、hooks 機械護欄與跨域 hub 策展</description>
    </item>
    <item>
      <title>以研究心態看待學習，以追問思維剖析表層內</title>
      <link>https://kiwi-walk.com/blogs/engineer/explore-project-as-research-2026-04-26/</link>
      <pubDate>Sun, 26 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/explore-project-as-research-2026-04-26/</guid>
      <description>將學習視為研究的工作流，加入停滯觸發與強制收斂規則。</description>
    </item>
    <item>
      <title>Heptabase CLI / MCP / DB Operations</title>
      <link>https://kiwi-walk.com/blogs/engineer/heptabase-cli-mcp-db-operations/</link>
      <pubDate>Sat, 25 Apr 2026 00:00:00 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/heptabase-cli-mcp-db-operations/</guid>
      <description>Heptabase 可操作面總整理：CLI 指令群、MCP 可封裝能力、以及 whiteboard 的 SQLite 查詢流程與限制</description>
    </item>
    <item>
      <title>使用 Markdown 時遇到檔案名稱有空白</title>
      <link>https://kiwi-walk.com/blogs/engineer/markdown-image-with-space/</link>
      <pubDate>Sat, 29 Jun 2024 17:02:39 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/markdown-image-with-space/</guid>
      <description>可以用 &lt;code&gt;&amp;lt; &amp;gt;&lt;/code&gt; 或是更換成 &lt;code&gt;%20&lt;/code&gt;</description>
    </item>
    <item>
      <title>透過 Helm Chartmuseum 自建 chart repository 存放自己的 chart</title>
      <link>https://kiwi-walk.com/blogs/engineer/helm-chartmuseum/</link>
      <pubDate>Fri, 09 Feb 2024 20:41:37 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/helm-chartmuseum/</guid>
      <description>如何自建 helm chart repository，將客製化的 chart 扔上去 cloud/on-premise storage，並且提供 HTTPS 與 JWT 的認證機制，可以直接使用 &lt;code&gt;helm install&lt;/code&gt; 來安裝</description>
    </item>
    <item>
      <title>Helm Repo Command</title>
      <link>https://kiwi-walk.com/blogs/engineer/helm-repo-command/</link>
      <pubDate>Sun, 04 Feb 2024 16:42:17 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/helm-repo-command/</guid>
      <description>整理 helm 中 repository, chart 的操作指令，包含一些比較少用的指令，像是如何下載 chart 檔到本機</description>
    </item>
    <item>
      <title>br-netfilter 與 bridge-nf-call-iptables 在 k8s 中會影響到 node 內 pod 之間的互通</title>
      <link>https://kiwi-walk.com/blogs/engineer/br-netfilter-and-bridge-nf-call-iptables/</link>
      <pubDate>Thu, 11 Jan 2024 18:30:43 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/br-netfilter-and-bridge-nf-call-iptables/</guid>
      <description>Kubernetes 中，br_netfilter 和 bridge-nf-call-iptables 兩個設定，允許 iptables 規則作用在同個 node 的 pod 之間的流量上。如果這兩個設定未開啟，則回包會直接走二層轉發，導致無法原路返回。因此，在設定 Kubernetes 時，應注意這兩個設定是否已正確開啟。</description>
    </item>
    <item>
      <title>連接 github pages 到 netlify 托管自己的個人部落格</title>
      <link>https://kiwi-walk.com/blogs/engineer/connect-with-netlify/</link>
      <pubDate>Sat, 23 Dec 2023 17:04:07 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/connect-with-netlify/</guid>
      <description>github pages 客製化域名麻煩，轉換到 netlify 可設定網站名稱為 &lt;a href=&#34;https://kiwilee-blog.netlify.app/&#34;&gt;https://kiwilee-blog.netlify.app/&lt;/a&gt;，未來買域名，更可把後面的 &lt;code&gt;netlify.app&lt;/code&gt; 刪掉</description>
    </item>
    <item>
      <title>利用 imagemagic 壓縮圖片，讓部落格圖片載入加速</title>
      <link>https://kiwi-walk.com/blogs/engineer/image-magic/</link>
      <pubDate>Sat, 23 Dec 2023 15:04:07 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/image-magic/</guid>
      <description>&lt;h1 id=&#34;install&#34;&gt;Install&lt;/h1&gt;
&lt;p&gt;用 brew 來安裝&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install imagemagick
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;basic-usage&#34;&gt;Basic usage&lt;/h1&gt;
&lt;p&gt;指令是用 &lt;code&gt;magick&lt;/code&gt;，不是 &lt;code&gt;imagemagick&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Check version&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ magick -version
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Version: ImageMagick 7.1.1-23 Q16-HDRI aarch64 21803 https://imagemagick.org
Copyright: (C) 1999 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules OpenMP(5.0) 
Delegates (built-in): bzlib fontconfig freetype gslib heic jng jp2 jpeg jxl lcms lqr ltdl lzma openexr png ps raw tiff webp xml zlib zstd
Compiler: gcc (4.2)
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;support image&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kwok 介紹</title>
      <link>https://kiwi-walk.com/blogs/engineer/kwok-introduction/</link>
      <pubDate>Fri, 22 Dec 2023 15:12:07 +0800</pubDate>
      <guid>https://kiwi-walk.com/blogs/engineer/kwok-introduction/</guid>
      <description>Kwok 透過假的 node 測試 pod 的部署狀況，可驗證是否符合 IaC policy (像是 opa) 也可驗證是否有部署在期待的 node 上面</description>
    </item>
  </channel>
</rss>
