Communitygithub.com

erberkk/social-publishing

Verwenden Sie dies für die Einrichtung des geplanten Postens von Marketinginhalten der App auf Instagram (Reels, Karussells, Stories), Threads, X und TikTok über offizielle APIs – Selbsthosting von Postiz in Docker hinter einem Cloudflare-Tunnel, Erstellung der Meta-App mit dem neueren Use-Case-Flow (Business-Portfolio, mit der Instagram-Profikonto verknüpfte Facebook-Seite, Threads-Tester-Einladung), X-Developer-Pay-per-Use-Guthaben und Ausgabenobergrenze, TikTok- und YouTube-Überprüfungslimits, sichere OAuth-Kontoauswahl, wenn ein Browser persönliche und Markenkonten verwaltet, Ressourcenlimits und Phasen eines Posting-Kalenders rund um echte Launch-Ereignisse.

Was ist social-publishing?

Diese Fähigkeit automatisiert die Einrichtung einer zentralisierten, zeitgesteuerten Veröffentlichung von Marketinginhalten über die offiziellen APIs von Instagram (Reels, Karussells, Stories), Threads, X und TikTok unter Verwendung des selbst gehosteten Open-Source-Tools Postiz. Sie behandelt die gesamte Einrichtung vom Docker-Compose-Dateimanagement mit Elasticsearch-Optimierung und Ressourcenlimits über die Einrichtung des Cloudflare-Tunnels für öffentliche HTTPS-Erreichbarkeit bis hin zu den detaillierten Anwendungskonfigurationen für jede Plattform. Ein besonderer Schwerpunkt liegt auf den spezifischen Hürden jeder Plattform: der obligatorischen Business-Portfolio-Anforderung von Meta für neue Apps, der Notwendigkeit von Threads-Tester-Einladungen vor der App-Prüfung, X Developer-Pay-per-Use-Abonnements mit Ausgabenobergrenzen und TikToks Audit-Anforderungen und Sandbox-Entwicklung. Die Fähigkeit beinhaltet auch die Erstellung eines Inhaltskalenders, der an echte Launch-Ereignisse gebunden ist, anstatt an feste Daten, sowie Warnungen zu häufigen Fallstricken wie der versehentlichen Verknüpfung persönlicher Konten, dem Verpassen neuer Meta-App-Anforderungen und der Fehlinterpretation von X-API-Schlüsselbezeichnungen. Alle Entscheidungen, die eine menschliche Genehmigung erfordern (Kontoerstellung, Tunnel-Freigabe, API-Kreditkäufe), sind klar dokumentiert, um Sicherheit zu gewährleisten und versehentliche Kontoüberschreitungen zu vermeiden.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/erberkk/mobile-app-launch-skills/tree/HEAD/skills/social-publishing

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Social Publishing (Soziale Veröffentlichung)

Zweck

Veröffentlichen Sie die Launch-Inhalte zeitgesteuert von einem zentralen Ort aus über die offizielle API jeder Plattform, ohne ein persönliches Konto an die Marke oder die Marke an ein persönliches Konto zu verlieren. Das verwendete Tool ist Postiz (Open Source, selbst gehostet); die Plattformschritte gelten für jeden Scheduler.

Voraussetzungen

  • Marken-Konten bereits erstellt: Instagram Professionell-Konto, Threads-Profil (stammt von Instagram), X-Konto, optional TikTok.
  • Eine Domain bei Cloudflare (für den Tunnel-Hostnamen), Docker Desktop, ein Rechner, der zu den Posting-Zeiten eingeschaltet bleibt (oder eine kleine VPS).
  • Das console-automation-Setup, wenn Konsolen über einen Browser gesteuert werden.
  • Ein Inhaltskalender (siehe "Kalender" unten).

Plattform-Realität (vor Beginn erneut prüfen; diese ändern sich)

PlattformOffizieller WegWas blockiert
InstagramMeta-App + Facebook Login, IG Profi-Konto verknüpft mit einer Facebook-SeiteNeue Meta-Apps erhalten das "Unified Login" Instagram-Setup, das ein Business-Portfolio erfordert; das ältere Instagram-Login-only-Setup ist "für neuere Apps nicht verfügbar". Stories werden als einfache Medien veröffentlicht: Keine Umfragen, Links oder Countdown-Sticker über die API.
ThreadsMeta-App mit dem Threads Use CaseBis zur App-Prüfung können nur Konten mit der Threads-Tester-Rolle eine Verbindung herstellen; der Tester akzeptiert in Threads › Einstellungen › Konto › Website-Berechtigungen › Einladungen.
XEntwicklerkonto mit kostenpflichtigem API-Zugang (aktuelle X-API-Preise prüfen)Benötigt eine Zahlungsmethode; legen Sie eine Ausgabenobergrenze fest.
TikTokContent Posting APINicht geprüfte Apps posten nur privat, bis die Prüfung bestanden ist (die Prüfung dauert). Neue Konten benötigen Telefonverifizierung, und eine Nummer kann nur zu einem Konto gehören.
YouTubeData API UploadNicht verifizierte API-Projekte laden als privat hoch, bis eine Compliance-Prüfung bestanden ist.

Planen Sie um die Hürden herum: Starten Sie Prüfungen frühzeitig, posten Sie TikTok/YouTube nativ (TikTok Studio, YouTube Studio Scheduler), bis die Prüfungen bestanden sind, oder lassen Sie die Plattform weg.

Vorgehensweise

1. Postiz selbst hosten (Docker)

  1. Beginnen Sie mit der offiziellen postiz-docker-compose-Datei. Führen Sie vor up Folgendes aus:
    • Entfernen Sie nicht benötigte Dienste sowie solche, die bereits verwendete Ports auf dem Rechner binden (die Upstream-Datei bindet die Temporal-Benutzeroberfläche an 127.0.0.1:8080).
    • Entfernen Sie Elasticsearch: Setzen Sie Temporal ENABLE_ES=false und SKIP_ADD_CUSTOM_SEARCH_ATTRIBUTES=true (SQL-Visibility). Postiz registriert nur zwei Schlüsselwortattribute. Wenn Temporal zuerst mit ES gestartet wurde, enthält die Datenbank noch die Standard-Textattribute und Postiz schlägt fehl mit "cannot have more than 3 search attribute of type Text": Erstellen Sie das Temporal-Datenbank-Volume neu, bevor etwas geplant wird.
    • Binden Sie Postiz nur an 127.0.0.1; setzen Sie MAIN_URL, FRONTEND_URL, NEXT_PUBLIC_BACKEND_URL auf den öffentlichen HTTPS-Hostnamen.
    • Platzieren Sie Geheimnisse (JWT_SECRET, Tunnel-Token, App-Schlüssel) in einer git-ignorierten .env, referenziert als ${VAR} in der Compose-Datei.
    • Fügen Sie mem_limit/cpus pro Dienst hinzu. Postiz führt Frontend, Backend und Orchestrator in einem Container; wir haben etwa 1,5 GB Nutzung beobachtet, daher vermied ein Limit von 2 GB das Erreichen der Grenze. Unter Windows begrenzen Sie auch die WSL-VM in %USERPROFILE%\.wslconfig (memory=4GB, processors=4, autoMemoryReclaim=gradual), dann wsl --shutdown und Docker Desktop neu starten.
  2. Erstellen Sie das erste Konto im Browser nachdem die Seite hydriert wurde (ein nicht hydriertes Formular sendet als GET und legt das Passwort in die URL). Setzen Sie dann DISABLE_REGISTRATION=true und starten Sie neu.
  3. Behalten Sie restart: always bei und aktivieren Sie "Docker Desktop beim Anmelden starten"; deaktivieren Sie den Ruhezustand, wenn der Rechner der Scheduler ist.

2. Öffentlicher Hostname (Cloudflare Tunnel)

  • Erstellen Sie einen remote verwalteten Tunnel (API: POST /accounts/{id}/cfd_tunnel mit config_src: cloudflare, PUT .../configurations mit der Ingress-Regel, ein proxied CNAME zu <tunnel-id>.cfargotunnel.com, GET .../token).
  • Führen Sie cloudflared als Dienst im selben Compose-Netzwerk aus und richten Sie den Ingress auf http://postiz:5000, nicht auf localhost.
  • GENEHMIGUNG: Ein Tunnel setzt einen lokalen Dienst dem Internet aus; fragen Sie vor der Erstellung. Optional können Sie Cloudflare Access davor schalten (benötigt Zero Trust auf dem Konto; halten Sie /uploads für Metas Medienabruf erreichbar).

3. Meta (Instagram + Threads)

  1. Erstellen Sie eine separate Meta-App für die Veröffentlichung (fügen Sie keine Use Cases zu einer App hinzu, die bereits eine In-App-Funktion wie Instagram Stories Teilen unterstützt). Use Cases: "Manage messaging & content on Instagram" und "Access the Threads API".
  2. Instagram:
    • Erstellen Sie ein Business-Portfolio, wenn der Use Case danach fragt (kostenlos; Name, Besitzername, Geschäfts-E-Mail). Verifizierung wird nur für Daten anderer Personen und die App-Prüfung benötigt.
    • Erstellen Sie eine Facebook-Seite für die Marke (auch für Meta Ads erforderlich) und verknüpfen Sie das Instagram-Profi-Konto damit: Seiten-Einstellungen › Verknüpfte Konten › Instagram › Verbinden. Das OAuth-Popup meldet sich mit dem Instagram-Konto an, das der Browser hält: Lesen Sie den Namen "Anmelden als …"; wenn es ein persönliches Konto ist, wechseln Sie zuerst das Konto (das Verbinden eines persönlichen Kontos wandelt es in ein professionelles um).
    • Fügen Sie im Instagram-Use Case genau die Bereiche hinzu, die der Scheduler anfordert (Postiz: instagram_basic, pages_show_list, pages_read_engagement, business_management, instagram_content_publish, instagram_manage_comments, instagram_manage_insights). Setzen Sie den Facebook Login for Business Redirect-URI auf den Callback des Schedulers (Postiz: /integrations/social/instagram).
    • App-ID + Geheimnis (App-Einstellungen › Basis; das Anzeigen des Geheimnisses fragt nach dem Facebook-Passwort) → FACEBOOK_APP_ID/SECRET.
  3. Threads: fügen Sie threads_basic, threads_content_publish, threads_manage_replies, threads_manage_insights hinzu; setzen Sie Redirect (/integrations/social/threads) plus Deinstallations-/Lösch-Callback-URLs; verwenden Sie die separate Threads App-ID/Secret; fügen Sie das Markenprofil als Threads-Tester hinzu und akzeptieren Sie die Einladung auf dem Telefon.
  4. Wenn die Threads-Zustimmungs-URL auf der Threads-Startseite statt auf dem Zustimmungsbildschirm landet, befindet sich die Browsersitzung auf threads.com, während der Scheduler threads.net verwendet: Öffnen Sie dieselbe URL auf threads.com.
  5. Wenn der Browser derzeit als Seite agiert (nachdem sie bearbeitet wurde), zeigt die Facebook-Zustimmung zuerst "Sie müssen zu wechseln"; fahren Sie als Person fort, nicht als Seite.
  6. Während der Facebook-Zustimmung wählt Meta standardmäßig "alle aktuellen und zukünftigen Seiten/Unternehmen/Instagram-Konten". Wählen Sie auf einem Konto, das andere Marken verwaltet, "nur aktuelle" und wählen Sie die Assets der Marke aus.

4. X

  1. Developer Console Onboarding: Kontoname, eine präzise Use-Case-Beschreibung (nur eigenes Konto, kein Weiterverkauf von Daten, keine automatisierten Likes/Follows/DMs), Bedingungen akzeptieren.
  2. Kaufen Sie das kleinste Credit-Paket; lassen Sie die automatische Aufladung deaktiviert und setzen Sie eine Abrechnungszeitraum-Obergrenze. Das Dashboard-Gesamt kann hinter der Credit-Seite zurückbleiben.
  3. App › Benutzerauthentifizierungseinstellungen: Lesen und schreiben, "Web App, Automated App or Bot", Callback = Scheduler-Callback (Postiz: /integrations/social/x), Website, AGB- und Datenschutz-URLs. Nach dem Speichern wird der OAuth 2.0-Client-Secret einmal angezeigt.
  4. Postiz verwendet OAuth 1.0a: Generieren Sie den Consumer Key neu und kopieren Sie den Key + "Consumer Key Secret" (dieses genaue Label) einmal → X_API_KEY/X_API_SECRET.
  5. Autorisieren: aktivieren Sie "I trust this app", bestätigen Sie, dass der Bildschirm den Marken-Handle anzeigt, dann Autorisieren.

5. TikTok (optional)

Konto:

  • Neue Konten erfordern eine Telefonverifizierung, und eine Nummer kann nur auf einem Konto verwendet werden; eine Web-Anmeldung kann mit "in der App fortfahren" enden. Optionen: eine zweite Nummer für Markenkonten oder die Konvertierung eines bestehenden persönlichen Kontos (neuer Benutzername und Anzeigename, Profilfoto, Biografie; alte persönliche Videos archivieren/privatisieren).
  • In einigen Regionen ist die Ein-Klick-Option "Zu Business-Konto wechseln" verschwunden; das Menü bietet "Bestätigtes Business-Konto werden", was nach Firmendokumenten fragt. Ein persönliches Konto ist ausreichend: TikTok Studio-Planung, Analysen, Spark Ads und die Content Posting API funktionieren damit. Die Business-Musikbibliothek ist der Hauptverlust.
  • Der Benutzername kann einmal alle 30 Tage geändert werden, der Anzeigename einmal alle 7 Tage. Das Web-Profil (Name, Biografie, Foto, Zählwerte) kann einen Tag oder länger hinter der App zurückbleiben; vertrauen Sie der App.
  • Die Kontoregion wird bei der Anmeldung basierend auf SIM/IP festgelegt und konnte in den Einstellungen nicht geändert werden.

Entwickler-App (für den Scheduler):

  • Die Anmeldung bei developers.tiktok.com zeigt nur "Enterprise Developer" (E-Mail + Code + Passwort), aber bei der Erstellung der App können Sie Einzelbesitzer wählen, sodass kein Unternehmen für den Start erforderlich ist.
  • Erstellen Sie die App, dann eine Sandbox: grundlegende Informationen (Symbol 1024², Kategorie, Beschreibung ≤120 Zeichen, AGB-/Datenschutz-URLs, Web-Plattform-URL), Produkte Login Kit (Web-Redirect-URI = Scheduler-Callback; Postiz /integrations/social/tiktok) und Content Posting API (Direct Post einschalten) und alle Bereiche, die der Scheduler anfordert. Postiz fragt nach user.info.basic, user.info.profile, user.info.stats, video.list, video.upload, video.publish; ein fehlender Bereich zeigt "Something went wrong … correct the following: scope" auf der Zustimmungsseite. Klicken Sie nach jeder Bearbeitung auf "Apply changes".
  • Fügen Sie das Markenkonto als Sandbox Zielbenutzer hinzu (das Login-Popup akzeptiert einen QR-Scan von der Telefon-App). Verwenden Sie den Sandbox-Client-Key/Secret im Scheduler.
  • Push-by-Datei erfordert keine Domain-Verifizierung; Pull-by-URL schon.
  • Vor der Prüfung: Der UPLOAD-Modus sendet das Video als Entwurf in den TikTok-Posteingang des Kontos (vom Telefon innerhalb von 24 Stunden veröffentlichen; max. 5 ausstehende pro 24 Stunden). DIRECT_POST funktioniert, postet aber nur privat. Reichen Sie die Produktions-App mit einem Demovideo für öffentliches Direct Posting zur Prüfung ein.
  • Der Zustimmungsschritt kann mit einem E-Mail-Code "Wirklich Sie?" verlangen. Nach vielen Kontoänderungen an einem Tag (E-Mail, Name, Biografie, neue Anmeldungen) drosselt TikTok diese Codes ("Maximale Anzahl von Versuchen erreicht"): Hören Sie auf und versuchen Sie es am nächsten Tag erneut, anstatt darauf einzuhämmern.

6. Überprüfung

  • Die Scheduler-Kanalliste zeigt jedes Markenkonto (Name/Handle), keines deaktiviert.
  • Posten Sie einen privaten/risikolosen Test pro Plattform oder einen Entwurf, bevor der Kalender startet.
  • Ressourcennutzung nach einem Tag: docker stats --no-stream.

Kalender

  • Binden Sie den Posting-Kalender an echte Launch-Ereignisse, nicht an feste Daten: Pre-Launch (kein Download-Aufruf, kein Preis), dann der Launch jedes Stores, dann beide live. Store-Review-Termine verschieben sich; verankern Sie den Kalender neu, wenn sie dies tun.
  • Überprüfen Sie jede Behauptung in einem Beitrag gegen die ausgelieferte Version und jeden Handlungsaufruf gegen das, was tatsächlich in jedem Store live ist.
  • Stories mit Umfragen, Links oder Countdowns können nicht über die API veröffentlicht werden; posten Sie sie in der App.

Entscheidungspunkte, die eine menschliche Genehmigung erfordern

Erstellen von Markenkonten, Business-Portfolio, Facebook-Seite; Freigabe eines lokalen Dienstes über einen Tunnel; Kauf von API-Guthaben und Ausgabenobergrenze; welche persönlichen Konten nie verbunden werden dürfen; Konvertieren eines persönlichen Kontos; Löschen von Docker-Volumes oder -Daten.

Häufige Fallstricke

  • Verbinden des persönlichen Instagram-Kontos, weil das OAuth-Popup die Browsersitzung wiederverwendet hat.
  • Annahme, dass das alte Instagram-Login-Setup in einer neuen Meta-App existiert.
  • Hinzufügen von Publishing-Use Cases zu der Meta-App, die in der mobilen App ausgeliefert wird.
  • Elasticsearch im Stack belassen, wenn Temporal-SQL-Visibility ausreicht.
  • Die Upstream-Compose-Datei, die einen bereits von einem anderen lokalen Dienst verwendeten Port belegt.
  • Der X-Key, der vom falschen Label gespeichert wurde ("Consumer Key Secret", nicht der Dialogtitel).
  • Der Kalender, der so geschrieben ist, als ob die App am Tag 1 auf beiden Stores live wäre.
  • Alle TikTok-Kontoänderungen und die Entwicklerverbindung am selben Tag durchführen, was das Ratenlimit für den Verifizierungscode auslöst.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

erberkk/privacy-and-declarations

Use when filling in or auditing App Store privacy and compliance answers and Google Play App content declarations - Apple App Privacy labels, Play Data safety (CSV import), Health apps declaration and Health Connect permissions, advertising ID, PrivacyInfo.xcprivacy and required-reason APIs, export compliance (ITSAppUsesNonExemptEncryption), age rating, account deletion (in-app, web URL, re-authentication), consent and disclosure for AI features, and rules for health data. Derives every answer from a code and SDK scan so the forms, the privacy policy and the in-app text say the same thing.

erberkk/review-readiness

Use before submitting an app version or a first subscription for App Store or Google Play review, or after receiving a rejection. Runs a go/no-go checklist and writes a report - demo account that signs in with a password (no email one-time code), filled with data and premium unlocked; review notes; in-app purchases visible and purchasable (guideline 2.1(b)); iPad compatibility mode for iPhone-only apps; no placeholders or "coming soon"; metadata matching the app; live privacy URLs; crash-free cold start - and gives a playbook for replying in Resolution Center and deciding when to appeal.

erberkk/store-screenshots

Use when producing or updating App Store and Google Play screenshots and the Play feature graphic - planning a connected "panorama" story across frames, capturing real in-app screens with the app's own test/screenshot harness at each device's logical size and pixel ratio, covering the full device matrix (iPhone 6.9", the required medium Dynamic Island slot, iPhone Duo outer and inner displays, iPad 13" if the app runs on iPad, Play phone, 7" and 10" tablets, 1024x500 feature graphic), checking for alpha channels and wrong sizes, and uploading in order via the App Store Connect and Google Play APIs.

erberkk/web-presence-and-seo

Use when building, checking or deploying the website that a mobile app needs for its store listings and launch - privacy policy, terms, support and web account-deletion pages that work signed-out; hosting apple-app-site-association and assetlinks.json; invite/referral pages (/i/<code>) that open the app or fall back to the store with the Play install referrer; a landing page with store badges and honest per-country prices filled at the edge; Open Graph images; technical SEO (hreflang, canonical, sitemap, robots.txt, JSON-LD); Search Console, Bing Webmaster and IndexNow; AI crawler policy and llms.txt; and a Cloudflare Worker deploy with a production approval gate. Includes a site checker and an IndexNow ping script.

Verwandte Skills