diff --git a/public/banners/why-i-still-bought-a-local-gpu.png b/public/banners/why-i-still-bought-a-local-gpu.png
new file mode 100644
index 0000000..6ee2bec
Binary files /dev/null and b/public/banners/why-i-still-bought-a-local-gpu.png differ
diff --git a/public/og/why-i-still-bought-a-local-gpu.png b/public/og/why-i-still-bought-a-local-gpu.png
new file mode 100644
index 0000000..58f937d
Binary files /dev/null and b/public/og/why-i-still-bought-a-local-gpu.png differ
diff --git a/scripts/banner-gen/generate.mjs b/scripts/banner-gen/generate.mjs
index 6796dbb..e13a67e 100644
--- a/scripts/banner-gen/generate.mjs
+++ b/scripts/banner-gen/generate.mjs
@@ -605,6 +605,25 @@ BANNERS['patching-workbench-26-for-mariadb'] = {
],
};
+BANNERS['why-i-still-bought-a-local-gpu'] = {
+ titlebar: 'root@unraid — local inference',
+ lines: [
+ { t: 'prompt', text: '$' }, { t: 'cmd', text: 'llama-server -m qwen3.8-27b-Q6_K.gguf --n-gpu-layers 99' },
+ { t: 'dim', text: '24GB VRAM · ~1300 tok/s prefill · 40 tok/s decode' },
+ { t: 'prompt', text: '$' }, { t: 'cmd', text: 'agent run --task build-from-spec --iterations 50' },
+ { t: 'err', text: 'frontier api: 50 calls · metered · quota can change' },
+ { t: 'ok', text: 'local gpu: 50 calls · $0.00 · runs as long as I want' },
+ { t: 'hl', text: 'use the frontier to DECIDE, local compute to BUILD' },
+ ],
+ flow: [
+ { n: '1', label: 'frontier plans' },
+ { n: '2', label: 'spec locked' },
+ { n: '3', label: 'local agents run' },
+ { n: '4', label: '50× iterations' },
+ { n: '5', label: 'fixed cost ✓' },
+ ],
+};
+
// ---------- read frontmatter ----------
const postPath = join(ROOT, 'src', 'content', 'posts', `${slug}.md`);
let category = 'devops';
diff --git a/scripts/og-gen/generate.mjs b/scripts/og-gen/generate.mjs
index df32d6b..cd127b5 100644
--- a/scripts/og-gen/generate.mjs
+++ b/scripts/og-gen/generate.mjs
@@ -191,7 +191,13 @@ const DEFAULT_TERMINAL = `
$engineering · devops · self-hosting
read the full post →
`;
-// ---------- read frontmatter from the post ----------
+TERMINALS['why-i-still-bought-a-local-gpu'] = `
+ $agent run --task build-from-spec --iterations 50
+ api: 50 calls · $12.40 · quota may change
+ local: 50 calls · $0.00 · runs on my card
+`;
+
+// ---------- read frontmatter ----------
const postPath = join(ROOT, 'src', 'content', 'posts', `${slug}.md`);
if (!existsSync(postPath)) {
console.error(`Post not found: ${postPath}`);
diff --git a/src/content/posts/why-i-still-bought-a-local-gpu.md b/src/content/posts/why-i-still-bought-a-local-gpu.md
new file mode 100644
index 0000000..43aba81
--- /dev/null
+++ b/src/content/posts/why-i-still-bought-a-local-gpu.md
@@ -0,0 +1,225 @@
+---
+title: "Why I Still Bought a GPU to Run AI When Claude and GPT Are Obviously Stronger"
+description: "Claude Opus and GPT are stronger than anything I can run locally. Here is the cost, control, and uptime argument for owning a GPU anyway — with real numbers."
+pubDate: 2026-09-21
+category: ai
+tags: [local-llm, gpu, llama-cpp, lm-studio, agents, self-hosting, cost]
+ogImage: /og/why-i-still-bought-a-local-gpu.png
+banner: /banners/why-i-still-bought-a-local-gpu.png
+draft: false
+---
+
+I have a house full of self-hosted infrastructure — Docker stacks, a NAS, a
+tunnel, a small army of cron jobs. And I still pay for frontier models.
+
+So when people find out I run local models too, the question is always the same:
+*Claude and GPT are stronger. Local models are a pain to set up, slower, and
+often just worse. So why did you spend money on a GPU?*
+
+If you are only comparing raw model capability, I agree with you completely.
+When I hit a genuinely new problem, do complex reasoning, plan a product
+architecture, or kick off a long agent run, I still reach for Claude or GPT
+first. I did not deploy local models because I think they have beaten the
+closed frontier.
+
+I did it because of a different problem that only showed up *after* AI got good
+enough to depend on. Everything I built started sitting on a service I do not
+control.
+
+---
+
+## The problem is not capability — it is dependency
+
+How many tokens you get, what a plan costs, which regions can buy the commercial
+service, when the model version changes under you — none of that is the user's
+decision. Anthropic has regional restrictions of its own; some markets cannot
+buy Claude's commercial service directly. OpenAI's plans, quotas and model
+lineup keep shifting. These are commercial services, so of course they change.
+
+That was fine when ChatGPT was something I opened occasionally to ask a
+question. If it was unavailable today, I would ask tomorrow and lose nothing.
+
+It stopped being fine once I started using AI to write code, run agents,
+analyze documents, handle support, organize company data, and wire models into
+workflows that run every day. When AI moves from *chat tool* to *infrastructure*,
+the question changes. It is no longer "which model is smarter?" It becomes:
+
+> "If I depend on this model today, and its terms change tomorrow, does my work
+> still run?"
+
+That is why I think the stronger the closed models get, the more valuable a
+local model becomes. Precisely *because* they are so good, people hand them more
+and more work. And the deeper the dependency, the more of your operation someone
+else controls.
+
+There is a second-order version of this that rarely gets said plainly. Every big
+lab talks about AI safety, model risk, and restricting certain content, regions
+or use cases — while all of them keep racing to make models stronger, because
+capability *is* the competitive advantage. Nobody stops, because if you stop,
+someone else does not.
+
+So what actually gets controlled is rarely whether AI keeps developing. It is
+who may use it, how, how much, and how far the vendor is willing to go. For an
+individual, that reads like a terms-of-service page. For a business, it is
+**supplier risk**. If your core process and every agent, tool and data pipeline
+around it are pinned to one vendor, you are not just buying tokens — you are
+handing over part of the steering wheel.
+
+---
+
+## "But local models are worse" — yes, and that is the wrong comparison
+
+This is the most honest objection, and it is true. Put a model that fits on a
+24GB or 32GB consumer card against Claude Opus and it loses on complex tasks. No
+argument.
+
+But the comparison most people run is wrong. The question is not *can Qwen beat
+Claude*. It is:
+
+> **Is the capability gap large enough to justify using the most expensive model
+> for this task, forever?**
+
+Because the trade is not symmetric. A 20–30B model is meaningfully behind the
+frontier — and costs one to two orders of magnitude less per token, or runs on
+hardware you already own. Different ratio, different decision.
+
+### I treat capability as a threshold, not a ranking
+
+If a task is below some capability line, it cannot be done at all — use the
+strong model. But once a model crosses that line, the things that decide how I
+actually work stop being benchmark scores and become cost, speed, whether it can
+run for hours, and whether I control the system.
+
+Concretely, here is how it splits for me:
+
+| Task | What I reach for |
+|---|---|
+| Vague problem, no clear direction yet | Frontier model — a wrong early call invalidates everything downstream |
+| Product architecture, data model, acceptance criteria | Frontier model |
+| Scaffolding a project to a fixed spec, editing files, running tests, fixing failures | Local model |
+| Long-running agents, retries, batch jobs, bulk content | Local model |
+
+The important shift is the second block. Once direction is settled and the agent
+is *executing a spec*, a single task may call a model 20–50 times. Do all fifty
+calls need the most expensive model on the market? Usually not. The agent is not
+deciding what the product should be — it is following specifications that are
+already written. If a local model understands those specs and knows how to use
+the tools, it has crossed the working threshold.
+
+---
+
+## Agents turn a small price difference into a large one
+
+With chat, you ask once and get one answer. If Claude costs many times more than
+a local model, you barely notice.
+
+Agents are not one call. A task can invoke the model twenty times, fifty times;
+it fails and reruns. The per-token price gap gets multiplied by every call.
+
+And anyone who has actually built these pipelines knows the expensive part is
+not the final run — it is the testing before it. You rewrite the prompt, swap
+tooling, re-chunk the data, adjust the workflow, and run the same thing ten or
+twenty times. That is normal.
+
+On metered API calls, I feel it: *I am burning money right now.* On my own card,
+there is still electricity and hardware cost, but running an agent five times or
+fifty times does not add a line to an invoice. That difference changes my
+behavior — it decides whether I dare keep testing. Most stable AI workflows are
+not written correctly the first time. They get there after failing enough times
+that you find out where they break.
+
+The value of local compute is that you move that trial-and-error into a fixed
+cost. That is a different question from "how much does a million tokens cost."
+
+---
+
+## Open models crossed the useful line, and the line keeps moving
+
+Three years ago, running a model on a consumer card that could genuinely do work
+for you was a research project. Today, 20–30B models — quantized — handle real
+work on 24GB and 32GB cards. Go up in VRAM and language, image, and now portions
+of video generation become self-hostable too.
+
+The important part is not "open source finally won." It is that work which used
+to be closed-model-only keeps falling inside the range that local hardware can
+do acceptably. If three years ago two of ten jobs could run locally, and today
+four or five can, that ratio alone has changed the value of owning the hardware.
+
+And when I buy a GPU, I am not buying a specific model. Models change. If a
+better coding model ships next month, I swap weights. If a better quantization
+scheme lands in six months, the same card suddenly fits a model it could not run
+before. What I actually bought is **compute I control**; the models on top of it
+are disposable.
+
+That is the structural difference. A closed model is stronger — and also exactly
+the version one company currently chooses to offer you, at terms it currently
+chooses. Local hardware is weaker — but as long as the card holds up, I decide
+which model runs today, which version I switch to, and how long it runs.
+
+---
+
+## Fixed compute vs. renting compute
+
+If AI stays a question-and-answer tool, I do not think most people need a GPU at
+all. But that is clearly not the direction. Agents run for long stretches. Image
+and video models want bulk generation. Companies hand more fixed processes to
+AI. We are not just *using models more often* — models are becoming a continuously
+working compute unit.
+
+At that point, owning part of the capacity and renting every execution become
+**two different cost structures**. Low usage: renting is obviously more
+convenient. High, steady usage: owning lets you control and predict cost.
+
+It also buys something no API can sell you — control. When the machine is mine,
+I can point it at internal data, connect my own tools, and run agents for hours
+without checking whether a vendor's plan, quota or limits changed overnight.
+Once AI is inside real company processes, this stops being about saving tokens.
+Some data should not leave the environment it lives in. Some agent permissions
+should not be handed wholesale to an external service. If the model runs on my
+own hardware, data, tools, permissions and execution can be designed together.
+*That* is what I mean by control — not merely having the weights on disk.
+
+---
+
+## What I actually evaluate now
+
+I no longer judge a local model by "it is dumber than Claude, therefore
+worthless." Four questions, in order:
+
+1. **Does this model clear my working threshold** for this specific job?
+2. **How many times will this task execute?**
+3. **Does it need heavy trial-and-error, or long agent runs?**
+4. **Does the data or system need to stay in my own environment?**
+
+When those stack up, a local model — even one that is not the strongest — can be
+the better tool for that slice of work. And as open models improve, that slice
+keeps getting bigger.
+
+So what I am bullish on is not one model or one GPU. It is the trend: **more AI
+work becomes doable on hardware you own.** A consumer card that used to run only
+language models now runs agents, image generation, video. Better models and
+better inference frameworks keep giving the same metal new jobs.
+
+Hardware depreciates, new cards get more expensive — that is real. But the model
+is not locked in. As long as the machine has enough compute, I can keep swapping
+in newer open models.
+
+---
+
+## The short version
+
+I no longer compare "which model is smarter." I compare **how much capability
+this job needs, how many times it will run, and how much control I am willing to
+leave in someone else's hands.**
+
+Where I need frontier reasoning, I pay for the frontier. But when work becomes
+high-volume, continuous and predictable — and a local model has crossed the
+usable threshold — there is no reason to keep paying frontier prices for every
+single step.
+
+In one line:
+
+> Use the frontier model to decide what to build. Use local compute to build it
+> a thousand times.
+
+That is why I bought the GPU.
diff --git a/src/content/posts/zh/why-i-still-bought-a-local-gpu.md b/src/content/posts/zh/why-i-still-bought-a-local-gpu.md
new file mode 100644
index 0000000..a0fbd26
--- /dev/null
+++ b/src/content/posts/zh/why-i-still-bought-a-local-gpu.md
@@ -0,0 +1,195 @@
+---
+title: "Claude 和 GPT 明明更強,我為什麼還是買了 GPU 跑本地 AI"
+description: "Claude Opus 和 GPT 確實比我能在本地跑的任何模型都強。但我還是買了 GPU——這篇講成本、控制權與可用性,附實際的判斷標準。"
+pubDate: 2026-09-21
+category: ai
+tags: [local-llm, gpu, llama-cpp, lm-studio, agents, self-hosting, cost]
+ogImage: /og/why-i-still-bought-a-local-gpu.png
+banner: /banners/why-i-still-bought-a-local-gpu.png
+draft: false
+---
+
+我家裡塞滿了自架的東西——Docker stack、NAS、tunnel、一堆 cron job。但我
+照樣在付頂級模型的錢。
+
+所以每次別人知道我也在跑本地模型,問的都是同一句話:*Claude 和 GPT 就是
+比較強,本地模型又麻煩、又慢、效果還比較差,那你到底為什麼要花錢買 GPU?*
+
+如果只比模型能力,我完全同意。今天要處理一個全新的問題、做複雜推理、規劃
+產品架構、或者跑一個很長的 Agent 任務,我大部分時間還是先用 Claude、GPT。
+我部署本地模型,從來不是因為我覺得它已經打贏閉源模型。
+
+而是因為 AI 越來越好用之後,出現了另一個問題:我做的每一件事,都開始建立
+在一個我自己完全不能控制的服務上。
+
+---
+
+## 真正的問題不是能力,是依賴
+
+今天模型可以用多少、方案怎麼收費、什麼地區能不能用、版本什麼時候換掉,
+最後都不是使用者決定的。Anthropic 本來就有自己的地區限制,有些市場不能
+直接買 Claude 的商業服務;OpenAI 的方案、額度跟模型也一直在調。這些是商業
+服務,變動本來就可以預期。
+
+以前 ChatGPT 只是偶爾拿來問問題,今天不能用,我明天再問沒什麼差別。
+
+但當我開始拿 AI 寫程式、跑 Agent、分析文件、處理客服、整理公司資料,甚至
+把它接進每天都在跑的工作流程之後,問題就變了。當 AI 從聊天工具變成工作裡
+的基礎設施,你要考慮的就不只是「哪一個模型比較強」,而是:
+
+> 如果我今天很依賴這個模型,但有一天它的使用條件改掉,我原本的工作還能不能繼續?
+
+這就是為什麼我覺得,閉源模型越強,本地模型的重要性會越來越高。因為閉源
+模型太好用,大家就會把越來越多事情交給它;依賴越深的同時,也會越被這些
+閉源模型控制。
+
+還有一件事很值得講清楚。每一家大模型公司都在談 AI 安全、模型風險,甚至
+限制某些內容、地區或使用方式,但同時每一家又都還在拼命把模型做得更強——
+因為模型能力本身就是競爭力,你不做,別人還是會做。
+
+所以最後真正被控制的,往往不是 AI 要不要繼續發展,而是誰能用、怎麼用、
+用多少,以及模型公司願意提供到什麼程度。對一般人來說,這可能只是服務
+條款;對企業來說,這就是**供應商風險**。假設一間公司的核心流程,加上後面
+所有 Agent、工具、資料處理,全部綁在同一個供應商身上,那它其實不只是在買
+Token——它是在把一部分工作的主控權交出去。
+
+---
+
+## 「可是本地模型就是比較差啊」——對,但這是錯誤的比較方式
+
+這是最誠實的反對意見,而且它是事實。拿一個能放進 24GB、32GB 消費級顯卡的
+模型,直接跟 Claude Opus 全面比較,很多複雜任務就是會輸。這沒什麼好辯的。
+
+但大家很容易用了錯誤的比較方式。真正該問的不是「Qwen 能不能打贏 Claude」,
+而是:
+
+> **這個能力差距,到底有沒有大到值得你永遠用最貴的模型來做這件事?**
+
+因為這個交換並不對稱。二三十 B 的模型確實落後頂級模型一截,但成本低一到
+兩個數量級,或者直接跑在你已經買的硬體上。比例不同,決策就不同。
+
+### 我把模型能力看成分界線,不是排行榜
+
+如果一個任務低於某個能力門檻,那就是做不了,當然用強模型。但一旦跨過
+那條線,後面真正影響我使用方式的,就不再是 benchmark 分數,而是成本、
+速度、能不能長時間運行,以及我能不能控制這套系統。
+
+以我的實際分法:
+
+| 任務 | 我用什麼 |
+|---|---|
+| 問題還很模糊、連方向都不知道 | 頂級閉源模型——前面判斷錯了,後面做再多都沒意義 |
+| 產品架構、資料格式、驗收條件 | 頂級閉源模型 |
+| 照著已定規格建專案骨架、改檔案、跑測試、看到錯誤再修 | 本地模型 |
+| 長時間 Agent、重試、批次工作、大量內容產出 | 本地模型 |
+
+關鍵是第二塊。一旦方向確定、Agent 只是在執行規格,一個任務可能會呼叫模型
+二十次、五十次。這五十次真的每一次都需要市面上最貴的模型嗎?通常不需要。
+Agent 已經不是在幫我決定產品要怎麼做,它是在按照前面已經寫好的規格執行。
+只要本地模型可以正確理解這些規格、知道工具怎麼用,它就已經跨過可以工作的
+門檻。
+
+---
+
+## Agent 會把小小的價差一直放大
+
+用聊天,是問一次、回答一次。Claude 一次比本地模型貴很多,你也不會有特別
+感受。
+
+但 Agent 不是一次。一個任務可能呼叫模型二十次、五十次,失敗之後還會重新
+跑。模型單次價格的差距,放進這種連續任務裡就會被一直放大。
+
+而真正做過這些流程的人都知道,最花資源的往往還不是最後正式執行,而是前面
+測試。你會改 Prompt、換工具、重新切資料、調整工作流程,同一個東西跑十次、
+二十次很正常。
+
+每次都是 API,我自己就會很明顯感覺到:又在燒錢。用自己那張卡,當然還是有
+電費跟硬體成本,但我今天讓一個 Agent 跑五次還是五十次,不會每跑一次就多
+一筆帳單。這對我來說很重要,因為它會直接影響我敢不敢一直連續測試。很多
+真正穩定的 AI workflow,不是第一次寫完就成功,而是讓它失敗很多次之後,
+才慢慢找到什麼地方容易出問題。
+
+本地算力其中一個很大的價值,就是你可以把這些大量試錯搬回自己的固定成本
+裡。這跟單純比較「一百萬 Token 多少錢」其實是兩件事。
+
+---
+
+## 開放模型已經跨過可用的線,而這條線還在移動
+
+三年前,要在消費級顯卡上跑一個真的可以幫你工作的模型,限制很多。現在
+二三十 B 的模型經過量化之後,24GB、32GB 這種顯卡已經可以處理不少工作;
+再往更大的記憶體走,語言、圖片,甚至部分影片模型都開始可以自己部署。
+
+真正重要的不是「開源終於打贏閉源了」,而是原本只有閉源模型做得到的工作,
+正在一個一個掉進本地可以處理、而且可以被接受的範圍。假設三年前十個工作
+只有兩個能放本地,現在已經有四五個可以做——這個比例本身就已經改變了
+本地部署的價值。
+
+而且我買 GPU 的時候,不是在買 Qwen 這一顆模型。模型可以一直換,也會一直
+出現新的:如果之後出現一個更適合 Coding 的開放模型,我直接換權重;再過
+半年有更好的量化方式,同一張卡可能又可以裝進原本跑不動的模型。我真正買
+下來的,是**一塊自己可以控制的運算資源**,後面的模型可以一直替換。
+
+這就是本地跟閉源服務最不一樣的地方。閉源模型能力通常比較強,但你用的是
+某家公司現在願意提供給你的版本;本地硬體能力可能沒那麼高,但只要硬體
+撐得住,我可以自己決定今天跑什麼模型、換什麼版本、要跑多久。
+
+---
+
+## 固定算力 vs. 每次租算力
+
+如果 AI 永遠只是拿來問問題,我完全不覺得大家都需要買 GPU。但現在發展方向
+很明顯不是這樣:Agent 會長時間執行工作,圖片跟影片模型會需要大量生成,
+公司也會把更多固定流程交給 AI。我們不是單純使用模型的次數變多,而是模型
+開始變成一個持續工作的運算單位。
+
+這時候,「固定擁有一部分算力」跟「每一次執行都向外面租」,就會開始變成
+兩種不同的成本結構。使用量少,租一定比較方便;使用量夠大、夠固定之後,
+自己有算力就能更好控制與估算成本。
+
+它還多了一個閉源服務給不了的東西:主控權。當機器是我的,我要跑內部資料、
+接自己的工具、長時間執行 Agent,都不需要每次先確認供應商的方案、額度或者
+限制有沒有改。尤其公司真的開始把 AI 接進內部流程之後,這件事就不只是省
+Token——有些資料本來就不適合離開自己的環境,有些 Agent 權限也不可能直接
+全部交給外部服務。當模型跑在自己的環境裡,資料、工具、權限跟執行方式可以
+一起設計。這才是「控制權」真正指的東西,不只是把權重下載下來而已。
+
+---
+
+## 我現在實際怎麼判斷
+
+我不會再用「它比 Claude 笨,所以沒有價值」這種方式判斷一個本地模型。我會
+依序看四件事:
+
+1. **這顆模型能不能跨過我這個工作的門檻?**
+2. **這個任務會執行多少次?**
+3. **是不是需要大量試錯,或長時間的 Agent?**
+4. **這些資料跟系統,到底要不要留在自己的環境?**
+
+這幾個條件一疊起來,本地模型即使不是最強,還是可能比頂級閉源模型更適合
+那一段工作。而且隨著開放模型越來越強,這個範圍只會一直變大。
+
+所以我真正看好的,不是某一顆模型,也不是某一張 GPU,而是這個趨勢:
+**可以在自己硬體上完成的 AI 工作正在變多。** 以前買一張消費級顯示卡,
+可能只能拿來跑一些語言模型;現在開始可以接 Agent、圖片、影片,後面模型
+跟推理框架繼續優化,同樣的硬體又可能得到新的用途。
+
+硬體當然會折舊,新卡也可能越來越貴,但至少模型不是綁死的。只要這台機器
+還有足夠的運算能力,我就可以一直換新的開放模型。
+
+---
+
+## 一句話版本
+
+我現在已經不會只看哪個模型比較聰明。我比較的是:**這件工作到底需要多強的
+模型、它要被執行多少次,以及我願意把多少控制權留在外部服務手上。**
+
+需要頂級推理的地方,我照樣花錢用最強的模型。但當工作開始變成大量、連續、
+固定,而且本地模型的能力已經跨過可使用門檻時,我就沒有理由每一個步驟都
+繼續用最貴的閉源模型。
+
+濃縮成一句:
+
+> 用頂級模型決定要做什麼,用本地算力把它做上一千次。
+
+這就是我買 GPU 的原因。