Solanasis Docs Web Viewer — Setup & Usage Guide
Last Updated: 2026-03-24 Status: Setup guide — follow phases in order
Architecture Overview
┌─────────────────┐ git push ┌──────────────────┐ build ┌──────────────────┐
│ Obsidian / │ ──────────────> │ GitHub Actions │ ────────────> │ Cloudflare Pages │
│ SilverBullet │ │ (Quartz build) │ │ docs.solanasis.com│
└─────────────────┘ └──────────────────┘ └──────────────────┘
┌─────────────────┐ Cloudflare ┌──────────────────┐
│ SilverBullet │ <── Tunnel ──> │ edit.solanasis.com│
│ (Docker:3000) │ │ (Cloudflare Access)│
└─────────────────┘ └──────────────────┘
Two subdomains, two tools:
docs.solanasis.com— Beautiful read-only viewer (Quartz static site on Cloudflare Pages)edit.solanasis.com— Editor with auto-save (SilverBullet via Cloudflare Tunnel)
Both protected by Cloudflare Access (email OTP authentication).
Phase 1: Create GitHub Repo for the Site
- Go to github.com/dzinreach and create a new private repo:
solanasis-docs-site - Push the local site repo:
cd C:/_my/_solanasis/solanasis-docs-site git add -A git commit -m "Initial Quartz setup for Solanasis docs" git remote add origin https://github.com/dzinreach/solanasis-docs-site.git git push -u origin main
Phase 2: Configure GitHub Secrets
You need secrets in both repos:
In solanasis-docs-site repo (Settings > Secrets and variables > Actions):
| Secret | Value | How to get it |
|---|---|---|
DOCS_REPO_TOKEN | GitHub PAT with repo scope | github.com > Settings > Developer settings > Personal access tokens > Fine-grained tokens > create one with read access to solanasis-docs |
CLOUDFLARE_API_TOKEN | Cloudflare API token | Cloudflare dashboard > My Profile > API Tokens > Create Token > “Edit Cloudflare Workers” template (needs Pages read/write) |
CLOUDFLARE_ACCOUNT_ID | Your Cloudflare account ID | Cloudflare dashboard > any domain > right sidebar “Account ID” |
In solanasis-docs repo (Settings > Secrets and variables > Actions):
| Secret | Value | How to get it |
|---|---|---|
SITE_REPO_TOKEN | GitHub PAT with repo scope | Same token as above works, or create a separate one with write access to solanasis-docs-site |
Phase 3: Create Cloudflare Pages Project
- Go to Cloudflare dashboard > Workers & Pages > Create > Pages
- Connect to Git > select
dzinreach/solanasis-docs-site- OR skip git connection — the GitHub Action deploys via Wrangler instead
- If using Wrangler deploy (recommended):
- Just create the project:
npx wrangler pages project create solanasis-docs - Or let the first GitHub Action run create it automatically
- Just create the project:
Set Custom Domain
- Workers & Pages >
solanasis-docsproject > Custom domains - Add
docs.solanasis.com - Cloudflare auto-configures the DNS CNAME
Phase 4: Start SilverBullet
cd C:/_my/_solanasis/solanasis-scripts
# Set your password (change this!)
export SB_PASSWORD="your-secure-password-here"
# Start SilverBullet
docker compose -f docker-compose.silverbullet.yml up -d
# Verify it's running
docker compose -f docker-compose.silverbullet.yml ps
# Check logs
docker compose -f docker-compose.silverbullet.yml logs -fTest locally: Visit http://localhost:3000 — you should see your vault files.
Add to Cloudflare Tunnel
- Cloudflare Zero Trust dashboard > Networks > Tunnels
- Select your existing tunnel (or create one)
- Public Hostname > Add:
- Subdomain:
edit - Domain:
solanasis.com - Service:
http://localhost:3000
- Subdomain:
- Save
Phase 5: Configure Cloudflare Access (Auth)
For docs.solanasis.com
- Zero Trust > Access > Applications > Add Application > Self-hosted
- Application name:
Solanasis Docs (Read) - Subdomain:
docs, Domain:solanasis.com - Session duration: 7 days
- Add policy:
- Name:
Allow Solanasis Team - Action: Allow
- Include > Emails:
dmitri@solanasis.com(add contractor emails as needed)
- Name:
- Identity providers: check “One-time PIN”
For edit.solanasis.com
- Repeat the above but:
- Application name:
Solanasis Docs (Edit) - Subdomain:
edit - Consider restricting to just Dmitri’s email (more restrictive than read access)
- Application name:
Test Auth
- Open an incognito window
- Visit
docs.solanasis.com - You should see Cloudflare’s login page
- Enter your email, check for the OTP email, enter the code
- You should now see the Quartz site
Phase 6: Start the Auto-Push Watcher
# Install dependency
pip install watchdog
# Run the watcher (keeps running in foreground)
python C:/_my/_solanasis/solanasis-scripts/docs-auto-push.py
# Or with custom settings
python docs-auto-push.py --repo-path C:/_my/_solanasis/solanasis-docs --debounce 60Run as Background Service (Optional)
To keep it running after closing the terminal, create a Windows Task Scheduler task:
- Program:
python - Arguments:
C:/_my/_solanasis/solanasis-scripts/docs-auto-push.py - Trigger: At system startup
- Run whether user is logged on or not
Daily Usage
Viewing Docs
- Go to
docs.solanasis.com - Authenticate with email OTP (once per 7 days)
- Browse with sidebar explorer, search, graph view
- Everything renders beautifully — wikilinks, callouts, tables, code blocks
Editing Docs
- Go to
edit.solanasis.com - Authenticate with email OTP
- Navigate to the file you want to edit
- Edit — changes auto-save immediately to disk
- The auto-push watcher commits and pushes within 30 seconds
- Quartz rebuilds — changes appear on docs.solanasis.com within ~2-3 minutes
Quick Edit from Reader
- When viewing a doc on
docs.solanasis.com, click the link in the footer to jump toedit.solanasis.com
Excluding Files from Publishing
Entire folders (.quartzignore in quartz.config.ts)
Already excluded:
solanasis-client-files/*credential**secret*.env*.obsidian/_to_organize_categorize/
Individual files (frontmatter)
Add to any .md file’s frontmatter:
---
publish: false
---This file will be visible in SilverBullet but NOT on docs.solanasis.com.
Troubleshooting
Site not updating after edit
- Check if auto-push watcher is running: look for the Python process
- Check git status:
cd solanasis-docs && git status - Check GitHub Actions: github.com/dzinreach/solanasis-docs-site/actions
- Manual push:
cd solanasis-docs && git add -A && git commit -m "manual update" && git push
SilverBullet not accessible
- Check container:
docker compose -f docker-compose.silverbullet.yml ps - Check logs:
docker compose -f docker-compose.silverbullet.yml logs - Restart:
docker compose -f docker-compose.silverbullet.yml restart - Check Cloudflare Tunnel is running and routing
edit.solanasis.com
Cloudflare Access blocking you
- Check your email is in the Access policy
- Check the OTP email didn’t go to spam (sender:
noreply@notify.cloudflare.com) - Try incognito window to clear cached auth cookies
Quartz build failing
- Check GitHub Actions logs for errors
- Common issue: malformed frontmatter in an .md file
- Test locally:
cd solanasis-docs-site && npx quartz build
Costs
| Component | Cost |
|---|---|
| Quartz | Free (MIT license) |
| SilverBullet | Free (MIT license) |
| Cloudflare Pages | Free tier (500 builds/month) |
| Cloudflare Access | Free tier (50 users) |
| Cloudflare Tunnel | Free |
| GitHub Actions | Free tier (2,000 min/month) |
| Total | $0/month |