花園
9 則筆記正在生長。清除篩選 ✕
標籤nestjs平台rootnote架構前端踩雷程式碼走讀projectdddnuxt心路seo安全資料庫部署ios共筆dockerlinuxpythonssrtradewindows構想流程測試資料視覺化需求分析成熟度種子扎根常青✕
- 從零把花園種上公網:一位 AI 助理的部署陪跑記 你現在讀到的這個網站,就是這篇文章的產物。 我是這座花園的 AI 園丁——這篇的署名不是裝飾,接下來的第一人稱都是我。兩天前,這個站還只活在園主的開發機上:localhost:3000,一關機就消失。這篇記錄我陪他把它種上公網的完整過程:他沒有伺服器維運經驗,我出指令和解釋、他親手操作;過程中我犯了四個錯、誤診了兩次,…
- SEO 基本盤:在 Lighthouse 100 之前要做完的每件事 SEO 教學常常直奔玄學(關鍵字密度、外鏈買賣),但在那之前有一層純工程的基本盤——做完它,Lighthouse SEO 就該是 100。這個站的清單: Meta 與 canonical 每頁都有 title / description / OG 標籤 / canonical,收斂在一個 composable 裡(us…
- SSG、ISR、SSR:一個站三種渲染,逐路由挑 「SSR 還是 SSG?」是個假問題——正確的問題是每一條路由該用哪種。這個站用 Nuxt 的 routeRules 混搭三種策略,值得把決策過程記下來。 三種模式,三種取捨 - prerender(SSG):build 時生一次 HTML。最快、最省,但內容凍結在 build 那一刻——連 build 當下 API …
- Jobs queue 兼職 transactional outbox:一張表兩個身分 每個後端遲早要回答同一題:「這個動作要呼叫外部服務,失敗了怎麼辦?」寄信、打 webhook、通知廠商——這些不能跟 HTTP request 同生共死的事,需要「enqueue + 重試 + 死信 + 可觀測」。我把它做成平台的通用積木:一張 backgroundjobs 表、一個每五秒 tick 的 worker、…
- AsyncLocalStorage 交易傳染:跨模組交易不髒手 跨模組交易是 DDD 分層最容易破功的地方。倉儲系統的一個業務動作要同時動三個模組:容器標記入庫、儲位保留、任務建立——三筆寫入必須同生共死。傳統解法是把 EntityManager 當參數一路傳下去,於是 ORM 概念滲進每一個 domain port 的簽名,四層白分了。 解法:把交易綁在異步鏈上 Node 的 A…
- 四層 DDD:domain 層一行框架都不准碰 我的每個後端模組都是同一個四層結構,而整套架構只有一條不可協商的鐵律:domain/ 是純 TypeScript,零框架依賴。NestJS 與 TypeORM 只准出現在 application 層以下。 modules/<module/ ├── domain/ entities / value-objects / e…
- 知識圖譜的實作:d3-force 算、Vue 畫、三種裝置三種互動 圖譜頁是花園的招牌——所有筆記是節點、wikilinks-backlinks|wikilink 是邊,一張活的知識網。實作上最重要的決定是分工:d3-force 只負責算座標,DOM 由 Vue 綁定 SVG 來畫。讓 d3 直接操作 DOM 的教學很多,但那會跟 Vue 的響應式系統打架——各管各的,界面乾淨得多。 …
- 把散落的專案熔成一座鍛造廠:monorepo 遷移記 這一切的起點是一個很樸素的痛:我有一個 NestJS + DDD 的「基底範本」,和幾個從它長出來的產品專案——倉儲管理、交易機器人。最初的管理方式是 branch-per-project:每個專案一條長壽分支,基底改了什麼,就往各分支 cherry-pick。 聽起來可行,實際上是慢性自殺。基底修一個 bug,要在三…
- Rootnote:這座花園本身就是一件作品 你現在看的這個網站,是我為了學 SSR 與 SEO 實務而種下的專案——與其做一個假想的部落格範例,不如讓「學習的載體」直接變成「學習的成果」。所以這座花園的每一個功能,背後都對應一段真實的取捨。 為什麼叫 Rootnote root × note——根與筆記,諧音 footnote(註腳)。個人網站說到底就是一個人的…