System Architecture & Sync Guide
How The Potato Society Digital Garden Works
This document explains the technical architecture behind potatosociety.uk and provides instructions for updating the website.
🔗 Symlink Architecture Overview
The system uses a symbolic link (symlink) approach to keep the Obsidian vault clean while allowing Quartz to access the content:
Obsidian Vault: C:\VAULT\proxmox-vault\20 Projects\ProjectHome
├── Index.md
├── Hacking.md
├── AI_Engineering.md
├── Satellite_Operations.md
├── System_Architecture.md
└── [all other notes]
Quartz Installation: C:\quartz-portfolio
├── quartz.config.ts
├── package.json
├── node_modules/
└── content → [SYMLINK TO VAULT]
The content folder in the Quartz installation is a directory junction (Windows symlink) pointing directly to your Obsidian vault. This means:
- ✅ Your Obsidian vault remains untouched and clean
- ✅ Quartz sees all your markdown files as if they were in its content folder
- ✅ Changes made in Obsidian immediately reflect on the website
- ✅ No duplication of files or manual copying required
⚙️ Technical Components
1. Quartz Static Site Generator
- Framework: Quartz v4 (https://quartz.jzhao.xyz)
- Hosting: Cloudflare Pages
- Domain: potatosociety.uk
- Build Command:
npx quartz build --no-serve - Output Directory:
public/
2. Configuration Files
quartz.config.ts: Custom black-and-white minimalist themepackage.json: Dependencies and build scriptstsconfig.json: TypeScript configuration
3. Sync Mechanism
- Local: PowerShell sync script (
sync.ps1) - Remote: GitHub Web UI + Cloudflare Pages auto-deploy
- Branch:
main(default)
🔄 How to Update the Website
Method A: Local Updates (Recommended for Major Changes)
- Edit files in your Obsidian vault (
C:\VAULT\proxmox-vault\20 Projects\ProjectHome) - Run the sync script:
.\sync.ps1 - The script will:
- Pull latest changes from GitHub
- Stage all modifications
- Commit with timestamp
- Push to GitHub
- Cloudflare Pages automatically detects the push and rebuilds the site
Method B: Remote Updates via GitHub Web UI
- Go to: https://github.com/[your-username]/[repo-name]
- Navigate to the file you want to edit
- Click the pencil icon to edit
- Make your changes
- Scroll down and click “Commit changes”
- Add a commit message and confirm
- Cloudflare Pages automatically detects the push and rebuilds the site
Method C: Direct Obsidian Editing
- Edit files directly in Obsidian
- The changes are immediately visible locally
- Remember to run
.\sync.ps1periodically to push changes to GitHub
📜 Sync Script (sync.ps1)
The sync script automates the Git workflow:
# Navigate to quartz directory
cd C:\quartz-portfolio
# Pull latest changes
git pull
# Stage all changes
git add .
# Commit with timestamp
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
git commit -m "Sync: $timestamp"
# Push to GitHub
git push🌐 Cloudflare Pages Configuration
Build Settings
- Framework: None (Static site)
- Build command:
npx quartz build --no-serve - Build output directory:
public - Root directory:
/quartz-portfolio
Environment Variables
None required for basic Quartz deployment.
Custom Domain
- In Cloudflare Pages, go to your project settings
- Under “Custom domains”, add
potatosociety.uk - Configure DNS:
- Create CNAME record:
@→[your-project].pages.dev - Or follow Cloudflare’s DNS setup instructions
- Create CNAME record:
- Enable “Always use HTTPS”
- Enable “Automatic HTTPS Rewrites”
- Set cache level to “Standard” or “Aggressive” as needed
🔒 Security Considerations
- Private Files: Add
privateto ignorePatterns in quartz.config.ts - Templates: Add
templatesto ignorePatterns - Obsidian Files: Add
.obsidianto ignorePatterns - Git Ignore: Ensure
.gitignoreexcludes sensitive files - Environment Secrets: Never store API keys or secrets in markdown files
📱 Mobile & Offline Access
Since this is a static site:
- Fully responsive design
- Works offline after initial load (SPA enabled)
- Fast loading times
- Low bandwidth usage
- Compatible with all modern browsers
🛠️ Troubleshooting
If the site doesn’t update:
- Check GitHub for recent commits
- Verify Cloudflare Pages build logs
- Run
npx quartz build --no-servelocally to test - Check for build errors in the console
If links are broken:
- Verify wikilinks use correct format:
[[Page Name]] - Check that target files exist in the vault
- Ensure file names match exactly (case-sensitive on some systems)
If styling looks wrong:
- Verify quartz.config.ts is correctly formatted
- Check for syntax errors in the TypeScript file
- Clear browser cache
- Try hard refresh (Ctrl+F5)
🔮 Future Enhancements
- Add search functionality
- Implement dark/light mode toggle
- Add analytics tracking
- Integrate comments/giscus
- Add RSS feed
- Implement sitemap.xml
- Add structured data (JSON-LD)
- Optimize images/assets
- Add CI/CD testing
- Implement content versioning
- Add backup/restore procedures
Last updated: $(Get-Date -Format “yyyy-MM-dd HH:mm”) Architecture documented for potatosociety.uk