花園
7 則筆記正在生長。清除篩選 ✕
標籤nestjs平台rootnote架構✕前端踩雷程式碼走讀projectdddnuxt心路seo安全資料庫部署ios共筆dockerlinuxpythonssrtradewindows構想流程測試資料視覺化需求分析成熟度種子扎根✕常青
- 三個環境變數的哲學:memory 預設、redis 可換 平台的快取與分散式鎖各自抽象成 port,背後兩套實作:in-memory 與 redis,用環境變數切換。這個設計的核心信念是:fresh clone 必須零外部依賴就能跑起來。 預設 memory 的理由 新人(或三個月後的自己)clone 下來,npm install 完就該能啟動——不需要先架 redis、不需…
- 信件系統的四塊積木:模板、設定、規則與一個不重試的 send 「寄信」聽起來是一個功能,拆開來其實是四個關注點,我把它們做成四塊獨立的積木: 四塊積木 - 版型(layout)——信的外殼。後台上傳 HTML,插槽只有主旨、內容、站名三個變數,上傳當下驗證。多封信共用同一個殼,改一次全站換裝。 - 信件定義(entry)——每封信的內容。feature 在程式碼裡註冊 key、變…
- 自動儲存 vs 稽核紀錄:折疊窗口的取捨 後台的每個寫入端點都掛稽核——誰、什麼時候、對誰、做了什麼成功的操作,一列一筆。這套機制撞上筆記編輯器的自動儲存時,出了一個好問題:打字停頓 1.5 秒就存一次,寫一小時的文章=幾百筆「編輯筆記」稽核,其他真正重要的動作(發佈、刪除)全被洗掉了。 選項與抉擇 不記編輯?那「已發佈的文章事後被改過」這種真正有稽核價值的事…
- Wikilinks 與 backlinks:用算的,還是落表?答案是一半一半 花園的靈魂是 雙向連結——我在筆記裡寫 某篇的slug,那篇筆記的頁尾自動長出「誰連到我」。實作上第一個要回答的問題:backlinks 是算出來的還是存起來的? 第一版:純用算的 語法解析是 domain 的純函式:從 body 抽出所有 wikilink slug。backlinks 就是反向索引——把所有已發佈筆…
- 一個事件、三個出口:通知系統的解耦練習 平台有三個長得很像的模組:站內通知(DB + 讀取 API)、SSE 即時推播、outbound webhook(對外部訂閱者投遞)。最初的直覺是把它們做成一個「通知服務」,provider 呼叫時指定要走哪些管道——這個直覺是錯的。 正確的形狀:producer 只派發領域事件,三個出口各自是 listener。 N…
- 前端殼的三道客製縫:整頁、碎片、配色 後端有 forge-monorepo|platform 套件,前端對應的是 web-kit——登入、版型、選單、主題這些每個後台都要的殼。難題跟後端不同:前端的客製需求是視覺的、瑣碎的、無孔不入的。如果每個 app 想改個顏色都要 fork 整個殼,套件就死了。 我的答案是把客製收斂成三道明確的縫,由粗到細: 1. 整…
- 支援矩陣收斂史:告別 MySQL 與 SQLite 的決策帳 基底範本最初的野心是「三種資料庫都支援」:postgres、mysql、sqlite。半年後我把矩陣收斂成 postgres only——這篇記下這筆決策帳,因為「刪掉支援」比「增加支援」難談,也更值得談。 MySQL 先退場 翻遍部署紀錄:從來沒有一個場景真的用 mysql,driver 甚至沒安裝過。它卻在真實地收…