照不到 NoFlash:40 天用 Claude Code 打造的測速照相 App,挑戰十年老牌競品
2026年1月底,因為車子沒有測速照相的提醒功能,得到了一張國家級的外拍照

2026 年 2 月底,我決定用 Claude Code 做一件瘋狂的事:
從零開發一款 iOS 測速照相警示 App,挑戰台灣市場上已經存在近十年的競品
40 天後,照不到 NoFlash 誕生了
241 個 commits、35,199 行 Swift 程式碼、58 個測試檔案、2,122 支測速照相機資料。這不是一個 side project 的 demo,這是一個準備上架 App Store 的完整產品
為什麼要做這個?
身為一個每天開車上下班塞車通勤的人,我對台灣現有的測速照相 App 覺得UI/UX很醜,
再加上常駐的嵌入式廣告影響使用體驗
最讓我無法忍受的是:沒有一款 App 能正確處理高架橋和平面道路的區分
你開在高架上,App 卻因為平面的測速照相機一直嗶嗶叫
或者你開在平面,頭上高架的照相機觸發了警示,這個問題在台北市區尤其嚴重
Vibe Coding:與 Claude Code 的 40 天衝刺
這個專案的開發方式跟傳統不一樣。我沒有寫 PRD,沒有畫 wireframe,沒有排 sprint
我用的是 vibe coding — 跟 Claude Code 對話、描述我要什麼、一起迭代
開發節奏大概是這樣:
第一週(2/24 - 3/1):打地基
建立核心引擎架構:AlertEngine、AlertLevelResolver、DirectionMatcher、GPSFilter。選擇 SQLite + R-tree 空間索引做測速照相機的快速查詢。導入 Kalman Filter 做 GPS 速度平滑。第一週結束時已經有 47 個 unit tests
第二週(3/1 - 3/8):功能爆發

自訂語音錄製、Premium 訂閱 + StoreKit、極簡駕駛介面、氣壓計高程偵測(區分高架橋和平面道路)
第三週(3/8 - 3/22):演算法硬核調校
9 項引擎優化(P0-P2)、區間測速追蹤、隧道 Dead Reckoning(慣性導航 12 分鐘,相容 12.9 公里的雪山隧道)
這週最痛苦,因為演算法的 edge case 無窮無盡
我用了SDD 用了TDD
翻出政府的交通相關指引丟給AI好好詳讀
讓AI 跟 AI相互review 探討各種台灣的用路情境
第四週(3/22 - 4/2):實路測試與修正

每天開車上路實測
一天的路測就修了 71 筆重複照相機資料、
修正 GPS filter 的方向判斷、調整 alert level 的 ETA 閾值
新增 74 個 XCUITest 覆蓋所有可自動化的使用者旅程
上班路程一個log 下班回家一個log 每天就靠兩個log 檔來回的跟AI回報使用體驗
技術架構:為什麼照不到比較準
1. 物理模型而非距離閾值

照不到用的是 ETA(預計到達時間)模型:根據當前速度和加速趨勢,計算幾秒後會到達照相機位置,然後決定警示等級
6 級警示:追蹤 → 預警 → 警告 → 接近 → 超速 → 無
每一級都有對應的語音和震動回饋
2. 高程層級偵測
這是照不到最大的差異化。透過三重判斷:
- 氣壓計 — iPhone 內建的氣壓感測器偵測高度變化
- OSM 道路資料 — 從 OpenStreetMap 查詢道路類型(motorway、trunk、primary)
- 地址關鍵字分析 — 「高架」「橋下」「匝道」等 163 種寫法歸一化
三者交叉比對,才決定你到底在高架上還是平面上
3. 方向判斷
DirectionMatcher 比對你的行駛方向(GPS heading)和照相機的拍攝方向(bearing),
90° 閾值過濾掉對向車道的照相機
特殊處理「雙向」照相機(bearing=nil)
4. 隧道慣性導航
進入隧道後 GPS 訊號會消失。照不到內建 Dead Reckoning 模組,用最後已知速度和方向推算位置,支撐最長 12 分鐘的慣性導航 — 足以通過雪山隧道(12.9 公里)
5. 資料品質
政府開放資料有 5 個不同來源(全國 + 台北/桃園/台中/高雄),格式不一、品質參差。
我寫了一套完整的 Python 資料管線:
- 爬蟲抓取 5 個政府 API
- OSM Overpass API enrichment(道路類型、承載方向)
- 50 公尺去重(考慮速限差異、高程差異、照相機類型)
- 163 種方向寫法歸一化為 8 個基準方位
- 150+ 行 enrichment 規則
設計語言:科技風格

純黑背景、最小化資訊密度、數據驅動
開車時你只需要看到三個東西:你的速度、距離下一支照相機多遠、現在的警示等級
5 種主題(Twilight、Starnight、Daybreak、Aurora、Inferno)、
C 型速度儀表盤、道路透視動畫背景、Dynamic Island 即時速度顯示
測試:不是玩具,是產品
58 個測試檔案、三層測試架構(Unit / Integration / Acceptance):
- 47 個 Unit Test — AlertLevelResolver 邊界條件、方向判斷、Kalman Filter 驗證、高程偵測、區間測速
- 11 個 UI Test — 74 個 XCUITest 覆蓋完整使用者旅程
- 實路測試 — 騎重機實測,一天修了 71 筆資料問題
Claude Code 的角色
我負責:產品方向、架構決策、UI/UX 設計、實路測試、資料品質把關
Claude Code 負責:演算法設計、快速產出程式碼、寫測試、refactor、文件撰寫、edge case 發想
Codex 客串: 時常 Claude Code 被1M上下文操到昏頭轉向時,可以討論點出問題的好幫手
這個分工讓我一個人在 40 天內完成了通常需要一個 3-5 人團隊花 3-6 個月的工作量
這不是 AI 取代人,這是 AI 放大人的能力
下一步
照不到 即將上架 App Store
如果你是台灣的駕駛人,對現有市場的測速 App 不滿意,
歡迎關注
技術人,但不只是技術。有時候,最好的產品來自於你自己就是最不滿意的使用者