Content Publishing Guide - End-to-End Process
🎯 Overview
This guide provides a complete walkthrough for publishing content to the Symphony Core Internal Documentation site. Whether you're adding training materials, SOPs, or updating existing content, this process ensures consistency and quality.
📋 Prerequisites
Required Access
- GitHub Repository Access:
symphony-core-org/internal-docs - Google Account: Must be
@symphonycore.comfor site access - Local Development Setup: Node.js 18+, Git, code editor
Required Knowledge
- Basic Markdown formatting
- Git workflow fundamentals
- File naming conventions
🚀 Quick Start Checklist
For experienced users, here's the fast track:
- Clone repository:
git clone https://github.com/symphony-core-org/internal-docs.git - Create branch:
git checkout -b feature/your-content-name - Add content with proper frontmatter and file naming
- Upload media:
node scripts/upload-media.js local-file.ext path/file.ext category - Test locally:
npm start - Commit, push, and create PR
- Review and merge to main
📖 Detailed Publishing Process
Step 1: Repository Setup
Initial Clone
# Clone the repository
git clone https://github.com/symphony-core-org/internal-docs.git
cd internal-docs
# Install dependencies
npm install
# Verify setup works
npm start
# Should open http://localhost:3000
Create Feature Branch
# Create and switch to feature branch
git checkout -b feature/add-new-training-content
# Or for SOP updates
git checkout -b feature/update-seo-process
# Or for quick fixes
git checkout -b fix/correct-typo-in-onboarding
Step 2: Content Creation
Choose Appropriate Directory
Based on content type, select the right location:
docs/
├── onboarding/ # New employee materials
├── sop/ # Standard operating procedures
│ ├── client-onboarding/
│ ├── seo/
│ ├── content-marketing/
│ └─ ─ paid-advertising/
├── training/ # Training courses and materials
│ ├── seo/
│ ├── google-ads/
│ └── content-marketing/
├── client-management/ # Client relationship processes
├── tools-and-resources/ # Software guides and templates
├── team-processes/ # Internal team operations
└── company-info/ # Company policies and information
File Naming Convention
Use lowercase with hyphens for all file names:
✅ Good Examples:
keyword-research-process.mdclient-onboarding-checklist.mdgoogle-ads-campaign-setup.md
❌ Avoid:
Keyword Research Process.md(spaces, capitals)client_onboarding_checklist.md(underscores)GoogleAdsCampaignSetup.md(camelCase)
Required YAML Frontmatter
Every markdown file must include frontmatter:
---
title: Your Document Title
version: 1.0
author: Your Name or Team Name
last_updated: 2025-09-29
category: Document Category
tags: [tag1, tag2, tag3, relevant-keywords]
---
For training content, add:
training_course: Course Name
sequence: 1
duration: Day 1 / Week 1 / 2 hours
For SOPs, add:
sop_type: process/checklist/guideline
department: seo/content/ads/management
review_frequency: monthly/quarterly/annually
Step 3: Content Structure
Document Template
---
title: Your Document Title
version: 1.0
author: Your Name
last_updated: 2025-09-29
category: Category
tags: [relevant, tags]
---
# Document Title
## Overview
Brief description of what this document covers and who should use it.
## Prerequisites
- Required knowledge or access
- Tools needed
- Dependencies
## Step-by-Step Process
### Step 1: First Action
Detailed instructions with:
- Clear action items
- Expected outcomes
- Troubleshooting tips
### Step 2: Second Action
Continue with logical progression
## Examples
Real-world examples or case studies
## Troubleshooting
Common issues and solutions
## Related Documents
- Link to related internal docs
- External resources if needed
---
*Last updated: [Date] | Next review: [Date]*
Step 4: Media Management
Hybrid Media Strategy
Symphony Core uses a cost-optimized hybrid approach for media hosting:
- Cloudflare R2: Images, documents, diagrams (authenticated access)
- GoHighLevel: Video files (MP4s) to minimize hosting costs
Upload Media Files
For Images, Documents, and Small Media
# Upload public media (logos, general graphics)
node scripts/upload-media.js local-file.png branding/logo.png public
# Upload internal media (screenshots, confidential diagrams)
node scripts/upload-media.js screenshot.png training/seo/audit-process.png internal
# Upload documents and templates
node scripts/upload-media.js template.pdf templates/proposal-template.pdf internal
For Video Files (Manual Process)
Videos should be uploaded to GoHighLevel Media Storage to avoid high Cloudflare storage costs.
Step-by-Step Video Upload Process:
-
Access GoHighLevel Media Storage
- Login to GoHighLevel subaccount
- Navigate to: Settings → Media Storage
- Go to appropriate directory structure
-
Upload to Organized Directory Structure
GoHighLevel Media Storage Structure:
├── team.symphonycore.com/
│ └── training/
│ └── searchatlas/
│ ├── Authority Building - Part 1.mp4
│ ├── Authority Building - Part 2.mp4
│ ├── Content Creation Holistic SEO - Part 2.mp4
│ ├── Bonus - From Clicks to Customer.mp4
│ ├── Technical SEO and Automation - P...
│ ├── UX Signals Reporting Google Ads ...
│ └── [future training videos] -
Get Public URLs
- After upload, copy the public URL for each video
- URLs format:
https://storage.googleapis.com/msgsndr/[account-id]/media/[file-id].mp4
-
Create Video Reference Document
- Create markdown file:
docs/training/seo/searchatlas-top-of-google/training-videos.md - List all video URLs with descriptions
- Create markdown file:
Example Video Reference Document:
---
title: SearchAtlas Training Videos
category: SEO Training
tags: [videos, searchatlas, training]
---
# SearchAtlas Top of Google - Training Videos
## Day 1: Content Creation & Holistic SEO
- **Part 1**: [Introduction](https://storage.googleapis.com/msgsndr/.../content-creation-part1.mp4)
- **Part 2**: [Platform Setup](https://storage.googleapis.com/msgsndr/.../content-creation-part2.mp4)
## Day 2: Authority Building
- **Part 1**: [Link Building Strategies](https://storage.googleapis.com/msgsndr/.../authority-building-part1.mp4)
- **Part 2**: [Implementation](https://storage.googleapis.com/msgsndr/.../authority-building-part2.mp4)
## Bonus Content
- **From Clicks to Customer**: [Complete Process](https://storage.googleapis.com/msgsndr/.../clicks-to-customer.mp4)
Complete Media Organization Structure
Cloudflare R2 (Authenticated): symphony-core-media
├── public/ # Non-confidential assets
│ ├── branding/ # Logos, brand assets
│ ├── icons/ # UI icons
│ └── general/ # Generic graphics
└── internal/ # Confidential content
├── training/ # Training screenshots/images
│ ├── seo/
│ ├── ads/
│ └── content/
├── sop/ # Process diagrams
├── templates/ # Document templates
└── client-examples/ # Anonymized client work
GoHighLevel Media Storage (Public URLs):
└── team.symphonycore.com/
├── training/ # Training video content
│ ├── searchatlas/ # SearchAtlas course videos
│ ├── google-ads/ # Google Ads training videos
│ └── content-marketing/ # Content marketing videos
├── client-examples/ # Client case study videos
└── onboarding/ # Employee onboarding videos
Use Media in Documentation
# Reference uploaded media

# With optimization

# For downloadable files
[Download Template](https://media.symphonycore.com/internal/templates/proposal-template.pdf)
Step 5: Local Testing
Test Content Locally
# Start development server
npm start
# Opens http://localhost:3000
# Navigate to your new content
# Verify:
# - Content displays correctly
# - Images load properly
# - Links work
# - Navigation is updated
Content Quality Checklist
- Frontmatter complete and properly formatted
- Title matches navigation and file name intent
- Links work (both internal and external)
- Images display and load quickly
- Formatting consistent with other docs
- Spelling/grammar checked
- Mobile responsive on different screen sizes
Step 6: Navigation Updates
Update Sidebar (if needed)
Edit sidebars_config.js to add new content to navigation:
{
type: 'category',
label: '📋 Standard Operating Procedures',
items: [
'sop/seo/keyword-research-process', // Add your new file
// ... other items
],
}
Create Index Pages
For new categories, create index.md files:
---
title: Category Overview
---
# Category Name
Brief description of this section.
## Available Documents
- [Document 1](document-1)
- [Document 2](document-2)
Step 7: Quality Assurance
Run Quality Checks
# Check for linting issues
npm run lint
# Fix automatic issues
npm run lint:fix
# Format code
npm run format
# Type check (if applicable)
npm run typecheck
# Run all checks
npm run validate
Content Review Checklist
- Information accuracy verified
- Screenshots current and relevant
- Links functional and point to correct resources
- Process tested by following instructions
- Sensitive information removed or anonymized
- Compliance requirements met
Step 8: Git Workflow
Commit Changes
# Add all changes
git add .
# Check what will be committed
git status
# Commit with descriptive message
git commit -m "Add SEO keyword research process documentation
- Complete step-by-step workflow for keyword research
- Include SearchAtlas platform screenshots
- Add competitive analysis template
- Update navigation to include new process"
Push and Create Pull Request
# Push feature branch
git push origin feature/add-new-training-content
# Create pull request on GitHub
# Include description of changes
# Request review from team lead
Pull Request Template
Use this template for PR descriptions:
## Description
Brief description of changes made.
## Type of Change
- [ ] New content (SOPs, training, etc.)
- [ ] Content update/revision
- [ ] Fix (typo, broken link, etc.)
- [ ] Navigation/structure change
## Content Checklist
- [ ] Frontmatter complete and accurate
- [ ] Media uploaded and working
- [ ] Local testing completed
- [ ] Quality checks passed
- [ ] Navigation updated if needed
## Review Notes
Any specific areas that need review attention.
Step 9: Review and Deployment
Review Process
- Team member review - Check content accuracy and clarity
- Technical review - Verify formatting and functionality
- Final approval - Team lead approves for merge
Automatic Deployment
Once PR is merged to main:
- Cloudflare Pages automatically builds site
- Changes deploy to team.symphonycore.com
- Team receives notification of successful deployment
🔧 Advanced Workflows
Bulk Content Migration
For migrating large amounts of content:
# Use the content processing script template
node scripts/process-content.js source-directory target-directory
# Example: Migrate training materials
node scripts/process-searchatlas-content.js
Template Creation
Create reusable templates in tools-and-resources/template-library/
Version Control
For major content updates:
- Update version number in frontmatter
- Document changes in content
- Consider creating archive copies
📞 Support and Resources
Getting Help
- Technical Issues: Create GitHub issue
- Content Questions: Ask team lead
- Process Improvements: Suggest via team channels
Useful Commands Reference
# Media management
node scripts/upload-media.js [local-file] [remote-path] [category]
# Development
npm start # Start local server
npm run build # Build for production
npm run validate # Run all quality checks
# Git workflow
git checkout -b feature/name # Create feature branch
git add . # Stage changes
git commit -m "message" # Commit changes
git push origin branch-name # Push branch
File Naming Quick Reference
- Files: lowercase-with-hyphens.md
- Directories: lowercase-with-hyphens/
- Media: descriptive-name-with-context.ext
- URLs: Automatically generated from file names
📋 Quick Reference Checklist
Before Publishing:
- Content in appropriate directory
- File naming convention followed
- Complete YAML frontmatter
- Media uploaded and referenced correctly
- Local testing completed
- Quality checks passed
- Navigation updated if needed
- Git workflow followed
- Pull request created with proper description
After Publishing:
- Verify live site deployment
- Test all links and media on live site
- Share new content with relevant team members
- Schedule content review date if applicable
This guide is maintained by the Symphony Core Systems Team. For updates or questions, create a GitHub issue or contact the team lead.