Skip to main content

Social Media Release (Outstand)

New to Social Media?

Read first Social Media — Introduction (Checklist for Editorial). This page is the complete reference.

Fanpage Karma is replaced by cockpitOS Release + Outstand Publish**.

WhatSocial Cockpit (own module): Channels, Post Editor, Releases (/dashboard/social/approvals), Engage, Reporting; Publish via Outstand.
WhySocial separated from website workflow — clear release, metrics, and channels in one place.
WhoEditorial, Center Manager, Org-Marketing, Center-Admin (Release); Operations/IT (Outstand Keys, Webhook, Cron).
WhereSidebar Social Cockpit; Channels also in Center Detail Social Media (?tab=social).
How to Test1) Center → Social Media: Connect channel (Facebook/Instagram/Threads) or assign an existing profile. 2) Create post → For approval. 3) Approve under Releases or test Release Link. 4) Reporting → Refresh after publish.
OperationsOUTSTAND_API_KEY, optional OUTSTAND_ORG_ID (first connect with no existing profiles), OUTSTAND_WEBHOOK_SECRET, CRON_SECRET — see Env section below and Changelog Social/Outstand.

Roles

Release: Center Manager, Org-Marketing, Center-Admin, Super-Admin (verified via API).

Center Manager

  • Landing: /dashboard/center-manager — KPIs, Release short list, Quick Release (Feed with ≤1 media)
  • Social Hub: Sidebar Social Cockpit — everything bundled (see below)

Social Cockpit (Module social-cockpit)

Everything in one place under Social Cockpit in the sidebar (own module, like Mall Cockpit):

MenuPathFunction
Overview/dashboard/socialHub with tiles to all areas
Link ChannelsCenter → Social Media tab (?tab=social)Connect Facebook, Instagram, Threads or assign an existing profile
Create Post/dashboard/social/newCreate a post
Releases/dashboard/social/approvalsSocial releases (4 status columns)
Engage/dashboard/social/engageLikes & comments per cockpit post (Outstand Analytics + Replies), write responses
Reporting & Analytics/dashboard/social/reportingMetrics & Followers

Engage: For each published post, Likes, Comment, and Share counters are loaded via Outstand Analytics; Comment texts via Replies API (threaded with parent_comment_id). Hide/delete comments on Instagram and Threads go through Outstand; like and Facebook hide still use the inbox (Zernio). Outstand uses the published channels from the post details (important for Facebook pages without @username — page name/nickname). Only posts published via Cockpit/Outstand are included. Metrics for fresh posts may be slightly delayed — click Refresh.

Outstand Data Flow: Publish → Outstand (/v1/posts/ + Media-Confirm) → Outstand sync writes account & post metrics into the DB → Reporting, Engage and Dashboard Home read from it (follower increase, monthly reach, interactions, top post).

Reporting & Platform Notes

  • Reporting: /dashboard/social/reporting — Core KPIs at the top:
    • Followers & Growth (Total of all linked channels, delta between the first and last snapshot in the sync period)
    • Reach (Total reach of all posts in the current calendar month; fallback impressions if reach is missing)
    • Top Post of the Month (strongest post in the calendar month by reach → impressions → interactions)
    • Interactions (own card): Likes, Comments and Shares as monthly sum across all synchronized posts; in post list per entry, the same values in detail
  • Dashboard Home: Shows alongside reach also the monthly interactions (Likes · Comments · Shares) with a link to reporting
  • Outstand sync loads fresh metrics from Outstand into the DB — without sync, KPIs remain empty or outdated (manually in reporting or daily via cron /api/cron/outstand-sync)
  • Bluesky: Outstand currently delivers limited metrics and comments
  • Detail Release: Always check story/carousel/reel in the workflow

Workflow

Social posts have a dedicated release view under /dashboard/social/approvals (no longer mixed in with the website workflow list).

Four areas:

  • For Approvalin_review, waiting on Center/Marketing
  • Revision — rejected, with reason; button Resubmit for Approval
  • Drafts — not submitted yet
  • Live & Scheduled — published or scheduled

Per card: Preview image, Editor, Release Link, Release / Reject (for authorized roles).

Scheduled & published — editing:

StatusEditorRescheduleCancel scheduleDelete
For approval / Draft / RejectedYesYesYes (draft)
Scheduled or approved with a timeYes — text, image, channels, timeYesYes if already in Outstand → back to draftYes
Live (published)Yes — save text/media, sync to OutstandNoNoNo (on channel only)

The editor shows: Scheduled — changes apply at the publish time.

Who can edit: anyone with Social access to the center (same as drafts). Direct publish stays limited to approval roles.

Scheduled posts are saved in the cockpit and synced to Outstand when an Outstand ID exists. Without that ID, the change stays local. Live posts: caption, media and channel overrides can be corrected; the footer shows Save only (no re-publish). Cancel schedule aborts the Outstand slot and returns the post to draft (re-approval required).

Website releases remain under /dashboard/workflow.

In the Content Planner (/dashboard/content/planner), social posts appear on the scheduled date (scheduledAt) or publication date — filter chip Social. KPI row and Content mix (news, events, offers, social …) at the top. Clicking a date tile opens Create post with that day (default 09:00) and the planner’s selected center. Existing items still open edit/detail. For social editorial, the dedicated Social Calendar (/dashboard/social/calendar) adds month/two-week/week/day/list views with thumbnails, time, channel and status — filters for phase, My posts and My approvals. The same date-tile click plans a new post there. Same KPI row (total, for approval, scheduled, live) and Post mix (feed, carousel, story, reel). Both calendars use dashboard tooltips on hover (not browser title).

  • Create New: Sidebar Social Cockpit → Create Post or /dashboard/social/new
  • Edit: In Social Releases button Editor or /dashboard/social/[draftId]
  • Editor (/dashboard/social/new): two-column layout (full page width) — center comes from the header bar (same selection as planner and approvals)
    • Applies to: shows the header center; Change center opens the same switcher (⌘K). The choice stays when you change pages until you change it yourself.
    • More centers for this post only: optional extras that do not overwrite the header bar
    • Super Admin without a concrete center: hint to pick one in the header
    • Channels relate only to the centers of this post; missing Outstand profiles are mentioned per center with a link to the Social Media tab
    • Publish (for release roles directly to Outstand), For Approval, Draft
  • AI Caption: Enter keywords and/or attach a photo or video (upload, media library, or file from the post) → Button Caption. With a photo the text follows what is visible; without media it stays keyword-only. Videos are not analyzed frame by frame — only a preview image if available. Text is oriented to the centers selected in the editor; without a center it stays general (system prompt socialCaptionGenerator)
  • AI Image: FAL AI (FAL_API_KEY) — Button Image (FAL); optionally your own image idea
  • Media: Media library + upload; mini-preview inline
  • Timing & Format (expandable): Post type, planned publication
  • From Dispatch: Email → Draft → Tab Social Media

After approval: Outstand POST /v1/posts/ — media as containers[].media with { url, filename }. Optionally First Comment in the editor (posted after going live). Channel Status (Facebook/Instagram …) appears as badges after publish.

Outstand Webhook (optional, in Outstand under Settings → Webhooks): POST /api/webhooks/outstand — Events post.published, post.error, account.token_expired. Env OUTSTAND_WEBHOOK_SECRET for signature verification. Metric Sync: manually in reporting or Cron POST /api/cron/outstand-sync (CRON_SECRET, recommended daily).

Note: Caption changes in workflow save the existing media in the draft (no accidental removal when PATCH without containers).

For Center Managers / Marketing, who do not have a Cockpit account:

  1. Social Cockpit → Releases (/dashboard/social/approvals) → Post in review → Button Release Link (beside editor)
  2. Link is generated and copied to the clipboard — Format: /release/social/[token]
  3. Recipient opens the branded preview page (center logo, colors) and can approve or reject
  4. Link is valid for 30 days; upon expiration, generate a new link in Releases
  5. Feedback to the editorial team: The creator (createdBy) receives an email (resend) and a notification in the bell (header) — with rejection reason or approval note and link to the post. Also visible in the Social Editor and under Releases → Live & Scheduled.

Note: Customer contact is not a release link — there, the AI only generates an email text suggestion for tenants/customers.

Technically:

  • POST /api/social/drafts/[draftId]/review-link — Generate link (session)
  • GET/POST /api/social/review/[token] — Preview / Approval / Rejection (public, token-based)
  • GET/PUT /api/notifications — Cockpit bell (persistent notifications per user)

Notifications (Bell)

The bell in the top bar shows unread workflow notifications (e.g., social release via external link). Full list: Notifications (/dashboard/notifications). Technically: Table dashboard_notifications — Migration 20260521180000_add_dashboard_notifications_SAFE.sql.

Timeline

Under Social Releases (expand card) and in the Social Editor (sidebar) the timeline for each post appears: creation, release link, submission, approval/rejection, publication. Technically: Table social_post_draft_events — Migration 20260521190000_add_social_draft_events_SAFE.sql, API GET /api/social/drafts/[draftId]/events.

In the Dashboard (for editorial team):

  1. Recommended: Open Shopping Center → choose Center → tab Social Media
    (/dashboard/content/centers/[centerId]?tab=social) — Connect channel or assign an existing profile. No ticket to IT.
  2. Alternatively: Sidebar Social Cockpit → Link Channels opens the same tab when a center is selected.

Assign profiles (Facebook, Instagram, …) per center. When creating social drafts, linked profiles are pre-selected.

Technically: Table center_social_accounts, APIs:

  • GET/PUT/DELETE /api/social/center-accounts
  • GET /api/social/outstand-accounts — connected accounts
  • GET /api/social/outstand-accounts/connect — start login (centerId, network)
  • GET /api/social/outstand-accounts/callback — after Meta login, maps the profile to the center

Without mapping, no accounts will be pre-selected when creating.

Env

  • OUTSTAND_API_KEY — organization-wide (Render Dashboard Service)
  • OUTSTAND_ORG_ID — optional; only needed when no social profile exists yet and Connect builds the public login URL
  • OUTSTAND_WEBHOOK_SECRET — optional, HMAC for /api/webhooks/outstand
  • CRON_SECRET — for /api/cron/outstand-sync (daily metric sync; GitHub Action Outstand Metrics Sync, 5:00 UTC)
  • FAL_API_KEY — Image generation in the Social Editor (FAL / flux-quick)
  • OpenAI (or configured provider) — Caption AI via existing AI settings

Migration

Additive tables: 20260521160000_add_social_outstand_SAFE.sql

Nutzungsstatistik: Seitenaufrufe werden anonymisiert erfasst. Im Umami-Dashboard nach diesem Pfad filtern: /en/dashboard/social-media-freigabe