Plugin Obsidian Garden — One-Click Publish Your Notes as a Website (Free + $19 Pro)

Disclaimer

Is this project open source? Yes
Is this project completely free? No
Is this project vibe-coded beyond the author’s ability to comprehend how it works? No
Verdant - Obsidian Plugin

Hi everyone :waving_hand:

I built a plugin called **Verdant** — it publishes your Obsidian notes as a clean, responsive static website on GitHub Pages with one click.

Why? Obsidian Publish costs $8-10/month, and Quartz/Hugo require terminal setup. I wanted something zero-config, one-time payment, fully local.


How it works

1. Generate a GitHub Personal Access Token with `repo` scope

2. Open the Note Selector from the sidebar

3. Pick the notes you want

4. Click Publish

Features

- One-click publish** — Note selector, theme picker, done

- Smart diff engine** — Only changed files are re-uploaded

- Multiple themes** — Default Light, Dark Mode, and more

- WikiLink support** — `[[Note]]` becomes clickable cross-links

- Tag pages** — Auto-generated per-tag aggregation pages

- Privacy-first** — Notes go to YOUR GitHub repo. We never see your content

- Zero backend** — No servers, no databases, no monthly bills

Free vs Pro

AI Style Agent — the flagship Pro feature. Describe what you want in natural language:

- “Make the header dark blue with white text”

- “Add more spacing between blog posts”

- “Change the font to something more elegant”

The AI reads your current styles, generates CSS overrides, and you see changes in real-time. No CSS knowledge needed.

Free is not a trial. 10 notes is enough for a small digital garden or blog. Pro is one-time, no subscription.

Install

Option A — Community Plugins (recommended)

1. Obsidian → Settings → Community Plugins → Browse → search “Verdant”

2. Install → Enable

> Date: 2026-06-24

> Scope: Verdant Free, Verdant Pro

> Core Goal: Continuously improve the product — make Free users stick around, make Pro users feel the value

> Document Type: Feature iteration roadmap, source of truth for future development

1. Current State

Verdant Free

- One-click publish to GitHub Pages

- Note selector (file tree)

- Basic themes (Light/Dark)

- WikiLink support, tag aggregation pages, navigation tree

- Incremental publishing (only pushes changed files)

- RSS feed

- 10-note limit

Verdant Pro ($19 one-time)

- All Free features

- Unlimited notes

- AI Style Agent (natural language site customization)

- Full-text search

- Custom CSS

- Custom domain (planned)

2. Free vs Pro Feature Plan

Verdant Free includes:

- One-click publish to GitHub Pages

- Note selector (file tree)

- Basic themes (Light/Dark)

- WikiLinks, tag aggregation, navigation tree

- Incremental publishing

- RSS feed

- Up to 10 notes

Verdant Pro adds ($19 one-time):

- Unlimited notes

- AI Style Agent (natural language site customization)

- Full-text search

- Custom CSS

- Custom domain

- Visitor analytics

- SEO enhancement suite

- Multi-site management

3. Phased Execution Plan

Phase 1: Data-Driven Publishing & SEO (Weeks 1-4

> Goal: Let users see results after publishing, get sites indexed by search engines.

1.1 Visitor Analytics Panel (Pro)

- [ ] Lightweight stats mechanism in the repo on publish

- [ ] In-plugin “Visitor Analytics” panel: 7/30-day page views, top 10 notes, referrer breakdown

- [ ] Data visualization

1.2 SEO Enhancement Suite (Pro)

- [ ] Auto-generate `sitemap.xml`

- [ ] Auto-generate `robots.txt`

- [ ] Note frontmatter supports `seo_title` / `seo_description` / `og_image`, injected as `` tags

- [ ] Auto-generate Open Graph cards

- [ ] Auto-generate JSON-LD structured data (Article schema)

- [ ] Auto-generate canonical URLs

1.3 Comments Enhancement

- [ ] Giscus theme follows site theme (light/dark)

- [ ] Support Utterances (GitHub Issues-based) as Giscus alternative

- [ ] Comment count displayed on note cards

1.4 Subscription

- [ ] Add subscription form component to site homepage (via Buttondown/Substack embed)

Phase 1 done when**: Users can see visitor data, SEO performance, and reader comments.

Phase 2: Creation Experience Deepening (Weeks 5-10)

> Goal: Expand AI from CSS assistant to full creative partner, richer themes.

2.1 AI Capability Expansion (Pro)

- [ ] AI Content Assistant: note summary generation, tag recommendation, title optimization, SEO description generation, related note suggestions

- [ ] AI Publish Assistant: pre-publish checklist (link validity, image completeness), auto-generate site description

- [ ] AI Translation: one-click translate notes to multiple languages

2.2 Preview Experience Upgrade

- [ ] Real-time preview: sidebar shows published result while editing

- [ ] Mobile preview: simulate phone screen size

- [ ] Dark mode preview toggle

- [ ] Clickable links in preview

2.3 Theme System Enhancement

- [ ] Theme marketplace (community-contributed themes, one-click install in plugin)

- [ ] Theme customization panel (visual adjustment of colors/fonts/spacing/border-radius)

- [ ] Theme import/export (JSON config sharing)

2.4 Publish Flow Optimization

- [ ] Auto-publish: auto-incremental publish on note save (configurable trigger conditions)

- [ ] Scheduled publish: frontmatter supports `publish_date`, auto-publish when due

- [ ] Draft mode: notes with `draft: true` are not published

- [ ] Exclude rules: `.gardenignore` file support

- [ ] Publish history: record changes per publish (based on Git commit)

Phase 2 done when: AI deeply integrated into creation workflow, themes are rich and customizable, publishing is automated.

Phase 3: Site Growth Enablement (Weeks 11-18)

> Goal: Make users’ sites truly “alive” — become personal brand assets.

3.1 Custom Domain (Pro)

- [ ] Settings panel adds domain config (CNAME content + DNS setup guide)

- [ ] Auto-write CNAME file on publish

- [ ] Auto-enable HTTPS

- [ ] Domain status detection and error prompts

3.2 Multi-Site Management (Pro)

- [ ] One plugin manages multiple publish targets (multiple GitHub repos)

- [ ] Independent config per site (theme/domain/note collection)

- [ ] Site dashboard (overview of all sites: note count, last publish time)

3.3 Image Smart Processing (Pro)

- [ ] Auto image compression (compress to WebP on publish)

- [ ] Image lazy loading (`loading=“lazy”`)

- [ ] Responsive images (`srcset` multiple sizes)

- [ ] EXIF data stripping (privacy protection)

3.4 Performance Optimization

- [ ] HTML/CSS/JS minification on publish

- [ ] Font subsetting (only bundle used characters)

- [ ] Critical CSS inlining (above-the-fold optimization)

- [ ] Resource preloading (``)

- [ ] Lighthouse score integration (auto-detect and display after publish)

3.5 Social Sharing

- [ ] Social share buttons on note pages

- [ ] Open Graph card optimization (ensure美观 previews when shared)

Phase 3 done when: Sites have custom domains, high performance, and multi-site management.

Phase 4: Ecosystem & Community (Weeks 19-28)

> Goal: Evolve from a single tool to an ecosystem, let users stay for the community.

4.1 Theme Marketplace

- [ ] Community theme repository

- [ ] In-plugin theme browser (preview screenshots + one-click install)

- [ ] Theme version management and update notifications

4.2 Site Component Marketplace

- [ ] Shareable “site components” (enhanced code highlighting, math formulas, Mermaid diagrams, timelines, photo galleries)

- [ ] Component marketplace browsing and installation

4.3 Template Marketplace

- [ ] Site templates (complete bundles of notes + theme + config)

- [ ] Use case templates: personal blog / academic homepage / project docs / reading notes / digital garden

- [ ] One-click template import and publish

4.4 Community Showcase

- [ ] Official site gallery of “Sites built with Verdant”

- [ ] Showcase categories (digital garden / academic / portfolio / docs)

- [ ] User submission entry point

4.5 Documentation & Tutorials

- [ ] Official docs site (built with Verdant itself — dogfooding)

- [ ] Best practices guides (how to organize a digital garden, SEO tips, AI-assisted writing)

Phase 4 done when: Theme/component/template ecosystem formed, community showcase drives new users.

Phase 5: Long-Term Vision (Week 28+)

5.1 Multi-Platform Publishing

- [ ] Netlify / Vercel / Cloudflare Pages support

- [ ] Self-hosted static file export (download ZIP)

- [ ] WordPress export (XML)

5.2 Collaboration (Pro)

- [ ] Multiple people maintain one site (GitHub collaboration-based)

- [ ] Comment moderation collaboration

5.3 Deep AI Integration

- [ ] AI-generated full note outlines

- [ ] AI knowledge graph visualization (semantic relationships between notes)

- [ ] AI chatbot (RAG based on all site notes)

- [ ] AI auto internal link suggestions (suggest linking to existing notes while writing)

5.4 Mobile Enhancement

- [ ] Mobile publish flow optimization (touch-friendly)

- [ ] Mobile preview

- [ ] PWA support (site installable as app)

4. Technical Optimization Plan

4.1 Architecture Debt Cleanup

- In-memory cache lost across sessions (high priority): persist to Obsidian plugin data, support incremental publishing

- slugify defined 3 times (medium priority): extract to `shared/helpers/slug.helper.ts`

- publish-wizard uses `container.resolve()` directly (low priority): switch to constructor injection (maintain architecture purity)

- `_FLEXSEARCH_BUNDLE_` not defined (high priority): add define to esbuild.config.mjs + declare flexsearch dependency

4.2 Performance Optimization

- [ ] Publish speed: increase blob upload concurrency from 5 to 10 (configurable), batch commits for large repos

- [ ] Site loading: CSS/JS minification, font subsetting, image lazy loading (Phase 3)

- [ ] Plugin startup: lazy-load domain services (resolve on first use, not at startup)

- [ ] Preview speed: cache preview HTML, re-render only changed parts

- [ ] Search speed: persist FlexSearch index to IndexedDB (avoid rebuilding on every load)

4.3 Quality Assurance

- [ ] E2E tests covering full publish flow (Free + Pro paths)

- [ ] Add Lighthouse CI (check site performance score before each publish)

- [ ] Add a11y audit (axe-core integration)

- [ ] Cross-platform test matrix (macOS/Windows/Linux + desktop/mobile)

5. Priority Ranking

Do Now

- Visitor analytics

- SEO enhancement

Plan For

- AI expansion

- Theme enhancement

- Custom domain

Defer

- Multi-site, collaboration, ecosystem marketplaces

Recommended Execution Order

1. Weeks 1-4: Phase 1 — Visitor analytics + SEO enhancement

2. Weeks 5-10: Phase 2 — AI expansion + theme enhancement

3. Weeks 11-18: Phase 3 — Custom domain + image processing + performance optimization

4. Week 19+: Phase 4-5 — Adjust priority based on market feedback

You didn’t include your link. Please don’t ignore the template. I edited your post to include the link.

非常感谢你的帮助

1 Like

Is there a demo website?

Is it possible to click on the folder of a folder note and see the note? (I’m trying to ask if folder notes will possibly work as they do in Obsidian?)

Oh, thank you for bringing this up! I’ll update the post with a link to the demo site—it’s also my testing site.My Digital Garden

feat(publisher): Implement wiki link resolution based on link graph and adaptation to site root path

  1. Added the resolveWikiLink method in LinkGraphService, supporting wiki link resolution by file name, file path with folders, and title
  2. Refactored the replaceWikiLinks logic to use linkGraph for link resolution and automatically adapt to baseUrl
  3. Renamed escapeHtml to escapeMarkdownLinkText and optimized the escaping logic
  4. Changed the wiki link rendering format from tags to standard markdown link format
  5. Updated test cases and documentation, and revised the descriptions in README regarding the backend and license

### Phase 0: Emergency Fix (Weeks 1–2) — Stop the Bleeding & Rebuild Trust :white_check_mark: Completed

Goal: Eliminate security vulnerabilities, align documentation with implementation, and patch paywall loopholes. This is a prerequisite for all subsequent work.

0.1 Critical Security Fixes :white_check_mark:

  • [x] Rotated the Payhip product secret key; removed plaintext credentials from `wrangler.toml` and migrated to `wrangler secret put` / Supabase secrets
  • [x] Added a `/health` endpoint to the license-server + rate limiting (10 activate/verify/deactivate requests per IP per minute)
  • [ ] Tightened Supabase RLS policies: restrict service role access to specific IP ranges (requires manual configuration in the Supabase console, non-code task)
  • [x] Added pre-validation (regex) for license key / `device_id` formats to reduce invalid requests (`lib/license-key.ts`)

0.2 Documentation & Implementation Alignment (Plan A Executed) :white_check_mark:

  • **Plan A (Executed)**: Updated all documentation (AGENTS.md/README/CHANGELOG/architecture.md/roadmap) to accurately describe the “Supabase online verification + device binding” approach, and explained the migration away from the RSA offline scheme (Payhip integration requires server-side secret validation, which cannot be exposed on the client side)

**Rationale for Plan A**: Online verification delivers real-time refund status visibility, supports device binding, and enables future subscription models — making it the more sustainable long-term solution. Documentation explicitly states that “only license information is verified; no user note content is collected.”

0.3 Paywall Leak Remediation :white_check_mark:

  • [x] Added two feature gates to `FeatureGate`: `canUseAiAssistant()` and `canUseCustomCss()`
  • [x] Added a `FeatureGate.canUseAiAssistant()` check before `AiChatPanelView` opens; free users are shown an upgrade prompt
  • [x] Added a `FeatureGate.canUseCustomCss()` check before `SiteConfig.customCss` is applied (gates added at both customCss injection points in `doPublish`)
  • [x] Disabled the “Custom CSS” editor in the settings panel for free users, with an upgrade call-to-action displayed

0.4 License Experience Improvements :white_check_mark:

  • [x] Persisted `device_id` to Obsidian plugin data (auto-generated and persisted in `PluginConfigService.load()`, synced to `LicenseService` via `SettingsPanelView`)
  • [x] Added a `POST /api/deactivate` endpoint to the license-server (calls the existing `deleteLicenseBinding` function) to enable self-service license unbinding
  • [x] Added a “Deactivate License” button in the plugin settings panel
  • [x] Added local caching (24-hour TTL) for license verification; cached status is used for offline launches to avoid hitting Supabase on every startup

0.5 Unused Capability Activation :white_check_mark:

  • [x] Added an incremental publish flow to publish-wizard (`doPublish` calls `publishIncremental` instead of `publish`)
  • [x] Added a Giscus configuration section in the settings panel (repo/repoId/category/categoryId), with values passed through to `generateSite()`
  • [x] Added a “Custom CSS” editor in the settings panel (gated behind Pro access), written to `PluginSettings.customCss` and used as a fallback in `doPublish`

**Phase 0 Completion Criteria**: :white_check_mark: No known security vulnerabilities, consistent documentation and implementation, clear Free/Pro feature boundaries, smooth license user experience, and previously unused features activated.