SEO Command Center (SEOCC) creates marketing content; MCMS schedules, publishes, and measures it on the website and LinkedIn. Use this guide when helping with the Hub — you do not need to edit code or SSH into servers for normal work.
Staging Hub: https://mcms-staging.persuasivepitch.ai/admin/ui · Updated 2026-08-03
What is this screen?
The Hub has three tabs. Live in Publish. Open Exception processing or Administration only when you need them. Slack (SEOCC) notifies you when a post succeeds, when a post fails, and when a connection fails.
- Publish — awaiting approval, publish blog draft + AI Carousel, successful posts
- Exception processing — dashboard filter, validation failed, fallback packages, analytics, recent notifications
- Administration — connections, notification preferences, audit trail
Quick start (first 2 minutes)
- Open the Hub — you land on Publish.
- Work Awaiting approval if anything is waiting.
- Use Publish blog draft / AI Carousel for the piece you are shipping.
- Confirm the post under Successful posts (Open live post).
- If something is stuck or failed, switch to Exception processing.
Publish tab
Default home. Step 1 approve, step 2 publish blog or carousel, step 3 confirm live posts. Slack notifies you when a post succeeds.
↑ ContentsException processing
Filters, validation failed, manual fallback packages, analytics, and in-Hub notification log. Slack notifies you when a post fails.
↑ ContentsAdministration
Connections, notification preferences, and audit trail. Slack notifies you if a connection fails.
↑ ContentsHeader
The Header is the top action bar (starts with the orange Refresh button on the left). Use it for Hub-wide actions and jumps.
| Control | What it does | When to use it |
|---|---|---|
| Refresh | Reloads all tables from the Hub | After waiting for a publish, or if numbers look stale |
| Run queue tick | Processes due scheduled items now | When something is scheduled but has not published yet |
| Refresh metrics | Pulls analytics snapshots | After publishes, or when checking performance |
| Connect founder LinkedIn | Starts LinkedIn login for the founder account | Only when LinkedIn shows disconnected |
| Export audit | Downloads the full audit log | Compliance / debugging with Matt |
| Settings / Audit / Filters | Jumps to those sections on the page | Changing prefs, investigating history, finding items |
| Help | Opens this guide at the Header section | Anytime you need field explanations |
Status line example:
5 items · 0 pending · 1 validation failed · 0 fallback packages
Any pending or validation failed above zero means you have work to do.
Dashboard filters
Use filters to shrink the Queue and related lists. Click Apply filters after changing fields; Clear resets everything.
| Field | Meaning | Example |
|---|---|---|
| Channel | Where content goes | website, linkedin |
| Status | Lifecycle state | published, pending_approval |
| Content type | Free text match | Blog, Founder, Carousel |
| Website kind | Blog subtype | blog, faq, white_paper |
| From / To date | Date range | Last week’s publishes |
| Search | Title, body, or ID | Paste a ci_… id |
| Campaign ID / Run ID | Campaign / run identifiers from SEOCC or Hub paste | From the intake batch |
Connections
When to use: First check on any “nothing published” day. Do not paste secrets into chat.
| Platform | Healthy looks like | If not connected |
|---|---|---|
| persuasive_pitch_blog | CONNECTED + service token note | Tell Matt — Blog API / service token |
| Legacy generator feedback | Usually unused — SEOCC does not need this webhook | Tell Matt only if you still see an old AirOps URL |
| CONNECTED + founder name | Use Connect founder LinkedIn in the Header |
Queue
| Column | Meaning |
|---|---|
| When | Scheduled publish time (UTC ends with Z) |
| Channel | website or linkedin (etc.) |
| Title | Human title + type; Open live post when published |
| Status | e.g. PUBLISHED, SCHEDULED, FAILED |
| ID | Content item id (ci_…) — use in Search / support tickets |
Pending approval
Items here need a human decision before auto-publish continues. Empty (None) is good. Approve only content you are allowed to publish.
LinkedIn carousels (and later YouTube videos) cannot auto-post. After you publish by hand,
paste the live URL if you have it, then click Complete (next to Cancel).
Status becomes completed and the row moves to Successful posts. That also
tells SEO Command Center the piece is live on the calendar.
Validation failed
SEOCC (or Hub paste) sent something the Hub refused (SEO rules, slug format, missing fields).
- Read Issues.
- Fix in SEO Command Center / the content source (slug kebab-case, add seoTitle, etc.).
- Re-send / re-intake — there is no “force publish” button.
- Escalate to Matt if Issues mention tokens, storage, or LinkedIn OAuth.
Manual fallback packages
LinkedIn (or other) content the Hub will not auto-publish — e.g. company posts until LinkedIn Community Management is approved, or carousels. Follow the package notes or Carousel brief; post manually; then on Publish → Awaiting approval click Complete so SEOCC can mark the calendar row live.
↑ ContentsPublish blog draft
Same field layout as New post in Blog admin. Approve in SEOCC is the normal path. Use Load latest SEOCC blog to review marketing copy (claim IDs and Provenance are stripped). Output type and Topics are checked from SEOCC when present. Featured image is one of Matt’s three founder portraits. See draft shows the public-post layout; the same button becomes Edit draft to return to the form. All six controls sit in one row under the heading: Post form, See draft, Load latest SEOCC blog, Publish to Blog, Clear form, Delete draft. Clear form empties the fields only; it does not change www. If the slug already exists on the Blog, Publish to Blog updates that post. Gray hint text in empty fields is not a draft; the banner above the form says when a Hub item is actually loaded. Delete draft asks why and tells SEOCC Calendar the piece was not posted; Create keeps the article so you can edit and Publish again. FAQ, video, and PDF stay empty until Blog admin.
Durable automation: SEOCC Approve →
POST /webhooks/geo/content. The old AirOps webhook path remains for
compatibility only.
AI Carousel
Workflow: Load the latest SEOCC carousel → Generate brief → paste each labeled field into AI Carousel (cover = 3 titles, content = title + 2 comments, closer = 3 titles + CTA) → download PDF → upload on LinkedIn. Gray hint text is not an approved draft.
| Field / button | Purpose |
|---|---|
| Title / topic | Carousel topic line |
| Body | Outline — prefer ## headings or 1. 2. 3. lists |
| CTA URL | Optional link on the last slide / caption |
| Load latest SEOCC carousel | Fills the form from the newest Hub item generated by SEO Command Center |
| Generate brief | Builds paste-ready text |
| Copy AI Carousel paste | Clipboard → paste into the matching AI Carousel fields |
| Copy LinkedIn caption | Clipboard → LinkedIn document post caption |
Analytics
Use channel / days filters and Load summary to refresh the metrics table. Many LinkedIn numbers stay estimated until LinkedIn analytics APIs unlock.
↑ ContentsNotification preferences
| Field | Meaning |
|---|---|
| Timezone | Quiet hours clock |
| Min severity | info / warning / error — lower severities may be hidden |
| Quiet hours | Suppress info/warning overnight; errors still show |
| Event allowlist | Empty = all; e.g. publish.* only publish events |
| Email recipients | Comma-separated emails |
| Save preferences | Persist settings |
Recent notifications
Live alert feed (publish.success, publish.verification_failed, etc.). Check Include suppressed only when debugging quiet-hours filtering.
↑ ContentsAudit trail
Log of Hub actions (who / what / when). Filter by action, actor, object, or dates. Use Export audit or Export filtered for a ticket — keep the file private; never include secrets.
↑ ContentsDaily checklist for helpers
- Open Hub → confirm Connections are CONNECTED.
- Clear Pending approval (or escalate).
- Read Validation failed Issues; fix upstream or escalate.
- Glance Queue for unexpected FAILED / verification_failed.
- If building a LinkedIn carousel: use Carousel brief.
- Stop and ask Matt before: changing LinkedIn connection, exporting secrets, deleting live posts, or production publishes.
Status words (cheat sheet)
| Status | Plain English |
|---|---|
| published | Live (or dry-run success recorded) |
| completed | Posted by hand (LinkedIn carousel, later YouTube) — not an API publish |
| scheduled | Waiting for publish time / queue |
| pending_approval | Needs human Approve |
| validation_failed | Intake rejected — fix content |
| verification_failed | Publish attempted; post-check failed |
| failed / retry_scheduled | Error path — escalate if stuck |