A complete zero-cost CMS connecting Obsidian β GitHub β Vercel. Write in Markdown, deploy automatically.
Click the green "Use this template" button above, then select "Create a new repository".
- Enter your repository name (e.g.,
my-blog) - Choose public or private
- Click "Create repository"
git clone https://github.com/YOUR_USERNAME/YOUR_REPO_NAME.git
cd YOUR_REPO_NAME# Install dependencies
npm install
# Run interactive setup (optional)
python setup.py
# Start development server
npm run dev- Go to vercel.com/new
- Import your GitHub repository
- Deploy (auto-configured)
Done! Your site is now live with automatic deployments on every push.
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
β Obsidian β β GitHub β β Vercel β β Website β
β Write Note β βββΆ β Git Push β βββΆ β Auto Build β βββΆ β Live! β
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
β Obsidian β β Dev Server β β localhost β
β Save Note β βββΆ β Auto Build β βββΆ β :3000 β
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
Local workflow (no Git push needed):
- Run
npm run devto start development server - Edit note in Obsidian β Save
- Refresh browser β Changes reflected instantly
Production workflow:
- Write a note in
content/folder using Obsidian - Save the file (Ctrl+S / Cmd+S)
- Push to GitHub (auto or manual via Obsidian Git)
- Deploy happens automatically on Vercel
- Live - your site is updated!
-
Create a new
.mdfile in the appropriatecontent/subfolder:content/development/- R&D articlescontent/products/- Product reviewscontent/ingredients/- Ingredient sciencecontent/trends/- Industry trendscontent/tips/- How-to guidescontent/videos/- YouTube notes
-
Add YAML frontmatter at the top:
--- title: "Your Article Title" slug: your-url-slug journalist: dr-emily-chen category: development tags: - tag1 - tag2 date: 2025-01-20 excerpt: "Brief summary of your article" status: published featured: false reading_time: 5 min ---
-
Write your content in Markdown below the frontmatter
-
Save β Push β Done!
Simply paste an image into your note (Ctrl+V / Cmd+V). The Paste Image Rename plugin will:
- Auto-rename:
{notename}_{YYYYMMDD}_{N}.jpg - Auto-save to:
content/_assets/images/
Example: Pasting into 2025-01-20-skincare-guide.md creates:
content/_assets/images/2025-01-20-skincare-guide_20250120_1.jpg
Article cards (homepage, category pages) display images in this order:
- First image in note body (Obsidian or Markdown format)
featured_imagefrom YAML frontmatter (fallback)- Category placeholder (final fallback)
For video notes with video_url in YAML, the video embed is displayed instead of an image.
Git has file size limits. Keep images optimized:
| Guideline | Recommendation |
|---|---|
| Max file size | Under 5MB per image |
| Recommended | Under 500KB per image |
| Format | WebP preferred (smallest), JPG acceptable |
| Resolution | 1920px max width for articles |
| Total repo size | Keep under 1GB for best performance |
Tips:
- Use the Image Converter plugin to auto-convert to WebP
- Compress images before pasting (use TinyPNG, Squoosh, etc.)
- GitHub blocks files over 100MB
- Large repos = slow clones for new users
The included Image Converter plugin auto-converts pasted images:
- Format: WebP (80% smaller than PNG)
- Quality: 85% (good balance)
- Max width: 1920px
Use this template to create blogs, journals, documentation sites, or any content-driven website:
- Write content in Obsidian (offline, Markdown)
- Push to GitHub with one click
- Auto-deploy to Vercel (free hosting, SSL, CDN)
- $0/month infrastructure cost
This project demonstrates a modern serverless CMS that costs $0/month to operate.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β WORKFLOW β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Obsidian Claude Code Vercel β
β βββββββββββ βββββββββββββ βββββββββββ β
β β Write β β Build β β Deploy β β
β β Edit β βββββββΆ β Automate β ββββββΆ β Host β β
β β Images β GitHub β Enhance β Auto β SSL β β
β βββββββββββ Sync βββββββββββββ βββββββββββ β
β β² β
β β Obsidian Plugins β
β ββ Obsidian Git (auto backup & sync) β
β ββ Paste Image Rename (auto image naming) β
β ββ Templater (article templates) β
β ββ Linter (YAML formatting) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Feature | Traditional CMS | This System |
|---|---|---|
| Hosting Cost | $10~50/month | Free (Vercel) |
| Database | MySQL/PostgreSQL | Git (free, versioned) |
| Backup | Manual setup | Automatic (Git history) |
| Editor | Web-based only | Obsidian (offline capable) |
| Version Control | Limited or none | Full Git history |
| Deployment | Manual/complex | Push = Auto deploy |
| AI Integration | None | Claude Code built-in |
| Admin Panel | Separate system | Obsidian IS the admin |
- Obsidian as Admin Panel: Write, edit, and manage content locally with full Markdown support
- GitHub as Database: Free storage, automatic versioning, collaboration-ready
- Vercel as Host: Automatic SSL, CDN, zero-config deployment
- Claude Code as Developer: Build features, fix bugs, generate content on demand
This project is a static site generator for a cosmetics innovation journal, featuring:
- 7 AI journalist personas with distinct writing styles
- 5 content categories: Development, Products, Ingredients, Trends, Tips
- Full admin dashboard for content management
- Obsidian integration with Claude Code skills
- SEO-optimized static HTML output
- Python 3.8+
- Node.js 18+
- Git
- Obsidian
The setup.py script will configure:
- Site name & description
- Content categories
- Obsidian plugin settings
For manual setup, see SETUP.md.
MY-BLOG_OBSI/ # Root = Obsidian Vault
βββ content/ # Markdown articles
β βββ development/ # AI cosmetics R&D
β βββ products/ # Product reviews
β βββ ingredients/ # Ingredient science
β βββ trends/ # Industry trends
β βββ tips/ # Beauty tips
β βββ videos/ # YouTube embeds + notes
β βββ _assets/images/ # Article images
βββ site/
β βββ public/ # Static assets (CSS, JS)
β βββ src/ # Build scripts & templates
β βββ build/ # Generated output (deploy this)
βββ .obsidian/ # Obsidian settings & plugins
βββ .claude/skills/ # Claude Code skills
βββ docs/ # Documentation
βββ Home.md # Obsidian homepage
βββ CLAUDE.md # Project guidelines for Claude
Templates are located in .obsidian/templates/:
template-article.md- Standard articletemplate-product-review.md- Product reviewtemplate-research.md- Scientific articletemplate-tutorial.md- How-to guide
Every article requires valid frontmatter:
---
title: "Article Title"
slug: "url-friendly-slug"
journalist: "dr-sarah-kim"
category: "ingredients"
tags: ["tag1", "tag2"]
date: "2025-01-15"
excerpt: "Brief summary"
status: "published"
featured: false
homepage_priority: 5
reading_time: "5 min"
---See docs/YAML_SCHEMA.md for complete schema.
Choose from 7 personas, each with a unique voice:
| Persona | Expertise | Style |
|---|---|---|
| Dr. Sarah Kim | Formulation science | Scientific yet accessible |
| Dr. James Park | Clinical research | Evidence-based |
| Dr. Emily Chen | Biotechnology | Tech-forward |
| Yuna Lee | Product reviews | Conversational |
| Alex Thompson | Market trends | Analytical |
| Min-ji Kang | Lifestyle | Elegant, mindful |
| Dr. David Rodriguez | Sustainability | Action-oriented |
See docs/PERSONAS.md for full details.
Located in .claude/skills/:
| Skill | Purpose |
|---|---|
journalist-writer.md |
Generate articles in persona voice |
image-generator.md |
Create article images |
article-publisher.md |
Validate and publish articles |
yaml-validator.md |
Check frontmatter validity |
seo-optimizer.md |
Optimize for search engines |
Access at http://localhost:3000/admin/ to:
- Toggle article visibility (draft/published)
- Manage featured articles
- Set homepage priority order
- Preview articles before publishing
The build script (site/src/build.js) performs:
- Scans
/content/for markdown files - Parses YAML frontmatter
- Converts Markdown β HTML via marked.js
- Generates:
- Homepage
- Article pages
- Category pages
- Journalist pages
- RSS feed
- Sitemap
This project is configured for automatic Vercel deployment:
- Push to GitHub β Vercel builds automatically
- Preview deployments for every branch
- Production deployment on
masterbranch
With Obsidian Git plugin installed:
Cmd+PβObsidian Git: Create backup- Done! Vercel deploys automatically
Or wait for auto backup (runs every 10 minutes)
- Run
npm run build - Upload
site/build/contents to your hosting - Configure domain/SSL
| Plugin | Purpose |
|---|---|
| Obsidian Git | Auto backup & sync to GitHub |
| Paste Image Rename | Auto-name images: {filename}_{date}_{n}.png |
| Templater | Article templates with dynamic fields |
| Linter | Auto-format YAML frontmatter |
| Homepage | Set a default note on vault open |
- Obsidian Git: See Git Push Management section below
- Paste Image Rename: Pattern:
{{fileName}}_{{DATE:YYYYMMDD}}_{{NNNNN}} - Images folder:
content/_assets/images/
This project uses Obsidian Git plugin for automatic backup and GitHub sync.
| Setting | Value | Description |
|---|---|---|
| Auto backup interval | 10 min | Auto commit + push every 10 minutes |
| Auto pull on startup | β ON | Pull latest changes when Obsidian opens |
| Push on backup | β ON | Auto push on backup |
| Pull before push | β ON | Pull before push to prevent conflicts |
| Auto backup after file change | β ON | Push immediately when file is saved |
By default, this template is configured for instant push on save:
- Create/edit a note β Save β Auto push to GitHub β Vercel deploys
If you prefer interval-based backup (less commits):
- Open
.obsidian/plugins/obsidian-git/data.json - Set
"autoBackupAfterFileChange": false - Restart Obsidian
With this setting, backups happen every 10 minutes instead of on every save.
| Command | Description |
|---|---|
Obsidian Git: Create backup |
Instant commit + push (most used) |
Obsidian Git: Commit all changes |
Commit changes only |
Obsidian Git: Push |
Push to remote |
Obsidian Git: Pull |
Pull from remote |
vault backup: 2026-01-16 22:07:32
- Check Git status in Obsidian's bottom status bar
- β = Synced
- Number = Changed files count
cd "your-project-folder"
git add .
git commit -m "your message"
git pushPlugin settings (data.json) are included in Git for easy sharing:
- Settings auto-apply when cloned
- Changes sync with your pushes
- CLAUDE.md - Project guidelines for Claude Code
- WORKFLOW.md - Content creation workflow
- YAML_SCHEMA.md - Frontmatter specification
- PERSONAS.md - Journalist personas
- Live Demo: https://ai-diven-cos.vercel.app
- Sample Article: https://ai-diven-cos.vercel.app/articles/niacinamide-complete-guide.html
- Repository: https://github.com/passeth/MY-BLOG_OBSI
- Quick Setup Guide: SETUP.md
MIT License - see LICENSE file for details.
Built with Obsidian + Claude Code + Vercel | Zero infrastructure cost