No preview, no approval, no schedule, no send — always
Release requirement: every approve, schedule, and immediate-action control must stay disabled until MyPersonas renders the platform-specific preview from a short-lived server snapshot. Your confirmation records a separate AAL2 acknowledgement for that exact revision, destination, action, and time; only the unchanged receipt can be consumed once. Any later change invalidates the receipt and requires a new preview.
Exact destination
Platform, account, Page, channel, site, or campaign.
Platform layout
Full submitted media in the relevant aspect ratio frame, safe-area guidance, text limits, thumbnail, and link treatment.
Visibility and safety
Audience, privacy, accessibility text, AI/affiliate disclosures, and interaction settings.
Exact timing
Date, clock time, named time zone, and what the provider will do at that time.
Final rendering can vary by device, placement, provider UI, and active theme. For Wix and WordPress, MyPersonas shows its platform-shaped preview and then requires the provider's own draft preview before any later public schedule.
Discord
Exact channel only
Implemented route: Discord's official webhook.incoming OAuth consent binds one exact server/channel webhook. It does not automate a user account or install a bot token.
Not ready now: production has zero Discord credential and connection rows. The app credentials, exact channel consent, and one designated-channel send/readback proof are still required.
Owner setup
- Create an application in the Discord Developer Portal.
- Add callback
https://nwsqyuucwzihruszocge.supabase.co/functions/v1/discord-oauth. - Save
DISCORD_CLIENT_ID and DISCORD_CLIENT_SECRET through the credential handoff above. - In MyPersonas, choose Connect Discord channel and select the exact server/channel on Discord's
webhook.incoming consent screen.
Safe proof: send one separately previewed message to a designated test channel, reconcile the returned provider result, and disconnect cleanly. Do not paste a webhook URL, bot token, user token, or Discord password.
Required preview: exact server and channel, complete message and attachment, mention policy, disclosure, and the immediate send action. Mentions remain disabled by default.
Official Discord OAuth2 documentation
YouTube
Private test first
Supported route: upload video through YouTube Data API v3 with the narrow youtube.upload permission. A private upload is the safe first proof.
Not ready now: the OAuth and Private-first uploader are deployed, but production credentials are not installed and there are zero YouTube connections. Owner authorization, exact channel binding, and a Private provider proof are still required.
Owner setup
- Open Google Cloud credentials, choose a dedicated project, and enable YouTube Data API v3.
- Configure OAuth, create a Web client, and add callback
https://nwsqyuucwzihruszocge.supabase.co/functions/v1/youtube-oauth. - Save
YOUTUBE_CLIENT_ID and YOUTUBE_CLIENT_SECRET through the credential handoff above. - Authorize the intended channel with
youtube.upload, then confirm its channel name and ID before saving the target.
Safe proof: upload one clearly labeled test video as Private, read its returned video ID and status, then leave it private or delete it only after approval. Unverified API projects can be restricted to private uploads.
Required preview: 16:9 or Shorts crop, thumbnail, title, description opening, audience setting, privacy, synthetic-media disclosure, destination channel, and schedule with time zone.
Official YouTube upload requirements
TikTok
Consent required
Implemented route: TikTok Upload-to-inbox uses the narrow video.upload scope; the owner finishes caption, privacy, disclosure, and interaction choices in TikTok. Direct Post is disabled.
Not ready now: the Upload-to-inbox connector is deployed, but production credentials are not installed and there are zero TikTok connections. Owner OAuth, exact creator binding, verified media source, and an inbox proof are still required.
Owner setup
- Open TikTok for Developers — My Apps and add Content Posting API.
- Add callback
https://nwsqyuucwzihruszocge.supabase.co/functions/v1/tiktok-oauth and request only video.upload. - Save
TIKTOK_CLIENT_KEY, TIKTOK_CLIENT_SECRET, TIKTOK_OAUTH_REDIRECT_URI, and TIKTOK_OAUTH_APP_ORIGIN through the credential handoff above. Keep Direct Post disabled. - At handoff time, review the exact creator and media; then finish privacy and interaction settings inside TikTok.
Safe proof: upload one designated video to the TikTok inbox and poll its provider status. Finish or discard it in TikTok. This does not enable Direct Post or unattended public scheduling.
Required preview: full vertical asset in its aspect frame and safe zones, cover frame, caption handoff, account, disclosure, and the exact Upload-to-inbox action. TikTok's own final screen controls privacy and comments/duet/stitch choices.
Official Content Posting setup · Upload-to-inbox reference
Twitch
Limited actions only
Implemented route: exact channel information, stream schedule segments, and announcements through channel:manage:broadcast, channel:manage:schedule, and moderator:manage:announcements.
Not supported: Twitch does not provide a general social-feed or uploaded-video publisher. “Connect Twitch” cannot honestly promise ordinary scheduled posts.
Owner setup
- Register an app in the Twitch Developer Console with callback
https://nwsqyuucwzihruszocge.supabase.co/functions/v1/twitch-oauth. - Save
TWITCH_CLIENT_ID, TWITCH_CLIENT_SECRET, TWITCH_OAUTH_REDIRECT_URI, and TWITCH_OAUTH_APP_ORIGIN through the credential handoff above. - Select the exact Twitch channel and only the feature set you want: channel information, schedule, or announcements.
- Grant only the matching scopes; nonrecurring schedule operations can depend on Affiliate/Partner eligibility.
Safe proof: first verify channel identity with a read. Any schedule or announcement write can be visible, so it needs a separate exact preview and approval; use a reversible schedule item or a designated test channel where available.
Required preview: the real action shape—not a fake feed card. Show the schedule segment, channel change, or chat announcement exactly as applicable, with target channel and timing.
Official Twitch API · Scopes · Schedule API
Patreon
Native post scheduler
Implemented API route: read the authorized identity, list campaigns, bind one exact campaign, and report its existing posts through identity, campaigns, and campaigns.posts. The separate handoff opens Patreon's native editor after an exact preview. Membership details, webhooks, Patreon Live capabilities for an eligible early-access integration, and provider-side post creation are not implemented in this release.
Not supported: the public API does not offer a general create-post permission. Ordinary Patreon posts must be completed and scheduled in Patreon.
Owner setup
- Register a client in the Patreon developer portal for the deployed read-only report.
- Add callback
https://nwsqyuucwzihruszocge.supabase.co/functions/v1/patreon-oauth. - Save
PATREON_CLIENT_ID, PATREON_CLIENT_SECRET, PATREON_OAUTH_REDIRECT_URI, and PATREON_OAUTH_APP_ORIGIN through the credential handoff above. - Bind the exact campaign and grant only
identity, campaigns, and campaigns.posts. - For content, use MyPersonas to prepare the package, then open Patreon's native scheduled-post flow.
Safe proof: verify reporting access read-only. For a post, create a Patreon draft, preview its audience/tier and date in Patreon, then return to MyPersonas and record the native draft or post URL.
Required preview: title, body, media, attachment, campaign, access tier/audience, charge setting when applicable, disclosures, and Patreon's own draft preview before scheduling.
Official Patreon API documentation
Wix
Exact site required
Implemented route: an installed Wix app can create a Wix Blog draft for the exact selected site and author. This build does not accept account API keys.
Not ready now: a Wix account seen in another signed-in tool is not permission for the deployed MyPersonas app. Current ledger records are not bound to an exact Wix site and author.
Owner setup
- Choose one site and confirm Wix Blog is installed on it.
- Create an app in Wix Custom Apps, request only Manage Blog and Read Members, release a version, and create a Share Install Link if the app is unlisted.
- Set the external post-install callback to
https://nwsqyuucwzihruszocge.supabase.co/functions/v1/wix-oauth. Save WIX_APP_ID, the Share Install Link GUID as WIX_SHARE_URL_ID, that callback as WIX_POST_INSTALL_URI, and https://mypersonas.online as WIX_OAUTH_APP_ORIGIN through the credential handoff above. - Put the app secret only in Supabase Vault under
wix_app_secret; the deployed connector will not read it from Edge Function settings. - In Studio → Accounts → Wix → Connection, choose Connect Wix site. Wix returns the exact site ID; MyPersonas then requires a separate exact author/member ID selection.
Safe proof: create one uniquely titled Wix Blog draft with publishing explicitly off, read it back from the exact site, and open its Wix preview. Do not publish during connector verification.
Required preview: active-theme draft preview on desktop and mobile, title, cover, excerpt, author, categories/tags, URL slug, SEO fields, disclosures, and exact site.
Official create-blog-post recipe · Draft Posts API · External install flow
WordPress
Choose the hosting route
Implemented route: WordPress.com uses production authorization-code OAuth with the posts scope; a self-hosted WordPress site can use its REST API with a separate, revocable Application Password. Both routes create Draft only.
Not ready now: “Website” inventory is not WordPress authorization. No exact WordPress.com or self-hosted site is bound to a live MyPersonas publisher.
Owner setup
- Identify each site as WordPress.com or self-hosted and save its exact public HTTPS address in the WordPress account record.
- For WordPress.com, register MyPersonas at WordPress.com Applications with callback
https://nwsqyuucwzihruszocge.supabase.co/functions/v1/wordpress-oauth. - Save
WORDPRESS_COM_CLIENT_ID, that callback as WORDPRESS_COM_REDIRECT_URI, and https://mypersonas.online as WORDPRESS_OAUTH_APP_ORIGIN through the credential handoff above. Put the client secret only in Supabase Vault under wordpress_com_client_secret; the deployed connector will not read it from Edge Function settings. - For self-hosted WordPress, create a dedicated Application Password in that site's user profile. Enter it only in Studio → Accounts → WordPress → Connection; the browser does not store it.
- After connection, Queue shows a second exact platform preview before the owner-triggered Create provider draft action. Reconciliation must be used instead of retrying an uncertain create result.
Safe proof: create one uniquely titled Draft, read it back from the exact site and exact author, and open WordPress Preview. Do not use Private, Publish, or Schedule as the connector test.
Required preview: active-theme Preview on desktop and mobile, title, featured image, excerpt, author, categories/tags, slug, SEO/disclosures, visibility, and exact site.
WordPress.com OAuth · WordPress.com REST API · Self-hosted Application Passwords