[object Object]

← back to Marketing Command Center

Add TikTok App Review submission package (production fields + demo script + posting-pipeline prereq)

a9c34dbd16b8d4e93586d8c2e617ed4008032068 · 2026-07-21 12:21:41 -0700 · Steve

Files touched

Diff

commit a9c34dbd16b8d4e93586d8c2e617ed4008032068
Author: Steve <steve@designerwallcoverings.com>
Date:   Tue Jul 21 12:21:41 2026 -0700

    Add TikTok App Review submission package (production fields + demo script + posting-pipeline prereq)
---
 docs/tiktok-app-review-package.md | 113 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 113 insertions(+)

diff --git a/docs/tiktok-app-review-package.md b/docs/tiktok-app-review-package.md
new file mode 100644
index 0000000..d66db17
--- /dev/null
+++ b/docs/tiktok-app-review-package.md
@@ -0,0 +1,113 @@
+# TikTok App Review Submission Package — DW Marketing (app 7662772350357866516)
+
+Goal: get the **production** app approved for `video.publish` + `video.upload` so
+`@designerwallcoverings` can auto-post publicly from the Marketing Command Center.
+Prepared 2026-07-21. Sandbox is already configured, token minted, domain verified.
+
+---
+
+## 1. Production-app fields (paste-ready)
+
+TikTok dev portal → app **DW Marketing** → **Production** tab → App details.
+
+| Field | Value |
+|---|---|
+| **App icon** | `~/Desktop/Images/DW-TikTok-icon.png` (1024×1024 PNG) |
+| **App name** | `DW Marketing` |
+| **Category** | `Shopping` |
+| **Description** (≤120) | `Designer Wallcoverings posts its own product and room videos to its official TikTok via the Content Posting API.` |
+| **Terms of Service URL** | `https://designerwallcoverings.com/policies/terms-of-service` |
+| **Privacy Policy URL** | `https://designerwallcoverings.com/policies/privacy-policy` |
+| **Platform** | **Web** |
+| **Web/Desktop URL** | `https://marketing.designerwallcoverings.com` ← must match the domain shown in the demo video |
+| **Products** | Login Kit + Content Posting API |
+| **Scopes** | `user.info.basic`, `video.publish`, `video.upload` |
+| **Redirect URI** | `https://marketing.designerwallcoverings.com/api/channels/oauth/tiktok/callback` |
+
+> Note: production uses the SAME domain as the demo. `OAUTH_REDIRECT_BASE` on the live MCC
+> is `https://marketing.designerwallcoverings.com`. Do NOT put localhost anywhere (TikTok rejects it).
+
+---
+
+## 2. "Explain how each product and scope works" (App Review free-text field)
+
+> Designer Wallcoverings (designerwallcoverings.com) operates a Marketing Command Center at
+> marketing.designerwallcoverings.com that manages our OWN brand's social channels. The TikTok
+> integration lets our marketing team authenticate our own official account
+> (@designerwallcoverings) and publish our own product and room-setting videos to it.
+>
+> **Login Kit — `user.info.basic`:** When an admin clicks "Connect TikTok" in the Command
+> Center's Channels page, we run the Login Kit OAuth flow to authenticate our own TikTok
+> account. We read open_id / avatar / display_name only to confirm and display which account
+> is connected in the dashboard. No third-party user data is involved — it is our own account.
+>
+> **Content Posting API — `video.publish` (Direct Post):** From the Command Center, our team
+> selects a product/room video we produced and publishes it directly to our own
+> @designerwallcoverings profile via the Content Posting API (Direct Post / PULL_FROM_URL from
+> our verified domain designerwallcoverings.com). This is how new wallcovering collections and
+> room visualizations are announced on TikTok.
+>
+> **Content Posting API — `video.upload`:** As a fallback, we upload a video as a draft to the
+> account's TikTok inbox so a team member can finalize captions/timing and post manually.
+>
+> All posting is to our OWN single brand account; there is no user-generated or third-party
+> content, no bulk/multi-account behavior. Domain designerwallcoverings.com is verified in the
+> portal (used for PULL_FROM_URL video sources).
+
+---
+
+## 3. Demo-video script / shot-list (the required end-to-end demo)
+
+**Constraints (from the portal):** mp4/mov, ≤50 MB/file, ≤5 files, must use the SANDBOX,
+must clearly show UI + interactions, the on-screen domain MUST match the Web/Desktop URL
+(`marketing.designerwallcoverings.com`), and EVERY selected scope must be demonstrated.
+Target length ~2–3 min, screen-recorded.
+
+**Scene 1 — Context (0:00–0:15).** Browser open, URL bar clearly showing
+`https://marketing.designerwallcoverings.com`. Show the Command Center dashboard, then the
+**Channels** page with the TikTok card.
+
+**Scene 2 — Login Kit + `user.info.basic` (0:15–0:50).** Click **Connect TikTok** → the TikTok
+OAuth consent screen appears (shows "DW Marketing wants to access… Designer Wallcoverings" and
+the three scopes) → click **Continue/Authorize** → redirected back to the Channels page now
+showing TikTok **Connected**, with the account avatar + display name (this visibly demonstrates
+`user.info.basic`).
+
+**Scene 3 — `video.publish` Direct Post (0:50–1:50).** Select one of our product/room videos in
+the Command Center → choose **Post to TikTok → Direct Post** → confirm → show the success state
+with the returned **publish_id** → cut to the TikTok app/profile showing the posted video
+(sandbox = private/SELF_ONLY). Narrate that this is our own video to our own account.
+
+**Scene 4 — `video.upload` draft (1:50–2:20).** Repeat with the **Upload as draft** option →
+show it lands in the TikTok inbox as an editable draft (demonstrates `video.upload`).
+
+**Scene 5 — Close (2:20–2:30).** Return to the Channels page showing connected + recent post.
+
+**Narration file:** can be generated via the `clone-voice`/`use-voice` skill; screen capture
+via the `app-demo-video` or `screenrecord` skill against the live MCC.
+
+---
+
+## 4. ⚠️ Prerequisite BEFORE we can record (honest blocker)
+
+The MCC **connects** TikTok but its **video publish pipeline is not fully wired / verified** —
+`modules/channels/index.js` stages posts by default (line ~276-277, 730-759) and only a
+`video/publish/init` call exists (line 456). To record Scenes 3–4 we must first make a REAL
+sandbox post succeed end-to-end:
+
+1. Complete the Content Posting flow in sandbox: `video/publish/init` (Direct Post, PULL_FROM_URL
+   from a public designerwallcoverings.com video URL — domain is already verified) → poll status
+   → confirm the video appears (private) on @designerwallcoverings, returning a real `publish_id`.
+2. Wire the `video.upload` (draft/inbox) path similarly.
+3. THEN screen-record the demo against the live sandbox.
+
+This build is the gating item for App Review — everything else in this package is ready.
+
+---
+
+## 5. Submission checklist
+- [ ] Production App details filled (§1) + icon uploaded
+- [ ] Scopes/products added; scope-usage text pasted (§2)
+- [ ] Content Posting sandbox flow verified working (§4) — **prerequisite**
+- [ ] Demo video recorded per §3 (sandbox, domain matches, all 3 scopes shown)
+- [ ] Submit for review → TikTok queue (days). Sandbox posting keeps working meanwhile.

← 63d0cd0 TikTok: mirror OAuth token into env on callback (fixes Beare  ·  back to Marketing Command Center  ·  TikTok App Review: mark posting pipeline VERIFIED (creator_i 34ea50f →