Content Structure
Learn how to organize your content for VibeLog, whether using local files or external sources.
File System Content (fs@<path>)
When using local content with fs@./content, organize your files as follows:
Directory Structure
content/
├── blog/ # Blog posts (required)
│ ├── post1.md
│ ├── post2.md
│ └── post3.md
└── author.md # Author profile (required)Blog Posts
Blog posts should be placed in the blog/ directory as Markdown files.
Frontmatter
Each blog post should include frontmatter with metadata:
---
title: "Your Post Title"
date: "2024-01-15"
slug: "custom-url-slug" # optional, defaults to filename
---
# Your Post Title
Your post content here...Supported Fields
title(required) - The post titledate(required) - Publication date in YYYY-MM-DD formatslug(optional) - Custom URL slug, defaults to filename without .md
Example Post
---
title: "Getting Started with VibeLog"
date: "2024-01-15"
slug: "getting-started"
---
# Getting Started with VibeLog
Welcome to VibeLog! This is your first blog post.
## What is VibeLog?
VibeLog transforms any content source into a production-ready blog...Author Profile
Create an author.md file in the content root with your profile information:
---
name: "Your Name"
---
This is your longer bio description that supports **Markdown formatting**.
You can include multiple paragraphs, links, and other Markdown elements.Author Fields
name(required) - Your display name
The content body supports full Markdown and will be used as the bio.
HackMD Content (hackmd@<username>)
When using HackMD as your content source, VibeLog automatically fetches your public notes.
Requirements
- HackMD account with public notes
- Notes must be published with "View" mode
- Notes with publication dates are treated as blog posts
How It Works
- VibeLog fetches your HackMD profile and notes
- Only published notes (with "View" mode) are included
- Note titles become post titles
- Publication dates become post dates
- Content is automatically processed to remove duplicate H1 headers
HackMD Profile
Your HackMD profile information is automatically used:
- User accounts: Display name and biography
- Team accounts: Team name and description
Note Organization
- All published notes become blog posts
- Notes are sorted by publication date
- Private or unpublished notes are ignored
- Note permalinks are preserved when available
Notion Content (notion@<database_id>)
Transform your Notion database into a blog by using pages as blog posts.
Notion Requirements
- Notion integration with access to your database
- Database with pages that contain blog content
NOTION_TOKENenvironment variable set with your integration token
Notion Integration
- VibeLog connects to your Notion database using the integration token
- All pages in the database become blog posts
- Page titles (from title property) become post titles
- Page content is converted to Markdown using notion-to-md
- Publication dates use custom date properties or creation time
- Author info is extracted from database creator and database title
Database Setup
Your Notion database should contain pages with the following structure:
Page Properties
- Title - Any property with type "title" (becomes post title)
- Date - Any property with type "date" (optional, for custom publication date)
If no date property is found, the page creation time will be used.
Page Content
- Page content is automatically converted to Markdown using notion-to-md
- All Notion blocks (text, headings, lists, etc.) are supported
- Images and files are processed and included
- Duplicate H1 headers matching the title are automatically removed
Notion Integration Setup
- Create a new integration at https://www.notion.so/my-integrations
- Copy the integration token
- Share your database with the integration
- Set the
NOTION_TOKENenvironment variable
export NOTION_TOKEN=secret_your_notion_integration_tokenCommon Issues
If you encounter errors, VibeLog provides specific error messages to help diagnose issues:
- Database not found: Check that the database ID is correct and your integration has access
- Unauthorized: Verify your
NOTION_TOKENand integration permissions - Invalid database ID: Ensure the database ID format is correct (32-character string)
Database Organization
- All pages in the database become blog posts
- Pages are sorted by date (custom date property or creation time)
- Empty or untitled pages are handled gracefully (titled "Untitled")
- Page IDs are preserved for reference
- Author information is extracted from database creator and title