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-teamShows 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-teamSyncs 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-teamSyncs 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)
| Pattern | Why |
|---|---|
.obsidian/ | Vault config — internal to your Obsidian setup |
Assets/ | Local attachments not needed on the web |
*.xlsx, *.docx | Binary files Quartz can’t render |
.~lock* | LibreOffice lock files |
.DS_Store | macOS 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”
- Edit Pricing Strategy — April 2026 in Obsidian as usual
- Open Terminal
- Run
publish-team - Done — live in ~60 seconds
”I added a new document”
- Create the new
.mdfile inFocura/Business/(or a subfolder) - Add a link to it from Focura — Master Business Guide or the relevant section page
- Run
preview-teamto verify links work - Run
publish-team
”I reorganized folders”
- Move/rename files in Obsidian (Obsidian updates wiki-links automatically)
- Run
preview-team— check that navigation and links work - Run
publish-team
”I want to see what’s changed before I publish”
- Run
diff-team - Review the file list
- If it looks right:
publish-team - If something shouldn’t go out: either move it to
private/, adddraft: true, or add an exclusion
Architecture
Components
| Component | Location | Purpose |
|---|---|---|
| Vault source | Focura/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.ts | Site title, theme, plugins, base URL |
| GitHub repo | github.com/Teastwood43/focura-team-site (private) | Stores the Quartz project + content. Triggers Cloudflare builds on push. |
| Cloudflare Pages | focura-team.pages.dev | Hosts the built site. Auto-deploys on GitHub push. |
| Shell aliases | ~/.zshrc | sync-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:
| Setting | Current Value | What It Controls |
|---|---|---|
pageTitle | ”Focura — Team” | Browser tab and site header |
baseUrl | ”focura-team.pages.dev” | Canonical URL (update if you map team.focura.ca) |
enableSPA | true | Single-page app navigation (fast page transitions) |
enablePopovers | true | Hover previews on wiki-links |
ignorePatterns | private, templates, .obsidian, Assets, *.xlsx, *.docx | Files Quartz skips during build |
defaultDateType | ”modified” | Shows last-modified date on pages |
Custom Domain (Optional)
To map team.focura.ca → focura-team.pages.dev:
- Cloudflare Pages → your project → Custom Domains → Add
team.focura.ca - Cloudflare DNS → Add CNAME:
team→focura-team.pages.dev - Update Quartz config: Change
baseUrlto"team.focura.ca"inquartz.config.ts publish-teamto push the config change
Access Control (Password Protection)
The site is currently public. To restrict access:
Cloudflare Access (recommended):
- Cloudflare dashboard → Zero Trust → Access → Applications
- Add application → Self-hosted → URL:
focura-team.pages.dev - Add a policy: allow specific email addresses (Tim, Jeff, Sharlyn, Jill)
- 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
| Problem | Fix |
|---|---|
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 site | Run preview-team and check the terminal output — Quartz logs broken links during build. Fix the wiki-links in Obsidian. |
| Site doesn’t update after push | Check Cloudflare Pages dashboard → Deployments. The build may have failed. Common cause: a malformed YAML front matter block. |
command not found: sync-team | Run source ~/.zshrc to reload the aliases, or open a new Terminal window. |
| Build fails on Cloudflare | Check 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. Theprivate/exclusion anddraft: truefront 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.