Content Fields Reference Card
Quick reference for all content fields in your CMS.
✅ REQUIRED FIELDS (Must Have)
| Field | Type | Max Length | Description | Example |
|---|---|---|---|---|
| title | String | ~60 chars | Main article title | "Building Your First AI Agent" |
| slug | String | - | URL-friendly version | "building-your-first-ai-agent" |
| content_type | Enum | - | Type of content | "blog" | "tutorial" | "lesson" | "tip" | "case_study" |
| access_level | Enum | - | Who can view | "public" | "registered" | "premium" | "course_specific" |
| content | JSON | - | Main content body (Tiptap JSON) | See structure below |
Conditional Required:
- track_id: Required ONLY when
access_level = "course_specific"
📝 OPTIONAL FIELDS (Recommended)
| Field | Type | Max Length | Description | Example |
|---|---|---|---|---|
| subtitle | String | ~100 chars | Tagline/subtitle | "A beginner's guide to AI automation" |
| excerpt | String | 150-200 chars | Preview description | "Learn how to build your first AI agent in just 30 minutes..." |
| category_id | UUID | - | Content category | UUID or null |
| tags | Array | - | Searchable tags | ["ai", "automation", "tutorial"] |
| difficulty_level | Enum | - | Content difficulty | "beginner" | "intermediate" | "advanced" |
| featured_image | String | - | Image URL | "https://example.com/image.jpg" |
| video_url | String | - | YouTube/Vimeo URL | "https://youtube.com/watch?v=..." |
| meta_title | String | 60 chars | SEO title | "Build AI Agents - Complete Guide 2025" |
| meta_description | String | 160 chars | SEO description | "Learn to build AI agents from scratch..." |
🔐 ACCESS LEVELS Explained
| Level | Who Can View | Use Case |
|---|---|---|
| public | Everyone (no login) | Marketing content, free resources |
| registered | Logged-in users only | Incentivize signups |
| premium | Paid subscribers | Premium content, courses |
| course_specific | Enrolled in specific course | Course lessons, materials |
📂 AVAILABLE CATEGORIES
- AI Agents - Building and deploying AI agents
- Automation - Process automation and workflows
- Tutorials - Step-by-step guides
- Case Studies - Real-world examples
- Best Practices - Industry standards
- News & Updates - Latest developments
📊 CONTENT TYPES Explained
| Type | Description | Typical Length | Structure |
|---|---|---|---|
| blog | Thought leadership, insights | 1200-1500 words | Intro → 3-4 sections → Conclusion |
| tutorial | Step-by-step how-to | 1500-2500 words | Prerequisites → Steps → Troubleshooting |
| lesson | Educational content | 1000-1500 words | Learning objectives → Content → Quiz/Exercise |
| tip | Quick actionable advice | 500-800 words | Problem → Solution → Example |
| case_study | Real-world application | 1500-2000 words | Challenge → Solution → Results |
🎯 DIFFICULTY LEVELS
| Level | Assumes | Typical Topics |
|---|---|---|
| beginner | No prior knowledge | "What is an AI Agent?", "Getting Started" |
| intermediate | Basic understanding | "Building a chatbot", "Using LangChain" |
| advanced | Expert knowledge | "Scaling in production", "Custom architectures" |
📋 TIPTAP CONTENT STRUCTURE
Your content must be in Tiptap JSON format:
Basic Structure
{
"type": "doc",
"content": [
{ "type": "heading", "attrs": { "level": 2 }, "content": [...] },
{ "type": "paragraph", "content": [...] },
{ "type": "bulletList", "content": [...] }
]
}
Available Node Types
| Node Type | Attributes | Use For |
|---|---|---|
heading | level: 1-6 | Section titles (use 2-3) |
paragraph | - | Normal text |
bulletList | - | Unordered lists |
orderedList | - | Numbered lists |
listItem | - | Individual list items |
codeBlock | language | Code examples |
blockquote | - | Quotes |
hardBreak | - | Line break |
horizontalRule | - | Divider |
Available Text Marks
| Mark | Attributes | Example |
|---|---|---|
bold | - | Bold text |
italic | - | Italic text |
code | - | inline code |
link | href, target | Link |
strike | - |
Example: Complete Content
{
"type": "doc",
"content": [
{
"type": "heading",
"attrs": { "level": 2 },
"content": [
{ "type": "text", "text": "Introduction" }
]
},
{
"type": "paragraph",
"content": [
{ "type": "text", "text": "This is " },
{
"type": "text",
"marks": [{ "type": "bold" }],
"text": "bold text"
},
{ "type": "text", "text": " and this is " },
{
"type": "text",
"marks": [{ "type": "italic" }],
"text": "italic"
},
{ "type": "text", "text": "." }
]
},
{
"type": "heading",
"attrs": { "level": 2 },
"content": [
{ "type": "text", "text": "Main Points" }
]
},
{
"type": "bulletList",
"content": [
{
"type": "listItem",
"content": [
{
"type": "paragraph",
"content": [
{ "type": "text", "text": "First point" }
]
}
]
},
{
"type": "listItem",
"content": [
{
"type": "paragraph",
"content": [
{ "type": "text", "text": "Second point" }
]
}
]
}
]
},
{
"type": "heading",
"attrs": { "level": 3 },
"content": [
{ "type": "text", "text": "Code Example" }
]
},
{
"type": "codeBlock",
"attrs": { "language": "python" },
"content": [
{
"type": "text",
"text": "def hello_world():\n print('Hello, World!')"
}
]
},
{
"type": "paragraph",
"content": [
{ "type": "text", "text": "Learn more at " },
{
"type": "text",
"marks": [
{
"type": "link",
"attrs": {
"href": "https://example.com",
"target": "_blank"
}
}
],
"text": "our website"
},
{ "type": "text", "text": "." }
]
}
]
}
🏷️ TAG RECOMMENDATIONS
Best Practices for Tags
- Use 5-7 tags per article
- Mix broad and specific tags
- Use lowercase
- Use hyphens for multi-word tags
- Be consistent across articles
Common Tags by Category
AI Agents:
ai-agentslangchainopenaichatbotsautonomous-agents
Automation:
automationworkflowrpazapiermake
Technical:
pythonjavascriptapitutorialcode
Business:
case-studyroiproductivitybusinessstrategy
Level:
beginnerintermediateadvancedgetting-started
📸 FEATURED IMAGE Guidelines
Recommended Sizes
- Minimum: 1200x630px (Open Graph standard)
- Ideal: 1920x1080px
- Aspect Ratio: 16:9 or 2:1
- Format: JPG or PNG
- File Size: < 500KB
Image Sources
- Unsplash (free, high-quality)
- Pexels (free)
- Custom screenshots
- Diagrams/infographics
Alt Text
Always describe the image for accessibility and SEO.
🎬 VIDEO URLs
Supported Platforms
- YouTube:
https://youtube.com/watch?v=VIDEO_ID - Vimeo:
https://vimeo.com/VIDEO_ID
Video Types
- Tutorial walkthroughs
- Product demos
- Case study interviews
- Supplementary content
📈 SEO OPTIMIZATION
Meta Title (60 chars max)
- Include primary keyword
- Front-load important words
- Make it compelling
- Example: "Build AI Agents: Complete Python Guide 2025"
Meta Description (160 chars max)
- Expand on title
- Include call-to-action
- Use keywords naturally
- Example: "Learn to build AI agents from scratch with Python, LangChain, and OpenAI. Step-by-step tutorial for developers. Start now!"
Keywords to Include
- Primary keyword in title
- Primary keyword in first paragraph
- Secondary keywords in H2 headings
- LSI keywords throughout content
- Keywords in meta description
✏️ CONTENT WRITING TIPS
Structure
- Hook (first 2-3 sentences)
- Problem Statement
- Solution Overview
- Detailed Content (3-5 sections)
- Summary/Key Takeaways
- Call-to-Action
Writing Style
- Active voice: "You can build" not "Can be built"
- Second person: "You will learn" not "Readers will learn"
- Short paragraphs: 2-4 sentences max
- Subheadings: Every 200-300 words
- Examples: Real-world, practical
- Transitions: Connect ideas smoothly
Readability
- Flesch Reading Ease: > 60
- Sentence length: < 20 words average
- Paragraph length: < 150 words
- Use bullet points for lists
- Use visuals to break up text
🔍 VALIDATION CHECKLIST
Before saving content, verify:
- Title is compelling and < 60 chars
- Slug is URL-friendly (lowercase, hyphens)
- Content type is selected
- Access level is appropriate
- Content body is not empty
- Content is properly formatted (Tiptap JSON)
- Excerpt is 150-200 characters
- 5-7 relevant tags added
- Category is selected
- Difficulty level matches content
- Meta title < 60 chars with keywords
- Meta description < 160 chars
- Featured image URL is valid
- All links work (if any)
- Code examples are tested (if any)
- Grammar and spelling checked
💾 FIELD SANITIZATION
The system automatically handles:
- Empty category →
null✅ - Empty track →
null✅ - Empty optional fields →
null✅ - Empty tags →
[]✅
You can safely leave optional fields empty!
🚨 COMMON ERRORS
| Error | Cause | Fix |
|---|---|---|
| "Title is required" | Empty title field | Enter a title |
| "Slug is required" | Empty slug | Enter slug or it auto-generates from title |
| "Content body is required" | Empty editor | Add content to editor |
| "Course/Track is required" | access_level = course_specific but no track | Select a course or change access level |
| "invalid UUID" | Should not happen anymore! | System auto-converts empty to null |
📚 QUICK REFERENCE
Minimum Required to Publish:
- Title ✅
- Slug ✅ (auto-generated)
- Content Type ✅
- Access Level ✅
- Content Body ✅
Recommended to Add:
- Excerpt (for better previews)
- Tags (for discoverability)
- Category (for organization)
- Meta fields (for SEO)
- Featured image (for visual appeal)
Optional but Valuable:
- Subtitle
- Video
- Difficulty level
Last Updated: 2025-11-01 Version: 1.0