Achieving a vault that is published directly from Obsidian was a bit of a technical goal. Definitely a journey and a step up from pushing HTML

1. Install Node via nvm

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
source ~/.bashrc
nvm install 22
node -v
npm -v

2. Scaffold Quartz into the repo

cd ~/flying-fish
npx quartz create

3. Install dependencies

npm install

4. Preview locally

npx quartz build --serve

Visit localhost:8080

5. Add wrangler.toml for Cloudflare deploy (repo root)

cat > wrangler.toml << 'EOF'
name = "flying-fish"
compatibility_date = "2026-01-01"
[assets]
directory = "public"
EOF

6. Cloudflare Pages build settings (Settings > Build configuration)

Build command:   npx quartz build
Deploy command:  npx wrangler deploy
Root directory:  /

7. Commit and push

git add .
git commit -m "message"
git push

Cloudflare auto-deploys on push

8. Obsidian vault setup

Opened content/ folder as an Obsidian vault via “Open folder as vault” (not “Create new vault” — folder already had index.md in it)

Ongoing workflow from here

  1. Write/edit notes in Obsidian (vault = ~/flying-fish/content)
  2. Preview: npx quartz build —serve
  3. Publish:
git add .
git commit -m "..."
git push