Quartz Publishing — Vault to humanerd.kr Pipeline
Obsidian vault를 source of truth로 사용하면서, 자동 빌드 + 배포로
humanerd.kr에 게시하는 pipeline.
흐름
Obsidian vault (P0~P6 + memories)
↓ symlink
humanerd-site/content/ (insights, blog, portfolio, services, growth, knowledge, ...)
↓ npx quartz build
public/ (정적 HTML)
↓ wrangler pages deploy
Cloudflare Pages
↓ DNS
humanerd.kr
트리거
| 트리거 | 메커니즘 | latency |
|---|---|---|
| vault 파일 변경 | fswatch LaunchAgent (com.drewgent.quartz-fswatch) | 5s debounce → build → deploy |
| cron job | site-spec-audit-weekly (일 04:00 KST) | 일 1회 |
| 수동 | bash ~/.drewgent/P4-cortex/scripts/quartz-deploy.sh | 즉시 |
3-pillar 매핑 (2026-06-01 reorg)
/insights/[slug]/— 영구 essay (P4-cortex/knowledge/)/portfolio/[slug]/— Drewgent 산출물 (P4-cortex/portfolio/)/blog/[year]/[slug]/— 시간순 article (P2-hippocampus/memories/insights/)
Content Pipeline — Status State Machine (2026-06-02)
Quartz build 시 DraftFilter plugin이 모든 article을 검사. status field로 라이브 노출 여부 결정 — 모든 콘텐트는 pipeline을 거쳐야 함.
draft (작성)
↓
in_review (검토 중)
↓
polished (윤문 완료) [plugin include]
↓
published (발행 완료) [plugin include] → humanerd.kr 라이브
archived (보관) → plugin EXCLUDE
domain: draft → plugin EXCLUDE
status field 없음 → plugin EXCLUDE (default-draft, strict)
Plugin include list (live 노출):
status: publishedstatus: polished
Plugin exclude list (404):
status: draftstatus: in_reviewstatus: archivedstatus: publish(단수형 — plugin include에 매칭 안 됨, naming convention 일관성 필요)domain: draft- status field 없음 (default-draft, strict)
이전 incident: 5/23~5/26 자동 생성 article 4개 (gemini-cli-shutdown, remove-ai-watermarks, claude-code-essence, flue-sandbox-agent) 가 user 검토 없이 라이브 노출됨. 6/2 strict default-draft 적용으로 모두 영구 404 처리.
Quartz 설정 핵심
transformers: [Plugin.FrontMatter(), DraftFilter(), ...]—statusfield 기반 excludeignorePatterns: [..., "drafts/**"]— DraftFilter가 exclude한 file은 drafts/ namespace로 이동 + ignorePatterns로 public/에서 완전 제외Plugin.AliasRedirects()— 옛 URL redirect 자동 생성Plugin.ContentIndex({ enableSiteMap: true, enableRSS: true })— sitemap + RSS
새 Article 작성 가이드
- vault에 .md file 작성 (
memories/insights/for blog,P4-cortex/knowledge/for insights,P4-cortex/portfolio/for portfolio,humanerd-site/content/services/for services) - frontmatter에
status: draft명시 (작성 중) - 검토 후
status: published또는polished로 변경 → live 노출 - fswatch가 변경 감지 → quartz build → wrangler deploy → 5s debounce 후 humanerd.kr 반영
frontmatter 없으면 영구 404. 새 article은 반드시 status field 명시.
LaunchAgent
com.drewgent.quartz-fswatch
→ watches: memories/insights, P4-cortex/growth, P4-cortex/knowledge, humanerd-site/content
→ debounce: 5s
→ command: bash ~/.drewgent/P4-cortex/scripts/quartz-fswatch.sh
com.drewgent.quartz-deploy (KeepAlive)
→ command: bash ~/.drewgent/P4-cortex/scripts/quartz-deploy.sh
→ project: humanerd-site
→ CF Account: dc0199b6b6c27bc9bb2f3201d47cb643
Cloudflare Pages
- Project:
humanerd-site - Account ID:
dc0199b6b6c27bc9bb2f3201d47cb643 - Deploy mode: directory (no git)
- Domain:
humanerd.kr
Related
- obsidian-vault-site-principle — vault + site source of truth principle
- humanerd-site-url-mapping — 3-pillar URL mapping
- obsidian-markdown — OFM writing skill
- obsidian-cli — vault CLI ops
- humanerd-content-status-enforcement — agent self-apply guideline for status field