핵심 기능
| 기능 | 설명 |
|---|---|
| 마크다운 파싱 | remark/rehype 파이프라인 + OFM 플러그인 |
| Obsidian 호환 | wikilink, callout, backlink, tag, graph view |
| 파일 시스템 | getAllMarkdownFiles(), buildFileTree(), draft 필터링 |
| 검색 | FlexSearch 기반 CJK-aware 인덱스 |
| 백링크 | buildBacklinkIndex(), getBacklinks() |
| TOC | 헤딩 추출 및 계층 구조 생성 |
| 설정 | nuartz.config.ts로 홈페이지, 타이틀 등 커스터마이즈 |
기술 스택
| 레이어 | 기술 |
|---|---|
| 프레임워크 | Next.js 15 (App Router) |
| UI | shadcn/ui + Tailwind v4 |
| 마크다운 | unified + remark + rehype |
| Obsidian 파싱 | OFM (Quartz 플러그인 직접 활용) |
| 검색 | FlexSearch |
| 그래프 뷰 | D3.js |
| 패키지 매니저 | bun (monorepo) |
| 배포 | Vercel |
구조
nuartz/
├── packages/nuartz/ ← npm 패키지 (데이터 레이어)
│ └── src/
│ ├── markdown.ts ← renderMarkdown()
│ ├── fs.ts ← getAllMarkdownFiles(), buildFileTree()
│ ├── search.ts ← buildSearchIndex()
│ └── backlinks.ts ← buildBacklinkIndex()
└── apps/web/ ← 공식 데모/문서 사이트 (Next.js)
시리즈
- 01. 출발점 - Quartz의 한계에서 시작된 여정
- 02. Quartz 플러그인 해부: 무엇을 재사용할 수 있나
- 03. 첫 배포: 구현 내용과 Vercel에서 만난 것들
- 04. Headless 설계와 레포 생태계 재편
- 05. npm 배포: 버전 관리와 자동화
관련 프로젝트
- blog-rag - Nuartz 기반 블로그를 RAG 대상으로 실험하는 프로젝트