Skip to main content

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.com for 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.md
  • client-onboarding-checklist.md
  • google-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:

  1. Access GoHighLevel Media Storage

    • Login to GoHighLevel subaccount
    • Navigate to: Settings → Media Storage
    • Go to appropriate directory structure
  2. 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]
  3. 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
  4. Create Video Reference Document

    • Create markdown file: docs/training/seo/searchatlas-top-of-google/training-videos.md
    • List all video URLs with descriptions

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
![Alt text](https://media.symphonycore.com/internal/training/seo/audit-screenshot.png)

# With optimization
![Optimized image](https://media.symphonycore.com/cdn-cgi/image/width=800,format=auto/internal/path/to/image.png)

# 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

  1. Team member review - Check content accuracy and clarity
  2. Technical review - Verify formatting and functionality
  3. Final approval - Team lead approves for merge

Automatic Deployment

Once PR is merged to main:

  1. Cloudflare Pages automatically builds site
  2. Changes deploy to team.symphonycore.com
  3. 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.