把 Obsidian vault 透過 Quartz 4 發佈成靜態網站的紀錄。發佈層與筆記本體分屬兩個 repo,本 vault 不含任何 Quartz 設定。

架構(分離雙 repo)

  • 筆記本體:本 repo obsidian-memory,只有 Inbox/Cards/Topics/ 與 skills,無 Quartz 設定檔。
  • 發佈層:獨立 repo obsidian-deploy,存放 quartz.config.tsquartz.layout.ts、CI 與稽核腳本。
  • 串接方式:發佈 repo 的 CI 用 actions/checkoutobsidian-memory 整個 clone 進 content/獨立 checkout,非 submodule),Quartz 把 content/ 當 vault 根目錄讀取。
  • 發佈範圍ignorePatterns(定義在發佈 repo 的 quartz.config.ts)排除 .obsidian、整個 Inbox/(含 YouTube 與 Clippings)、根目錄治理檔(CLAUDE.mdAGENTS.mdREADME.mdcard-quality.mdvault-map.mdSYSTEM-DESIGN.md)與 CI checkout 後落在 content/ 的工程檔;實際只發佈 Cards/Topics/ 與根 index.md。完整清單以發佈 repo 的 quartz.config.ts 為準。
  • 部署網址bugloop.com(GitHub Pages + 自訂網域)。

部署流程

部署由發佈 repo(obsidian-deploy)main 觸發,不是本 vault:

  1. 自動觸發:push 到 obsidian-deploy main 且異動到 Quartz 層檔案(quartz/**quartz.config.tsquartz.layout.tspackage.json / package-lock.jsondeploy.yml)。
  2. 本 vault 筆記變動「不會」自動觸發:改了 obsidian-memory 的筆記後,要到 obsidian-deploy 手動 workflow_dispatch 才會重新抓最新內容重建。
  3. CI(deploy.yml)依序:checkout 兩 repo(deploy 自身 + vault 進 content/)→ Node 22 npm cinpx quartz build 產出 public/upload-pages-artifactdeploy-pages 部署到 GitHub Pages。
  4. 完成後發 Discord 成功/失敗通知(webhook 走 secrets.DISCORD_WEBHOOK)。

重點設定

quartz.config.ts(在發佈 repo)關鍵值:

pageTitle: "Memory Pieces"
baseUrl: "bugloop.com"
locale: "zh-TW"
enableSPA: true
defaultDateType: "created"   // 用 created 當顯示日期
// ignorePatterns 見上方「發佈範圍」,以發佈 repo 原始檔為準

筆記格式

  • 用 frontmatter title 當標題,不用 # heading
  • draft: true 可隱藏未完成的筆記
  • Wikilinks 連筆記,Markdown link 連 tag 頁面和外部連結