🌐 Live Site: mvpavan.github.io
A personal knowledge base built with Quartz 4 and Obsidian, automatically deployed to GitHub Pages.
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Obsidian │ ──▶ │ GitHub Actions │ ──▶ │ GitHub Pages │
│ (Write Notes) │ │ (Build & Deploy)│ │ (Host Website) │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│
┌─────────┴─────────┐
│ │
┌─────▼─────┐ ┌──────▼──────┐
│ Preprocess│ │ Quartz Build│
│ Script │ │ (SSG) │
└───────────┘ └─────────────┘
mvpavan.github.io/
├── content/ # 📝 Your notes (Obsidian vault)
│ ├── index.md # Homepage
│ ├── AI/ # Topic folders
│ │ ├── EfficientML/
│ │ │ ├── attachments/ # Images for this section
│ │ │ └── *.md # Notes
│ │ └── ...
│ └── Programming/
│ └── ...
├── quartz/ # Quartz framework (don't edit)
├── quartz.config.ts # ⚙️ Site configuration
├── quartz.layout.ts # 🎨 Layout configuration
├── scripts/
│ └── preprocess_obsidian.py # Obsidian → Quartz transformer
├── .github/workflows/
│ └── deploy.yml # 🚀 CI/CD pipeline
└── package.json # Node.js dependencies
# Option A: Use this repo as template
git clone https://github.com/MVPavan/mvpavan.github.io.git my-notes
cd my-notes
# Option B: Start fresh with Quartz
npx quartz createnpm installEdit quartz.config.ts:
const config: QuartzConfig = {
configuration: {
pageTitle: "Your Site Title",
baseUrl: "yourusername.github.io",
// ... other settings
},
}Place your markdown files in the content/ directory:
content/
├── index.md # Required: Your homepage
└── Your-Topic/
├── Note.md
└── attachments/ # Images for this section
└── image.pngnpx quartz build --serve
# Open http://localhost:8080- Files & Links → Set attachment folder to
attachments(relative to note) - Files & Links → Enable "Automatically update internal links"
- Open the
content/folder as your Obsidian vault
| Feature | Syntax | Example |
|---|---|---|
| WikiLinks | [[Note]] |
[[Quantization]] |
| Aliases | [[Note|Display]] |
[[Quantization|Quant]] |
| Images | ![[image.png]] |
![[diagram.png]] |
| Headings | [[#Section]] |
[[#Overview]] |
| Tags | #tag |
#ai #ml |
| Callouts | > [!note] |
> [!warning] Be careful |
| LaTeX | $...$ or $$...$$ |
$E = mc^2$ |
The scripts/preprocess_obsidian.py script transforms Obsidian-specific syntax for Quartz compatibility.
| Transformation | Before | After |
|---|---|---|
| File renaming | My Note.md |
My-Note.md |
| Image links |  |
![[img.png]] |
| WikiLinks | [[My Note]] |
[[My-Note]] |
| Nested headings | [[#A#B]] |
[[#B]] |
| Tabs → Spaces | \t- item |
- item |
| Broken assets | Searches & moves | Fixed links |
python scripts/preprocess_obsidian.py contentEvery push to main triggers the workflow:
- Checkout → Fetches full git history
- Preprocess → Runs
preprocess_obsidian.py - Build → Runs
npx quartz build - Deploy → Uploads to GitHub Pages
- Go to Settings → Pages
- Set Source to GitHub Actions
- Push to
mainand the site will deploy
# Build static site
npx quartz build
# Output is in public/configuration: {
pageTitle: "Site Title", // Browser tab title
baseUrl: "username.github.io", // Your domain
ignorePatterns: ["private", ...], // Folders to exclude
theme: { ... }, // Colors, fonts
},
plugins: {
transformers: [...], // Markdown processing
filters: [...], // Content filtering
emitters: [...], // Output generation
}Edit quartz.config.ts → theme.colors:
colors: {
lightMode: {
light: "#faf8f8", // Background
secondary: "#284b63", // Links
// ...
},
darkMode: { ... }
}Edit quartz.layout.ts to customize:
- Header components
- Sidebar content
- Footer
mkdir -p content/NewTopic/attachments
echo "---\ntitle: New Topic\n---\n\n# New Topic" > content/NewTopic/index.mdAdd to ignorePatterns in quartz.config.ts:
ignorePatterns: ["private", "drafts", "YourFolder"],python scripts/preprocess_obsidian.py content
# Will automatically move assets to correct locationsMIT License - See LICENSE
