SIDE PROJECTS · DAY 1–242

每個工具,
都是先痛過才做的

這 242 天裡我沒有為了做作品集而做東西——每一個都是自己卡住了、受不了了,才動手。 下面 19 個是真的做出來、而且到現在還在用的,其中 6 個附源碼。 每張卡片都連得回當天那篇,裡面有完整的做法跟踩到的雷。

專案
19
開源
6
相關文章
47
連續天數
242
FEATURED · 4 PROJECTS

最有代表性的四個

MCP Server 開源

line-cua-mcp

讓 AI 讀寫本機 LINE,全程不搶你的滑鼠和鍵盤

起點
案子的需求跟一改再改的細節全散在 LINE 對話裡,做到一半還得回頭翻。既有的開源工具能用,但每次一動就把 LINE 搶到前景、奪走鍵盤焦點,我打到一半的字還會跑進 LINE。
產出
改走 macOS Accessibility API:不模擬滑鼠鍵盤,直接跟系統說「按下這一格」。讀訊息直接讀本機那份加密資料庫,拿到的是完整歷史而不是畫面上那幾則;送訊息預設只留草稿、預設只允許 1:1。
cua-drivermacOS AX APIMCPClaude Code
Web App 開源

iPAS 題庫

195 題考古題,每題都有解析的證照練習網站

起點
準備 iPAS AI 應用規劃師中級,想用 top-down 的方式從考題往回念。但市面上的題庫不是要登入、就是只有題目沒解析。
產出
三科各 65 題全部跟官方答案欄對過,每題都有「為什麼」面板(為什麼這個對、其他三個為什麼錯)並直連學習指引 PDF 對應頁。選項打亂、弱點追蹤、純鍵盤操作,紀錄只存在你自己的瀏覽器。Day 162 我用它考過了。
Claude CodeVercellocalStorage
macOS Driver 開源

ez100pu-apple-silicon

讓 M 系列 Mac 讀得到 EZ100PU 自然人憑證讀卡機

起點
廠商這幾年沒出過 arm64 驅動,HiPKI 讀不到卡,自然人憑證、健保查詢、線上報稅全卡住。官方文件寫得很明確:不支援 M 系列晶片。
產出
以開源的 ezIFD 驅動為底,修掉三個讓它在 macOS 上打不開的 bug、重做 ad-hoc 簽章、預編譯成 arm64 bundle,再加一支會先清掉舊驅動的安裝腳本。HiPKI 九項自我檢測全過,一行指令裝好。
ezIFDarm64PC/SCClaude Code
Claude Code Plugin 開源

/skills-manager

Claude Code 和 Codex 共用同一套 skill,還能按專案開關

起點
skill 一多就吃掉 context window,每個專案其實只用得到其中幾個;混用多個 LLM 的話,同一份 skill 還得各維護一份。
產出
bullpen + symlink 架構——skill 統一住在 ~/.agents/skills-bullpen/,專案要用哪些就 symlink 哪些。兩條指令安裝,任何專案打一次 /skills-manager 就出互動選單勾選。
Claude Code PluginCodexsymlink
EVERYTHING ELSE · 15 PROJECTS

其他做出來的東西

Claude Code Plugin 開源

Permission Guardian

自動維護 Claude Code 的權限白名單

針對常見框架和 tech stack 先把安全的指令 mapping 進 settings.json 的白名單,只有超出預期的指令才需要你親自決定放不放行。

Claude Code Skillsettings.json
Automation Bot 已上線

Threads 海巡 Bot

每天早上自動掃 200 篇貼文,篩完摘要推到 Telegram

Cronjob 定時收集 → 本地 LLM 篩出有興趣的主題 → 整理摘要 → 推到 Telegram。用看一篇文章的時間掃完 200 篇。整條線是拿 SDD + BDD + TDD 一路寫下來的。

PuppeteerOsaurusqwen3-4bTelegram BotSDD/BDD/TDD
Desktop Dashboard 進行中

DevTown

六個 AI 專案住進一座像素小鎮,一眼看完誰還在忙

每個專案一間房間、每隻 AI 一個坐在桌前的角色,頭上掛著現在的狀態。WebSocket 保持即時連線,誰從閒置變成 working,畫面馬上動。把要記的東西從腦子搬到畫面上。

WebSocketPixel UIClaude Code sessions
Website 已上線

dawsonwang.com

你正在看的這個網站——文章發完就自動跟著上線

Astro 6 + Tailwind v4 部署在 Vercel,網域走 Cloudflare Registrar。100Days 內容以 git submodule 掛進來,GitHub Actions 定時 bump submodule pointer,Vercel 接手自動 build——100Days 那邊一行都不用改。

Astro 6Tailwind v4VercelGitHub Actions
Internal Tool 進行中

Studio

用瀏覽器遙控家裡那台 Mac 上的 Claude Code

手機或筆電開個網頁,就能寫文、跑完整條 pipeline、看三個平台的草稿、按下發佈。跑在自己的 MBP 上、只在 Tailscale 私網裡通,用的是 Claude Code 訂閱額度而不是另外付一筆 API 錢。

TailscaleClaude CodeWeb UI
Raycast Extension 已上線

Event Sidekick

看到活動截個圖,Raycast 一鍵丟進 Google 日曆

剪貼簿是圖就讀圖、是網址就抓網頁;也能直接框選螢幕。AI 把名稱、時間、地點抽成結構化欄位,順手比對有沒有撞期——然後停在這裡等你確認。從一開始就定死:AI 可以抽、可以建議,但絕不自己寫進行事曆。

RaycastFableGoogle Calendar
Personal Workflow 已上線

Obsidian 第二大腦

三層機制,讓 Claude 每次回話前先讀過我的筆記

UserPromptSubmit hook 在每次送出前用 fd + rg 撈出最相關的筆記注入背景;便宜的先跑、貴的用到才呼叫;寫入端有守門人,不讓 AI 亂改第二大腦。Day 180 把 151 則筆記整包搬到 Google 的 OKF 開放規格。

ObsidianClaude Code Hooksfd + rgOKF
Claude Code Command 已上線

/security-scan

一鍵派出六隻 sub-agent 平行掃描專案資安

一個 custom command,呼叫時同時派出 6 個獨立 sub-agent,各自負責不同的掃描面向,全部平行跑完再彙整成一份報告。

Claude CodeSub-agents
Claude Code Skill 已上線

gemini-web-image

讓 Claude Code 用你已經登入的瀏覽器叫 Gemini 生圖

建一個專用的 debug profile 走 CDP 連上去(跟你平常的 Chrome 完全獨立,不會把 cookies 複製到暫存目錄)。後來改成 headless 全背景執行,不彈任何視窗。Day 76 再補上正體中文標題排版——AI 生圖寫中文幾乎都會缺筆畫,所以拆成兩步做。

CDPPlaywrightGeminiheadless Chrome
Automation 已上線

AutoClicker

會自我進化的 App 廣告自動點擊系統

iPhone 定時截圖傳給 Mac,Mac 判斷完回指令。第一層先比對已知的「X」按鈕圖,命中就秒點;沒見過的才呼叫 Claude 看圖。每次 Claude 破解一個新廣告,那個按鈕就自動存回第一層的樣本庫——跑越久越少需要呼叫 Claude。

iPhone ↔ MacTemplate MatchingClaude Vision
Fork 開源

Antigravity-Manager fork

幫模型路由加上 Strategy Pool,額度用完自動換手

看到社群有個加 strategy pool 的 PR,但有 conflict、不見得會被 merge,就 fork 一版改在自己的 branch 上。設好 candidates 順序後,第一個模型額度用完就自動接到下一個。

Model RouterAntigravity
Claude Code Skill 已上線

open-source-prep

開源前那一串雜事,一句話跑完

把「只有我看得懂的私人專案」帶到「可以安全公開的 repo」,包含最容易漏掉也最危險的那一步,還有工程師最常略過的那關:你到底有沒有權利開源。

Claude Code Skill
Claude Code Skill 已上線

zh-tw-usage-detector

抓出 AI 中文裡「聽起來合理、但沒人這樣用」的詞

不靠清單,改用機制判斷:母語者是從腦裡「取」一個講定的固定講法,AI 是現場「組」一個聽起來合理的搭配。用這條線去掃,只回報候選、不自動改。

Claude Code Skill
Home Infra 已上線

家用 LLM 伺服器

書桌上的 MBP 當本地模型主機,Air 只當前端

Ollama 沒有 API key、沒有任何驗證,「誰連得到那個 port」等於「誰能用你的 LLM」。所以把它綁在 Tailscale 的介面 IP 上,網路層直接當驗證層——咖啡店的 Wi-Fi 掃不出這個 port。MagicDNS 解名字就連得到,Raycast 接上去當前端。

OllamaTailscaleRaycastMagicDNS