Back to skills
extension
Category: Development & EngineeringNo API key required

syncing-knowledge-garden

Syncs the sb-knowledge-base Obsidian vault to the knowledge-garden Quartz site. Use after reorganizing content in Obsidian or when the vault has been updated and the Quartz site needs to match.

personAuthor: jakexiaohubgithub

Syncing Knowledge Base to Knowledge Garden

Overview

This skill synchronizes content from sb-knowledge-base (Obsidian vault) to knowledge-garden (Quartz static site). The vault is the source of truth—all content reorganization should happen in Obsidian first, then sync to Quartz.

IMPORTANT: Only files with publish: true in their frontmatter are synced. Files without this field or with publish: false are excluded from the knowledge garden.

When to Use

  • After reorganizing content in Obsidian (artifacts, notes, links, tags, or types)
  • After adding or editing published content in the vault
  • When preparing to test a Quartz build with updated content
  • When type definitions have been updated in tools/types/

Repository Structure

sb-knowledge-base (source):

sb-knowledge-base/
├── artifacts/       ← Content to sync
├── links/           ← Content to sync
├── notes/           ← Content to sync
├── tags/            ← Content to sync
└── tools/
    └── types/       ← Content to sync (only this subfolder)

knowledge-garden (target):

knowledge-garden/
├── content/
│   ├── artifacts/   ← Sync destination
│   ├── links/       ← Sync destination
│   ├── notes/       ← Sync destination
│   ├── tags/        ← Sync destination
│   └── types/       ← Sync destination (from tools/types)
├── quartz/
└── quartz.config.ts

Workflow

1. Locate Repositories

Find where both repos are cloned on your machine. Common locations:

# Find sb-knowledge-base
find ~ -type d -name "sb-knowledge-base" 2>/dev/null | head -5

# Find knowledge-garden
find ~ -type d -name "knowledge-garden" 2>/dev/null | head -5

Set variables for your paths:

KB_REPO="/path/to/sb-knowledge-base"
KG_REPO="/path/to/knowledge-garden"

2. Verify Clean State

Both repos should have no uncommitted changes before syncing:

cd "$KB_REPO" && git status
cd "$KG_REPO" && git status

3. Sync Content

Sync all content directories:

# Sync artifacts
rm -rf "$KG_REPO/content/artifacts"/*
cp -r "$KB_REPO/artifacts"/* "$KG_REPO/content/artifacts"/

# Sync notes
rm -rf "$KG_REPO/content/notes"/*
cp -r "$KB_REPO/notes"/* "$KG_REPO/content/notes"/

# Sync links
rm -rf "$KG_REPO/content/links"/*
cp -r "$KB_REPO/links"/* "$KG_REPO/content/links"/

# Sync tags
rm -rf "$KG_REPO/content/tags"/*
cp -r "$KB_REPO/tags"/* "$KG_REPO/content/tags"/

# Sync types (from tools/types only)
rm -rf "$KG_REPO/content/types"/*
cp -r "$KB_REPO/tools/types"/* "$KG_REPO/content/types"/

4. Verify Sync

# Compare file counts for each content type
echo "=== Artifacts ==="
echo "Source:" && find "$KB_REPO/artifacts" -name "*.md" | wc -l
echo "Target:" && find "$KG_REPO/content/artifacts" -name "*.md" | wc -l

echo "=== Notes ==="
echo "Source:" && find "$KB_REPO/notes" -name "*.md" | wc -l
echo "Target:" && find "$KG_REPO/content/notes" -name "*.md" | wc -l

echo "=== Links ==="
echo "Source:" && find "$KB_REPO/links" -name "*.md" | wc -l
echo "Target:" && find "$KG_REPO/content/links" -name "*.md" | wc -l

echo "=== Tags ==="
echo "Source:" && find "$KB_REPO/tags" -name "*.md" | wc -l
echo "Target:" && find "$KG_REPO/content/tags" -name "*.md" | wc -l

echo "=== Types ==="
echo "Source:" && find "$KB_REPO/tools/types" -name "*.md" | wc -l
echo "Target:" && find "$KG_REPO/content/types" -name "*.md" | wc -l

5. Test Build

cd "$KG_REPO"
npx quartz build

Quick Sync Commands

For teammates who have both repos in the same parent directory:

# From parent directory containing both repos
# Sync all content types
rm -rf knowledge-garden/content/artifacts/* && cp -r sb-knowledge-base/artifacts/* knowledge-garden/content/artifacts/ && \
rm -rf knowledge-garden/content/notes/* && cp -r sb-knowledge-base/notes/* knowledge-garden/content/notes/ && \
rm -rf knowledge-garden/content/links/* && cp -r sb-knowledge-base/links/* knowledge-garden/content/links/ && \
rm -rf knowledge-garden/content/tags/* && cp -r sb-knowledge-base/tags/* knowledge-garden/content/tags/ && \
rm -rf knowledge-garden/content/types/* && cp -r sb-knowledge-base/tools/types/* knowledge-garden/content/types/

Or use the provided script:

# From sb-knowledge-base root
./tools/workflows/syncing-content/sync-to-garden.sh

Validation Checklist

  • [ ] sb-knowledge-base is on correct branch
  • [ ] knowledge-garden is on correct branch
  • [ ] Both repos have clean git status
  • [ ] File counts match after sync
  • [ ] npx quartz build succeeds
  • [ ] Spot-check a few pages in dev server

Troubleshooting

Build fails with type errors

The Quartz type definitions may not match the new content structure. Check content/types/release.md and quartz/types/typeRegistry.ts.

Missing files after sync

Ensure you used cp -r (recursive) and included the trailing /* to copy contents, not the folder itself.

Links broken on site

Content should be reorganized IN Obsidian first (which auto-updates links), then synced. If you moved files outside Obsidian, links won't be updated.

Notes

  • Source of truth: sb-knowledge-base (the Obsidian vault)
  • Never edit content directly in knowledge-garden—it will be overwritten on next sync
  • Always reorganize content in Obsidian to preserve internal links