Wiki Hosting — Implemented
Status: LIVE — llc-wiki.pages.dev (Quartz 4 + Cloudflare Pages)
Auto-deploys on push to VHCosta/llc-wiki. PWA-enabled with {c} B&W favicon.
The plan below is preserved for reference. The chosen option (Quartz + Cloudflare Pages) was implemented on 2026-04-11.
Goal: serve the wiki as a website accessible from anywhere, with enough privacy that internal strategy docs (pricing, product decisions, open questions) are not indexed publicly.
Project-specific constraints
Before evaluating options, what this wiki actually is:
- Obsidian-compatible Markdown — uses
[[wikilinks]], frontmatter, flat tag set - ~45 pages across
modules/,concepts/,sources/,meta/ - Maintained by Claude Code — new pages and updates pushed to GitHub via git
- Internal use — product strategy, pricing, open questions, build decisions; not meant for public indexing
- No interactive features needed — read-only reference, fast search, good navigation
Options
Option 1 — GitHub Pages (native)
GitHub’s built-in static site host. Enable in repo settings, point at the
wiki/ folder, optionally add a Jekyll theme.
Pros: Zero config, already on GitHub, free
Cons:
[[wikilinks]]are not natively supported — they render as plain text, not links- Public by default; private Pages requires GitHub Pro/Enterprise (~$4/mo per user)
- Jekyll themes are dated; no backlink graph or fast client-side search
- Maintenance: every page would need standard markdown links to work properly
Verdict: Only viable if the wiki is refactored to use standard links. Not worth it when better options exist.
Option 2 — Quartz + Vercel ← Recommended
Quartz is a static site generator built specifically for
Obsidian-style vaults. It understands [[wikilinks]], renders backlink graphs,
and generates fast, searchable sites. Vercel hosts the output for free.
How it works:
- Add Quartz to the wiki repo (it ships as an npm package / git submodule)
- Add a
quartz.config.tspointing at thewiki/content folder - Push to GitHub — a GitHub Action (provided by Quartz) builds and deploys to Vercel on every push
- The site is live at
<project>.vercel.appor a custom domain
Pros:
- Native
[[wikilink]]support — zero refactoring of existing pages - Backlink graph (the “digital garden” view), tag pages, full-text search
- Vercel free tier is generous; no cost for a wiki this size
- Custom domain support (e.g.
wiki.csystemslab.comor just a private Vercel URL) - Password protection via Vercel’s Deployment Protection (free on Pro plan, ~$20/mo) or via a simple middleware function
- Automatic deploy on
git push— Claude Code’s workflow already writes and pushes, so the site stays live with no extra steps
Cons:
- Initial setup is ~30–60 minutes (Quartz install, config, Vercel project link)
- Vercel free tier does not include password protection — needs Vercel Pro or a workaround (see Privacy section below)
- The backlink graph requires
[[wikilinks]]to be consistent — orphan pages with no inbound links won’t appear in it
Verdict: Best fit. Designed for exactly this use case.
Option 3 — MkDocs Material + GitHub Actions
MkDocs with the Material theme is the industry standard for technical documentation. A GitHub Action builds and deploys on push.
Pros:
- Excellent code block rendering, built-in search, LaTeX math support
- GitHub Actions deployment is free
- Clean, professional look familiar to developers
Cons:
[[wikilinks]]are not supported — would require a plugin (mkdocs-autorefspartially covers this) or refactoring all links to standard Markdown- No backlink graph
- Nav structure must be maintained manually in
mkdocs.yml; the wiki’s current structure is self-organizing via wikilinks
Verdict: Better for a docs site with a fixed structure. Worse for an evolving knowledge base with cross-links.
Option 4 — Obsidian Publish
Obsidian’s official hosted publishing service. $10/month. Point-and-click.
Pros: Zero config; exactly matches Obsidian’s feature set
Cons: $10/month for a single vault is expensive for internal tooling; the wiki is maintained by Claude Code, not via the Obsidian app, so the tight Obsidian integration is not a benefit
Verdict: Overpriced for this use case.
Option 5 — Cloudflare Pages (alternative to Vercel)
Same idea as Quartz + Vercel, but hosted on Cloudflare Pages instead. The project already uses Cloudflare Pages for the web app.
Pros: Consistent with existing infrastructure; Cloudflare Access provides free SSO-based access control (can gate by email address with zero-trust rules)
Cons: Quartz’s first-party GitHub Action targets Vercel; would need a custom build step for Cloudflare Pages
Verdict: Worth considering if using Cloudflare Access for access control is important — that’s a strong privacy option. Slightly more setup than Vercel.
Comparison
| Option | Wikilinks | Privacy | Effort | Cost |
|---|---|---|---|---|
| GitHub Pages | ✗ (broken) | Public / paid | Low | Free / $4mo |
| Quartz + Vercel | ✓ native | Workaround / Vercel Pro | Medium | Free / $20mo |
| MkDocs + GH Actions | ✗ (plugin needed) | Public by default | Medium | Free |
| Obsidian Publish | ✓ native | Custom domain | Very low | $10mo |
| Quartz + Cloudflare | ✓ native | Cloudflare Access (free SSO) | Medium+ | Free |
Recommendation: Quartz + Vercel (or Cloudflare Pages)
Quartz is the only option that handles the wiki’s existing [[wikilinks]]
structure without refactoring. The automatic Vercel deploy fits the existing
Claude Code workflow — push to GitHub, site updates.
If privacy is the priority: Use Quartz + Cloudflare Pages + Cloudflare Access. Access allows you to gate the site by your Google/GitHub login — no password to manage, no paid plan required, and it’s the same Cloudflare account already used for the web app.
If simplicity is the priority: Quartz + Vercel free tier with an obscure
Vercel URL (not linked from anywhere public, not submitted to search engines).
Add a robots.txt that disallows crawlers. This is “security by obscurity” —
adequate for personal internal docs that aren’t sensitive secrets.
Implementation plan (Quartz + Cloudflare Pages)
Step 1 — Scaffold Quartz in the wiki repo
cd /home/llc-course/wiki
npx quartz create # installs Quartz, creates quartz.config.tsPoint Quartz at the wiki/ content folder in quartz.config.ts:
configuration: {
pageTitle: "C Systems Lab Wiki",
contentFolder: "wiki", // relative to repo root
}Step 2 — Verify locally
npx quartz build --serve # opens localhost:8080Check that [[wikilinks]] resolve, frontmatter renders, and search works.
Step 3 — Deploy to Cloudflare Pages
- In Cloudflare Dashboard → Pages → Create application → Connect to Git
- Select
VHCosta/llc-wiki - Build command:
npx quartz build - Build output directory:
public - Deploy
After first deploy, Cloudflare assigns a *.pages.dev URL.
Step 4 — Add Cloudflare Access (optional but recommended)
- In Cloudflare Zero Trust → Access → Applications → Add
- Select the
*.pages.devURL (or custom domain) - Add a policy: allow your email address (or a GitHub OAuth login)
- Anyone who hits the URL without being authenticated gets a login prompt
This is free on Cloudflare’s personal plan.
Step 5 — Custom domain (optional)
Point wiki.csystemslab.com (or similar) at the Cloudflare Pages deployment.
DNS is already managed by Cloudflare, so this is a one-click addition.
Maintenance workflow after setup
No changes to the Claude Code workflow:
- Claude writes and edits wiki pages
- Changes committed and pushed to
VHCosta/llc-wiki - Cloudflare Pages detects the push, rebuilds, and redeploys automatically (~30–60 seconds)
- Wiki is live at the configured URL
Open questions
- Custom domain?
wiki.csystemslab.comvs. a plain*.pages.devURL. The custom domain requires the domain to be on Cloudflare DNS (it already is for the web app, so this should be straightforward). - Public vs. gated? If the wiki ever becomes a public resource (e.g., “how this course was built” as a blog-style publication), removing the Cloudflare Access gate is trivial. Build the gate first; remove it later if the decision changes.
- Search indexing? Even without a gate, adding
robots.txtwithDisallow: /prevents Google from indexing the site. This is the minimum viable privacy measure for the “security by obscurity” path.