Runbook — Deploy the Project as a Private Team Wiki (Quartz + git)

Goal: publish this computer-vision project as a browsable HTML wiki for the team, deployed through git, access-controlled to your team only. Decisions locked: Quartz (Obsidian-native), private/team-only hosting, whole project included.

Why Quartz: it’s purpose-built to turn an Obsidian vault into a website — it preserves our [[wikilinks]], auto-generates backlinks, a graph view, and full-text search with zero rewriting. All the cross-linking we built becomes the wiki’s navigation.

Skill level: comfortable with a terminal + git. ~1–2 hours first time. No coding.


Architecture (how the pieces fit)

 your vault (PRIVATE, never deployed)
   Projects/computer-vision/  ──[ sync-to-wiki.sh ]──►  pharyvac-cv-wiki/   ──[ git push ]──►  Cloudflare Pages
        (the source notes)                               (a separate Quartz repo)              + Access (team-only gate)

Key idea: a separate repo for the wiki. We do not put the whole private vault in git — only this one project’s notes get copied into the Quartz repo. That keeps the rest of your vault off the internet and lets you share exactly this project.


0. Prerequisites

  • Node.js 20+ and git installed. Check: node -v, git -v.
  • A GitHub (or GitLab) account for the repo.
  • A Cloudflare account (free) for private hosting (§6). Alternatively GitHub Pages, but that’s public on free plans — see §6 note.

1. Scaffold Quartz

cd ~
git clone https://github.com/jackyzha0/quartz.git pharyvac-cv-wiki
cd pharyvac-cv-wiki
npm install
npx quartz create        # choose "Empty Quartz" when prompted

This gives you a Quartz repo at ~/pharyvac-cv-wiki with a content/ folder (where your notes go) and quartz.config.ts (settings).


2. Get your content in (the sync script)

Use sync-to-wiki.sh (in this project’s scripts/). Open it, confirm the two paths at the top (SRC = this project, WIKI = ~/pharyvac-cv-wiki), then:

bash "/Users/jaymarc/Dropbox/Pharyvac Vault/Projects/computer-vision/scripts/sync-to-wiki.sh"

It copies the project into content/, maps README.mdindex.md (the wiki home), and skips noise (.DS_Store, the empty CSV detections/, self-test output). Re-run it any time you update the project, then commit.


3. Configure Quartz

Edit quartz.config.ts — the few fields that matter:

configuration: {
  pageTitle: "Pharyvac CV — Intraoperative Detection & Validation",
  baseUrl: "cv-wiki.pharyvac.com",   // or your Cloudflare *.pages.dev URL
  // theme/colors optional
},

Leave the default plugins on — they give you backlinks, graph, search, and [[wikilink]] resolution out of the box.

Make onboarding obvious: the home page (README) already links Start-here and Glossary at the top — those are the plain-language entry points for non-CV team members. Optionally pin them in the Quartz explorer/nav order so they sit at the top of the sidebar.


4. Build & preview locally

cd ~/pharyvac-cv-wiki
npx quartz build --serve
# open http://localhost:8080

Click through: the README is the home page, the specs/ research/ notes/ folders appear in nav, wikilinks resolve, backlinks and the graph populate. Fix anything odd before deploying (see Caveats).


5. Put it in git

cd ~/pharyvac-cv-wiki
git add .
git commit -m "Pharyvac CV wiki — initial"
git remote add origin git@github.com:<you>/pharyvac-cv-wiki.git   # make this repo PRIVATE
git push -u origin main

Make the GitHub repo private. The repo holds your grant strategy + prelim data — it should not be public even though only the built site is what the team views.


6. Deploy — PRIVATE / team-only

Recommended: Cloudflare Pages + Cloudflare Access (free, and gives real team-only gating).

  1. Cloudflare dashboard → Workers & Pages → Create → Pages → Connect to Git → pick pharyvac-cv-wiki.
  2. Build settings: Build command npx quartz build, Output dir public.
  3. Deploy. You get a *.pages.dev URL (and can map a custom domain).
  4. Lock it down: Cloudflare Zero Trust → Access → Applications → Add → self-hosted → your Pages URL → policy = allow only emails / your team’s domain. Now only logged-in team members can open it.

Every git push (after a sync-to-wiki.sh re-run) auto-rebuilds and redeploys.

GitHub Pages note: simpler, but on free plans Pages from a private repo is public. Only use it if you switch to the curated subset scope. For whole-project + private, Cloudflare Pages + Access (above) is the clean free path. (Netlify/Vercel password protection also work but gate fewer free seats.)


6b. Tailored to your stack (iloretamdnycsinus.com)

What we found: your main site is hand-written static HTML served by Netlify at iloretamdnycsinus.com, with Cloudflare in front. The Dropbox Website/ folder is a synced copy (no .git) — the real deploy source is your GitHub site repo, so any live-site edit happens there, not in the Dropbox folder.

Cleanest path (recommended): host the wiki on Cloudflare Pages, gate with Cloudflare Access, share the URL. This keeps the wiki entirely separate from the patient-facing medical site (you likely do not want a visible “research login” link on a public practice site) and consolidates on Cloudflare, which you already run.

  • Step 0 — build the wiki repo (your terminal; §§1–5 above). Quartz wiki content synced in, pushed to a new private GitHub repo pharyvac-cv-wiki. (This is the one step that needs your terminal — it can’t be done from a dashboard.)
  • Step 1 — Cloudflare Pages. Cloudflare → Workers & Pages → Create → Pages → Connect to Git → pick pharyvac-cv-wiki. Build command npx quartz build, output dir public. Deploy → you get pharyvac-cv-wiki.pages.dev.
  • Step 2 — (optional) custom subdomain. On the Pages project add research.iloretamdnycsinus.com. Because Cloudflare manages your DNS, it creates the record automatically.
  • Step 3 — gate it (Cloudflare Access). Zero Trust → Access → Applications → Add → Self-hosted → hostname = the .pages.dev URL (or research. subdomain) → policy = Allow → emails/email-domain of your team (or a one-time-passcode list). Save. Now only logged-in team members can open it. Free up to 50 users.
  • Step 4 — share. Send the team the URL. They log in via the Access screen. Done.

Optional — a discreet link from the main site. If you do want a link, add it to the GitHub site repo (not the Dropbox copy) — e.g. a small footer item. A snippet matching your existing nav style:

<!-- footer: internal research team -->
<a href="https://research.iloretamdnycsinus.com"
   style="color: inherit; text-decoration: none; border-bottom: 1px solid var(--rule);">Research team</a>

Place it in a footer rather than the public #research section, since that section is patient-facing SEO content. (The Access gate means the public never gets past the login anyway.)

Netlify alternative: if you’d rather keep everything on Netlify, create a second Netlify site from pharyvac-cv-wiki (build npx quartz build, publish public), point research.iloretamdnycsinus.com at it via a Cloudflare CNAME, and put the same Cloudflare Access app in front. Cloudflare Pages is slightly cleaner because hosting + gating are then one vendor.


7. Update flow (day to day)

# after editing notes in Obsidian:
bash ".../computer-vision/scripts/sync-to-wiki.sh"
cd ~/pharyvac-cv-wiki && git add . && git commit -m "update" && git push
# Cloudflare rebuilds automatically

Consider a scheduled task to run the sync+push nightly if the team wants it always-fresh.


Caveats & fixes (read before first deploy)

IssueWhat happensFix
Links outside this project — e.g. [[Projects/Pharyvac Surgical Technologies]], [[Intelligence/market/FESS Market Research MOC]], [[cv-in-surgery-literature-review]]Show as unresolved (the target isn’t in the wiki)Either (a) accept them as dead links, (b) copy those specific notes into content/ too, or (c) edit them to plain text before sync. Listed below.
Links to non-page assets[[cvat-labels.json]], [[evaluate_detections.py]], [[sync-to-wiki.sh]]Quartz renders markdown pages, not code/JSON, so these won’t be clickable pagesKeep them as repo files (team reads them in GitHub), or link to the GitHub file URL instead of a wikilink
The grant PDF (ARS DWK Innovation Grant 2026.pdf)Quartz can serve it as a static downloadFine as-is; it’ll be a download link
(C) / frontmatterQuartz reads YAML frontmatter (status/tags/type) and can show tagsNo action; optionally enable the tags/explorer features
Private dataThe built site is gated by Access, but the repo also holds itKeep the repo private (§5); don’t invite outside collaborators

External links currently in this project (decide per the table above before deploy):

  • [[Projects/Pharyvac Surgical Technologies]] (and its sub-notes) — from README + MOC
  • [[Intelligence/market/FESS Market Research MOC]] — from MOC
  • [[cv-in-surgery-literature-review]] — from MOC

Maintenance

  • Quartz updates: git pull upstream periodically (the runbook clone tracks the Quartz repo) — or just re-clone occasionally; your content lives in content/.
  • Backups: the source of truth is the vault, not the wiki repo — the wiki is a derived artifact you can always rebuild from sync-to-wiki.sh.