Team Site — Publishing Process

The Focura team hub at focura-team.pages.dev is a read-only website generated from the Focura/Business/ folder in this vault. The site is built with Quartz v4 and hosted on Cloudflare Pages — every git push triggers an automatic rebuild and deploy.


How It Works

Obsidian vault                    Quartz project                  Live site
Focura/Business/  ──rsync──▶  ~/Projects/focura-team-site/  ──git push──▶  focura-team.pages.dev
     (edit here)                  content/                         (auto-builds on push)

You edit in Obsidian. You publish from Terminal. The site updates automatically.

Every file in Focura/Business/ becomes a page on the team site, with the same folder structure, wiki-links, and formatting. The site is read-only — the team reads, you and Jeff edit in the vault.


Day-to-Day: The Three Commands

Open Terminal (or use the Obsidian terminal plugin) and run one of these:

1. See what changed (before publishing)

diff-team

Shows which files in the vault have been modified since the last publish. Run this first to confirm what’s going out.

2. Preview locally (before publishing)

preview-team

Syncs vault content and starts a local Quartz server at http://localhost:8080. Browse the site locally to verify formatting, links, and layout. Press Ctrl+C to stop.

Use this when: You’ve made structural changes (new folders, renamed files, changed index.md) and want to verify the site looks right before pushing live.

3. Publish

publish-team

Syncs content from the vault, shows a summary of changed files, commits to GitHub, and pushes. Cloudflare Pages detects the push and auto-builds — the live site updates in ~60 seconds.

The commit message is auto-generated from the changed file names so you can see what went out.

Use this when: You’re ready for the team to see the latest version.


What Gets Published (and What Doesn’t)

Published

Everything in Focura/Business/ except the items below.

Excluded (never published)

PatternWhy
.obsidian/Vault config — internal to your Obsidian setup
Assets/Local attachments not needed on the web
*.xlsx, *.docxBinary files Quartz can’t render
.~lock*LibreOffice lock files
.DS_StoremacOS filesystem metadata
private/Any folder named “private” is excluded
templates/Quartz/Obsidian templates

Adding New Exclusions

If you add a file or folder to Focura/Business/ that should NOT appear on the team site:

Option A — Name it private/: Any folder named private is already excluded by the sync and by the Quartz config.

Option B — Add to the exclude list: Edit ~/.zshrc and add another --exclude="pattern" line to the sync-team alias. Then run source ~/.zshrc.

Option C — Use Quartz front matter: Add draft: true to the YAML front matter of any file you want excluded:

---
draft: true
---

Quartz’s RemoveDrafts() plugin will skip it during build, even if it’s synced to the content directory.


Workflow Examples

”I updated the pricing strategy”

  1. Edit Pricing Strategy — April 2026 in Obsidian as usual
  2. Open Terminal
  3. Run publish-team
  4. Done — live in ~60 seconds

”I added a new document”

  1. Create the new .md file in Focura/Business/ (or a subfolder)
  2. Add a link to it from Focura — Master Business Guide or the relevant section page
  3. Run preview-team to verify links work
  4. Run publish-team

”I reorganized folders”

  1. Move/rename files in Obsidian (Obsidian updates wiki-links automatically)
  2. Run preview-team — check that navigation and links work
  3. Run publish-team

”I want to see what’s changed before I publish”

  1. Run diff-team
  2. Review the file list
  3. If it looks right: publish-team
  4. If something shouldn’t go out: either move it to private/, add draft: true, or add an exclusion

Architecture

Components

ComponentLocationPurpose
Vault sourceFocura/Business/The single source of truth. Edit here.
Quartz project~/Projects/focura-team-site/Static site generator. Converts markdown to HTML.
Quartz config~/Projects/focura-team-site/quartz.config.tsSite title, theme, plugins, base URL
GitHub repogithub.com/Teastwood43/focura-team-site (private)Stores the Quartz project + content. Triggers Cloudflare builds on push.
Cloudflare Pagesfocura-team.pages.devHosts the built site. Auto-deploys on GitHub push.
Shell aliases~/.zshrcsync-team, diff-team, preview-team, publish-team

Data Flow

 ┌──────────────────┐      rsync       ┌───────────────────┐
 │  Obsidian Vault   │ ──────────────▶ │  Quartz content/   │
 │  Focura/Business/ │                 │  (local project)   │
 └──────────────────┘                  └────────┬──────────┘
                                                │ git push
                                                ▼
                                       ┌───────────────────┐
                                       │  GitHub (private)  │
                                       │  Teastwood43/      │
                                       │  focura-team-site  │
                                       └────────┬──────────┘
                                                │ webhook
                                                ▼
                                       ┌───────────────────┐
                                       │  Cloudflare Pages  │
                                       │  Quartz build      │
                                       │  → static HTML     │
                                       └────────┬──────────┘
                                                │
                                                ▼
                                       ┌───────────────────┐
                                       │  focura-team       │
                                       │  .pages.dev        │
                                       │  (live site)       │
                                       └───────────────────┘

Quartz Configuration

The site config is at ~/Projects/focura-team-site/quartz.config.ts. Key settings:

SettingCurrent ValueWhat It Controls
pageTitle”Focura — Team”Browser tab and site header
baseUrl”focura-team.pages.dev”Canonical URL (update if you map team.focura.ca)
enableSPAtrueSingle-page app navigation (fast page transitions)
enablePopoverstrueHover previews on wiki-links
ignorePatternsprivate, templates, .obsidian, Assets, *.xlsx, *.docxFiles Quartz skips during build
defaultDateType”modified”Shows last-modified date on pages

Custom Domain (Optional)

To map team.focura.cafocura-team.pages.dev:

  1. Cloudflare Pages → your project → Custom Domains → Add team.focura.ca
  2. Cloudflare DNS → Add CNAME: teamfocura-team.pages.dev
  3. Update Quartz config: Change baseUrl to "team.focura.ca" in quartz.config.ts
  4. publish-team to push the config change

Access Control (Password Protection)

The site is currently public. To restrict access:

Cloudflare Access (recommended):

  1. Cloudflare dashboard → Zero Trust → Access → Applications
  2. Add application → Self-hosted → URL: focura-team.pages.dev
  3. Add a policy: allow specific email addresses (Tim, Jeff, Sharlyn, Jill)
  4. Team members authenticate with a one-time email code — no passwords to manage

Cost: Free for up to 50 users on Cloudflare’s free plan.


Troubleshooting

ProblemFix
publish-team says “Nothing to publish”Your vault content matches what’s already committed. If you just edited a file, save it in Obsidian first (Cmd+S) and try again.
Broken links on the siteRun preview-team and check the terminal output — Quartz logs broken links during build. Fix the wiki-links in Obsidian.
Site doesn’t update after pushCheck Cloudflare Pages dashboard → Deployments. The build may have failed. Common cause: a malformed YAML front matter block.
command not found: sync-teamRun source ~/.zshrc to reload the aliases, or open a new Terminal window.
Build fails on CloudflareCheck the build log in Cloudflare Pages dashboard. Usually a Node version issue — Cloudflare should be set to Node 22+.

Security Notes

  • The GitHub repo is private — only you can see the source
  • Cloudflare Pages serves the built HTML — no source code is exposed
  • ⚠️ GitHub PAT in git remote: The personal access token is currently embedded in the remote URL. This should be rotated and moved to the macOS Keychain or SSH. See the session log for the rotation steps.
  • Content in Focura/Business/ is business-sensitive. The private/ exclusion and draft: true front matter give you two safety valves for content that shouldn’t go live.

Process created April 2026. For the content index, see Focura — Master Business Guide. For the team hub landing page, see index.