This lesson is the mechanical map. It uses the exact surface names, statuses, and button labels, so a person can follow it on screen and an AI agent can follow it from text.
- Access. Channels & Connections is in early access. A user needs the
channels entitlement; without it, /channels and /connections render a request-access gate instead of the tool.
- Connect. On
/connections, the user picks a brand (the brand plate reads "Connections belong to [Brand]"; with no explicit choice and more than one accessible brand, a brand picker opens first). Clicking Connect on a platform card opens an OAuth window. Live platforms: Meta organic (Facebook Pages + Instagram business accounts through Facebook login), LinkedIn organic (personal profiles), X organic, TikTok organic, Google Ads paid.
- Attach per brand. A connection attaches to exactly one brand. For Meta, discovered Pages and Instagram accounts land pending and an account picker asks "Which accounts belong to [Brand]?"; only checked accounts become active connections. If the account is already connected on another accessible brand, a duplicate-confirmation dialog names that brand and asks before the OAuth window opens. The "Don't see your Page?" button re-asks Meta for more Pages (the user must choose Edit settings on Facebook's Continue-as screen).
- Stage. Creative is staged onto the board as a draft item: from Fast Social or Fast Ads via the Add to Channels button, or by converting an existing item (Boost as ad for organic to paid, Schedule as organic for paid to organic). Every item records its brand, kind (
organic or paid), platform, and status draft.
- Ready the content. Platform rules are validated before any publish: Instagram needs at least one image or video; TikTok needs video; Facebook takes one image per post; caption caps are X 280, Instagram 2,200, LinkedIn 3,000, Facebook 5,000, TikTok 2,200. A draft missing an image can use Generate image on the item (1 credit per image).
- Publish or schedule. Publish validates, flips the item to
publishing (atomically, so a duplicate click or an overlapping run cannot double-post), posts through a connection belonging to the item's own brand, and records the outcome. Schedule stores a future time (at least about 2 minutes out, at most 1 year) and sets status scheduled.
- The executor. A background run every 5 minutes claims due
scheduled items (up to 20 per run, atomically), validates, publishes, and records outcomes. Failed publishes are retried on later runs up to 3 attempts, then wait as failed for a manual Retry. Stuck publishing rows are swept back to a retryable state.
- Live. A successful publish sets status
published, stores the platform's post id and URL, and the card's View link opens the live post. The board polls every 20 seconds while a publish is imminent, so the status updates on its own.
draft → (schedule) → scheduled → (executor claims) → publishing → published or failed; failed → (Retry) → publishing. Unschedule moves scheduled back to draft. Removing an item takes it off the board only; source creative is untouched.
- One brand per connection. An account attaches to exactly one brand at connect time, with an explicit picker and a duplicate guard. The same login can be connected to several brands, as separate connections.
- Brand-true publishing. Publishing resolves connections from the item's own brand. An item can never go out through another brand's account.
- No silent double-posts. Both the manual publish and the executor claim an item atomically before posting.
- Honest connection health. A connection whose token has expired shows "Expired — reconnect" even if the platform last reported it active. Publishing through an unhealthy connection fails with a reconnect message rather than pretending.
- Honest paid lane. There is no live paid push. Google Ads runs a validation-only push ("Validated — ready for launch"); Meta Ads, LinkedIn Ads, and TikTok Ads report not-live and the ad stays validated and export-ready. Paid push is plan-gated.
Current Limits (as of this writing)
| Area | State |
|---|
| Paid ads | Validated and export-ready; no live push yet |
| LinkedIn | Personal profiles live; company pages in the works |
| TikTok | Video content only; restricted visibility while platform review completes |
| Facebook | One image per post |
| Meta Ads, TikTok Ads, Google Analytics, YouTube | Coming soon in the directory |
- Board:
/channels (scope with ?brandId=N or ?brandScope=all)
- Item detail:
/channels/[itemId]
- Connection Library:
/connections (same scope parameters)
- Performance:
/channels/performance
- Staging API:
POST /api/channels/items; per-item publish and schedule live under /api/channels/items/[id]/