---
name: paid-clipping-campaign-playbook
description: "Operate paid short-form clipping campaigns end-to-end: campaign vetting, joining, source acquisition, clip production, posting cadence, account/payment setup, submission, tracking, and iteration."
version: 1.0.0
author: Mr Han
license: MIT
metadata:
  hermes:
    tags: [short-form, clipping, creator-campaigns, content-rewards, whop, tiktok, instagram, distribution]
---

# Paid Clipping Campaign Playbook

Use when Antoine wants to run paid creator/content clipping campaigns on Content Rewards, Whop, Clipping Culture, or similar platforms. The goal is not just to produce clips; it is to create a repeatable traffic/payout/creative-learning loop.

## Linked files

- `references/die-with-zero-2026-05-22.md` — session-specific campaign notes for the Die With Zero / Content Rewards campaign, including public payout, tag ambiguity, CTA policy, joined dashboard rules, submission mechanics, and local asset paths.
- `references/social-account-creation-and-connection.md` — reusable notes for creating/connecting campaign social accounts, including the trust-sensitive fallback when automated signup silently stalls.
- `references/dopamen-account-positioning-2026-05-22.md` — session-specific decision notes for main Dopamen vs Dopamen-adjacent clipping account, link-in-bio policy, and avatar/logo asset.
- `references/content-rewards-account-verification.md` — reusable Content Rewards account verification flow: add handle, place temporary code in social bio, click verify, interpret success state.
- `references/tiktok-web-posting-handoff.md` — reusable TikTok web posting handoff: QR login, upload, publish, immediate Content Rewards submission, and pitfalls.
- `references/content-rewards-first-post-submission.md` — reusable first-post submission pattern: publish, submit within the freshness window, verify dashboard pending count, log tracker, then pause for review before scaling.
- `references/social-posting-api-stack.md` — researched decision guide for Buffer/Postiz/Metricool/Ayrshare/official TikTok API, including when to use QR handoff vs Postiz Cloud vs Ayrshare.
- `references/postiz-cloud-agent-posting-setup.md` — Postiz Cloud automation setup pattern for agent-operated clipping: trial/payment blocker, TikTok connection, API key, CLI, upload/post payloads, and Content Rewards caveats.
- `references/postiz-api-key-and-integration-verification.md` — safe handling and verification pattern when Antoine provides a Postiz API key and says TikTok/IG is connected; never persist or repeat the secret, verify integrations, then continue to public URL/extraction gates.
- `references/postiz-content-rewards-live-url-handoff.md` — Postiz-to-Content-Rewards handoff notes: published-state polling, TikTok URL reconstruction from `releaseId`, ledger fields, and submission-auth blocker handling.
- `references/content-rewards-postiz-submission-debugging.md` — debugging pattern for Postiz-published clips that fail to reach confirmed Content Rewards submission, including duplicate-check stalls, auth restoration, and precise status labels.
- `references/postiz-tiktok-public-url-availability.md` — payout-critical verification gate for Postiz/TikTok releases where Postiz says `PUBLISHED` but the reconstructed TikTok URL is publicly unavailable and Content Rewards cannot extract metadata.
- `references/postiz-tiktok-canonical-url-and-freshness-gate.md` — session-derived correction: Postiz `releaseId` may not equal the canonical TikTok video id; retrieve the live `/video/<id>` from the TikTok profile grid and distinguish URL-validation success from Content Rewards' 30-minute freshness rejection.
- `references/postiz-content-rewards-confirmed-loop.md` — confirmed working Postiz → TikTok canonical URL → Content Rewards submission loop, including dashboard confirmation semantics and secret-handling rules.
- `references/content-rewards-jawliner-campaign-bench.md` — session-specific precedent for producing a private diagnostic bench from public campaign/source assets while enrollment and submit path remain unconfirmed; includes JAWLINER rules, analytics-screenshot friction, render QA, and status language.
- `references/content-rewards-whop-joined-submit-path-discovery.md` — route-discovery pattern for finding Content Rewards submit paths hidden behind Whop joined apps by extracting `whopExperienceId` / product route metadata from public campaign pages.
- `references/content-rewards-whop-session-api-fallback.md` — fallback pattern when the Whop UI shows `Session Expired` but read-only Content Rewards API probes still succeed from browser cookies; separates UI auth, API auth, and confirmed submission status.
- `references/content-rewards-public-tiktok-extraction-auth-gate.md` — Postiz/TikTok can produce a browser-visible canonical URL that Content Rewards still cannot extract/submit; includes status labels, pause rule, and campaign-wide submissions pitfall.
- `templates/post-tracker.csv` — generic CSV header for per-post tracking across paid clipping campaigns.

## Operating principle

Produce volume privately, publish selectively, and learn deliberately.

- Build a bench of 8-10 clips when source media is available.
- Post the best 4 first as a diagnostic set across distinct angles/styles.
- Continue posting or produce variants based on early signal.
- Do not dump every asset at once unless the campaign is urgent, the account is disposable, and learning quality is less important than lottery-ticket volume.

## 1. Campaign intake checklist

Capture this before production:

```text
Campaign name:
Campaign platform/network:
Public URL:
Joined/private URL:
Agency/community:
Budget:
Payout rate by platform:
Minimum/maximum payout:
Deadline / live window:
Approved source list:
Required tags/accounts:
Submission method:
Payment method:
Review/approval timing:
Post lifetime requirement:
Engagement-rate requirement:
Country/audience requirement:
No-go rules:
CTA/watermark/link policy:
```

Red flags:

- Approved sources unclear.
- Required tags inconsistent across public page/doc/community.
- Payment/submission path unclear after joining.
- Campaign forbids copied clips but source library only has already-clipped assets.
- Fresh social account audience may violate Tier 1-2 country requirements.

## 2. Join / access workflow

1. Open the public campaign URL.
2. Sign in through the platform identity flow, usually Whop/Content Rewards.
3. Complete any email verification code with Antoine if needed.
4. Join/apply to the campaign/community.
6. Inside the joined campaign, verify:
   - campaign still open;
   - whether there is a fixed end date/deadline or whether it appears budget/manual-close driven;
   - current remaining budget and payout already consumed;
   - exact posting rules;
   - exact required tags;
   - exact source library;
   - how to submit post URLs;
   - required submit form fields and acknowledgement checkboxes;
   - post-age submission deadline, if any (start a timer before publishing; some campaigns reject URLs not submitted within 30 minutes);
   - how payment is configured;
   - whether TikTok/IG accounts must be connected before submission or review;
   - whether external CTAs, watermarks, or brand overlays are allowed.
6. Save the joined/private rules into the campaign note. Public pages can be stale, and joined dashboards can override public minimum payouts, deadlines, and submission mechanics.
7. If the flow blocks on email/social login or a verification code, record the exact browser state, public campaign facts, and next required user action in a campaign status note. Do not imply the campaign is joined until the joined dashboard confirms it.
- When Antoine asks for a submit path, lead with the exact URL(s) and keep the caveat short. Do not bury the answer in campaign-rule context.
- For Content Rewards campaigns backed by Whop, inspect the public campaign page/source for `whopExperienceId`, `whopProductRoute`, and campaign `id`. Reconstruct the joined Whop app route and embedded app routes before concluding the submit path is unavailable. See `references/content-rewards-whop-joined-submit-path-discovery.md`.
- After first submission, verify where creators can later find it. In Content Rewards-style flows, public Discover campaign pages may still show `Join Campaign` and may not show submissions. If a user cannot find a submitted post, route them to the joined agency/community app (for example Whop Hub → Clipping Culture → Content Rewards) and look for `Submissions`, `My Videos`, `All Clips`, `Dashboard`, or the campaign's joined detail page. Treat `Join Campaign` on a campaign page as a signal that the user is in a public/wrong-login/wrong-context view, not necessarily that the submission disappeared.
- When checking whether a submitted clip was accepted, use the joined app's `Submissions` page counts and per-clip status, not the public campaign page. Interpret statuses precisely:
  - `Approved > 0` or explicit `Approved` on the clip = accepted.
  - `Rejected > 0` or explicit `Rejected` = rejected.
  - `Pending > 0` with `Awaiting Min. Views` = not accepted yet and not rejected; the platform is waiting for the campaign's minimum-view threshold before review/payout eligibility.
  - Record the current views versus threshold, estimated payout, and check timestamp in the tracker.

Do not publish before resolving tag ambiguity, connected-account requirements, or payment/submission ambiguity if the campaign is payout-driven.

Enrollment/public-page pitfall:

- A public Content Rewards campaign page can expose rules and source assets even when the Dopamen/Whop account is not actually enrolled or when the joined/private submit path is not visible.
- If, after login, clicking `Join Campaign` produces no visible state change, modal, toast, or joined dashboard route, record `enrollment_unconfirmed` rather than assuming the click succeeded.
- It is acceptable to produce a private diagnostic bench from public approved source assets while enrollment is unresolved, but do not publish anything that starts a 30-minute submission clock until the joined/private submit drawer is verified.
- For campaigns requiring analytics screenshots, audience-location proof, or similar post-submit evidence, capture that as payout friction before ranking the campaign as truly scalable.

## 3. Payment / payout setup

Platform-specific details vary, but the standard flow is:

1. In the campaign/platform dashboard, find `Earnings`, `Payouts`, `Billing`, or `Wallet`.
   - For Whop, try the direct wallet URL first: `https://whop.com/dashboard/wallet/`.
   - If logged out, send the direct link to Antoine and have him log into the campaign identity; do not ask him to share passwords or sensitive Stripe/KYC details in chat.
2. Add payout method. Common options are Stripe Connect, PayPal, bank transfer, or Whop balance.
3. Complete identity/tax steps if required.
4. Confirm campaign payout mechanics:
   - whether views are auto-detected from connected accounts or manually reviewed from submitted URLs;
   - when views are counted;
   - minimum engagement thresholds;
   - cap per post/account/campaign;
   - whether TikTok and Instagram payouts differ;
   - whether posts must remain live for a minimum period.
5. Record payment status in the campaign note: `not set`, `connected`, `verified`, or `blocked`.

Never assume posting equals earning. Verify payout setup and submission path before high-volume publishing.

Factory Stripe guidance:

- Prefer one shared factory/studio Stripe account initially, with project/campaign attribution handled via platform exports, trackers, metadata, or accounting notes.
- For third-party clipping payouts, Stripe is usually a payout rail via Whop/Content Rewards rather than a SaaS checkout surface; Stripe `Products` may not be available or relevant for organizing campaign income.
- Track revenue internally by fields like `project`, `campaign`, `revenue_source`, `social_account`, `post_url`, `estimated_payout`, and `actual_payout`.

Payment timing rule:

- Payout details are usually not required before submitting the first post, but they are required before withdrawal and may gate/hold earnings.
- If setup is fast, complete payout setup before the first validation post.
- At minimum, complete payout setup before scaling beyond the first accepted post.
- Payment setup does not reduce creative/compliance rejection risk; it only reduces withdrawal risk.
- For third-party clipping payouts, avoid confusing creator payouts with creating a Whop business, products, or checkout links. A creator should connect payout rails from the creator wallet/earnings/payout area; Whop business checkout setup is only for selling the user's own products.
- For factory operations, prefer a shared factory-level Stripe account when appropriate, with campaign/project/source attribution tracked internally in the post tracker/accounting sheet; Stripe Products are usually not involved in creator payout flows.

## 4. Account strategy

Default account choices:

- If building a durable content/distribution asset: use a project/brand account.
- If campaign is purely a payout experiment: use a dedicated clipping account, not Antoine's personal accounts unless explicitly approved.
- If the venture's main social account is empty/new and the campaign topic strongly fits the venture thesis, using the main venture account can be acceptable and may compound audience learning faster.
- If the venture's main social account already has brand equity or a clearer product/community direction, prefer a brand-adjacent clipping account to isolate rejection/spam/creative-testing risk.
- Avoid spammy multi-account duplication. Many campaigns reject repeated clips or spam posting.

Account readiness checklist:

```text
Platform:
Handle:
Owner/login status:
Profile/bio/avatar acceptable:
Likes visible:
Audience country risk acceptable:
Can post videos manually:
Can access analytics:
Can submit/share post URLs:
No hidden-like setting:
No private-account setting:
```

For Die With Zero-style campaigns, a dedicated account is better than Antoine's personal account unless Antoine explicitly wants to lend personal identity.

Brand/link guidance:

- If a brand or brand-adjacent clipping account is used, a light website link in bio is useful for capturing upside from viral attention.
- Keep the profile bridge soft: e.g. `Money, time, health, and not wasting your life.`
- Do not add hard-sell brand CTAs, watermarks, or off-brief caption CTAs until the campaign explicitly permits external promotion.
- If Dopamen is the brand, the local avatar asset may be `/opt/mrhan/ventures/dopamen/public/icon-512.png`; verify the file exists before sending or using it.
- See `references/dopamen-account-positioning-2026-05-22.md` for the main-vs-adjacent account decision and Dopamen profile setup notes.

Social account creation and connection:

- Act as infra owner before creating anything: inspect existing venture inboxes, accounts, handles, workspaces, domains, and notes first; reuse the canonical venture asset by default. Do not create a new email/inbox/tool workspace just because it is faster unless there is a clear operational reason, and state that reason explicitly.
- For Dopamen specifically, treat `dopamen@agentmail.to` as the canonical AgentMail inbox; avoid creating `dopamen-*` duplicate inboxes/workspaces unless Antoine explicitly wants separation.
- Treat TikTok/Instagram account creation as a trust-sensitive prerequisite; use a real device or trusted logged-in browser profile when fresh-account signup stalls in automation.
- If an automated signup flow shows an enabled verification button but no email/SMS arrives and no visible error/captcha appears, stop retrying, record the state, and ask Antoine to complete account creation on a real device/browser.
- After account creation, connect the account inside the campaign platform before posting whenever an Accounts page exists.
- For Content Rewards, expect a bio-code verification step: add the handle, copy the temporary verification code into the TikTok/IG bio, wait for Antoine to confirm it is saved, then click `Verify account`. A verified account may show only `Unlink` afterward, with the previous `Verify`/`Pending verification` state gone.
- See `references/social-account-creation-and-connection.md` for the fallback pattern and account-readiness checklist.
- See `references/content-rewards-account-verification.md` for the Content Rewards-specific verification flow and handoff template.

## 5. Source acquisition and rights

1. Only use approved campaign sources.
2. Preserve exact source URLs and timestamps for each clip.
3. Download source media and transcripts where possible.
4. If source download is gated:
   - use approved source library downloads if provided;
   - use browser/cookies only when authorized;
   - ask for raw upload if automation is blocked;
   - keep render scripts separate from acquisition so work is not lost.
5. Do not copy other clippers' edits.

## 6. Clip production workflow

For each candidate:

```text
Source URL:
Timestamp in/out:
Angle:
Hook:
Caption style:
Spoken transcript spine:
Why it should work:
Risk / context needed:
Output filename:
```

Default render spec:

- 1080x1920 vertical.
- H.264/AAC.
- 30fps.
- Bold, readable captions.
- Voice clear; music optional and low.
- Remove/avoid source captions if they clash.
- Generate a thumbnail contact sheet and visually QA the rendered bench before posting. Check: vertical framing, readable hook/subtitle overlays, bad crop, competitor products, disallowed claims, and whether bottom overlays obscure required source captions.
- For horizontal podcast/source clips, avoid blind center-crop if it cuts to irrelevant body/feet or loses the speaker context. Prefer a blurred 9:16 background with the original horizontal frame contained/centered, then add hook/context overlays.
- If source assets are large public Google Drive folders, a campaign-specific venv plus `gdown --folder` is a practical acquisition path. If the folder download stops after enough usable assets are fetched, proceed with bench production instead of blocking on the full library.
- Clip must stand alone without heavy context.

Bench strategy:

- Produce 8-10 total clips when source media is available.
- Mix angles: emotional regret, contrarian finance, time/body urgency, practical family/inheritance, memory dividends.
- Mix caption styles enough to learn: classic bold, minimal clean, black-bar/yellow hook, color-coded money/life hook.
- Keep filenames ordered and descriptive.

## 7. Posting cadence and why

Default cadence for a durable or semi-durable account:

- Post 1-2/day.
- First 4 posts should test distinct angles, not four variants of the same idea.
- Use early signal to choose what to post next.

When to accelerate:

- Campaign deadline is near.
- Account is disposable.
- Payout opportunity matters more than account quality.
- You accept noisier learning.

Accelerated cadence:

- 3-4/day across TikTok/IG, spaced by several hours.
- Avoid posting all clips in the same minute.
- Do not repeat the same clip/caption across multiple accounts if rules prohibit spam/reposts.

Why not dump all 8 immediately by default:

- Signal contamination: topic, caption style, time of day, source, and account warmup blur together.
- Weak posts may lower near-term distribution quality.
- Repetitive bursts can look spammy to platforms and campaign reviewers.
- You spend all bullets before learning which angle works.

## 8. Posting checklist

Campaign approval model:

- Assume approval is post-by-post unless the platform explicitly says otherwise.
- Posting first and getting views does not guarantee payment; rejected posts usually earn `$0` even if they get large view counts.
- Some Content Rewards dashboards may show an intermediate state such as `Awaiting Min. Views` while the submission remains counted as `Pending`, with `Approved 0` / `Rejected 0`. Treat this as **not rejected yet**: capture the visible minimum threshold (e.g. `595 / 1,000 views`), estimated payout, and pending counts before deciding whether to post the next diagnostic clip.
- If approval rules are unclear, use one strong-but-not-best validation clip first, submit immediately, and wait for the campaign's review decision before burning the strongest clips. Exception: if the first clip is still pending only because it has not reached the minimum-view threshold, posting a second distinct diagnostic clip can be reasonable after Antoine approves continued testing.
- When estimating first-post acceptance odds, separate mechanical compliance risk from creative/platform risk. Mechanical positives include: account connected/verified, post submitted inside freshness window, required tag present, approved source used, public/likes visible, no unapproved CTA/watermark. Remaining risks include fresh-account trust, subjective reviewer quality judgment, exact source-library ambiguity, engagement thresholds, and delayed platform view pushes.
- Record average review time from the joined dashboard and use it to schedule the next wave; for Content Rewards/Whop, review can be around ~1 day depending on campaign, but minimum-view gates can delay practical approval/rejection feedback beyond the nominal review time.

Before each post:

- Confirm file path and filename.
- Confirm platform/account.
- Confirm required campaign tag.
- Confirm likes are visible.
- Confirm account is connected in the campaign dashboard if required.
- Confirm no unapproved CTA/watermark/link.
- Confirm caption matches platform tag requirement.
- Confirm URL-submission deadline and start a timer before publishing if the campaign has a freshness rule.
- Post manually, via approved scheduler/API layer, or via TikTok web after an authenticated session is established.
- If Antoine asks the agent to post and TikTok web is not logged in, prefer QR login handoff for same-day campaign pressure: send a visible QR screenshot, have Antoine approve from the TikTok app logged into the target handle, then continue upload. See `references/tiktok-web-posting-handoff.md`.
- For repeatable agent-operated posting, default to a legitimate connected scheduler/API layer rather than unofficial TikTok automation. Use Postiz Cloud as the early low-cost agent-friendly option; use Ayrshare when the factory needs a robust multi-account API/webhook layer. See `references/social-posting-api-stack.md`.
- Copy final post URL. If posting through Postiz/TikTok, do not blindly trust `releaseURL`: it may be the creator profile URL. Also do not assume the numeric id inside `releaseId` is the canonical TikTok video id. Use Postiz mainly to confirm `state: PUBLISHED`, then retrieve the actual newest `/@handle/video/<id>` URL from the TikTok profile grid or TikTok share surface and match it by caption/order. Save both raw Postiz fields and the canonical TikTok URL. See `references/postiz-content-rewards-live-url-handoff.md` and `references/postiz-tiktok-canonical-url-and-freshness-gate.md`.
- Verify the canonical TikTok URL is publicly available in a clean/not-logged-in context before using it for payout submission. If TikTok shows `Video currently unavailable`, or Content Rewards `extract-video-metadata` cannot extract it, mark `submission_blocked` and stop posting more clips through that path until fixed; do not burn the 30-minute submission window. See `references/postiz-tiktok-public-url-availability.md`.
- A browser-visible TikTok URL is still not enough: Content Rewards may fail `/api/extract-video-metadata` with an unable-to-extract/private/deleted/age-restricted error even when the TikTok page loads and plays. In that state, copied/share URLs with tracking params usually do not help, direct server-action submit may return a generic unexpected error, and more posting only burns freshness windows. Mark `submission_blocked_extract_or_auth`, restore the joined Whop/Content Rewards session, and retry/verify from the UI before publishing more. See `references/content-rewards-public-tiktok-extraction-auth-gate.md`.
- Submit URL in campaign dashboard immediately when required; for 30-minute freshness rules, treat the first 5 minutes after posting as the submission window. The clock starts when the social post is live, not when login/upload prep begins. If Content Rewards says `Video too old`, that indicates URL parsing succeeded but the freshness gate failed — record `submission_blocked_old_video`, not a URL failure.
- Verify the dashboard state after submission, not only the submit form. Look for the submitted clip in the campaign list or a count like `All Clips 1 / Pending 1`. For the confirmed Postiz → TikTok → Content Rewards loop, see `references/postiz-content-rewards-confirmed-loop.md`.
- If the submitted clip shows `Pending / Awaiting Min. Views`, report it as mechanically submitted but not yet accepted: include current views versus the minimum threshold, plus `Approved 0` / `Rejected 0` if visible.
- If the submit form stalls on `Checking for duplicates...`, the submit drawer closes without confirmation, or the submit button never enables, do **not** count it as submitted. Check the tracker for prior use of the same creative/source segment; if it is likely duplicate-sensitive, switch to a fresh unused clip/post URL instead of retrying the same asset. See `references/content-rewards-postiz-submission-debugging.md`.
- If the Content Rewards submit endpoint is not visible outside an authenticated joined dashboard, stop additional publishing until manual submission or authenticated browser automation is available. A live social post that is not submitted inside the payout window is operational waste.
- If the Whop embedded app visibly says `Session Expired`, do not immediately classify the whole session as dead. First probe a harmless joined API endpoint such as campaign submission counts from the same browser context. If it returns `200`, label the state `ui_session_expired_api_auth_alive` and continue only with a verified server-action/API submit path; otherwise mark `submission_auth_blocked`. See `references/content-rewards-whop-session-api-fallback.md`.
- Log post URL, submitted-at time, and approval status in the tracker.
- If this is the first post for a campaign/reviewer, pause the next wave until review feedback unless Antoine explicitly chooses volume over approval-risk control.
- See `references/content-rewards-first-post-submission.md` for the first-post submission pattern.

Caption rule:

- Keep captions simple, native, and not salesy.
- Include required campaign tag.
- Do not add external CTA unless campaign explicitly allows it.

## 9. Tracking sheet fields

Track every post:

```text
Campaign
Platform
Account
Clip filename
Source URL
Timestamp
Angle
Caption style
Caption text
Posted at
Post URL
Scheduler/API provider
Scheduler post id
Scheduler release id
Scheduler raw release URL
Inferred public URL
Submitted to campaign? y/n
Campaign submitted at
Campaign submission status
Submission blocker
1h views
3h views
24h views
Likes
Comments
Shares
Saves
Engagement rate
Approval status
Eligible views
Estimated payout
Actual payout
Notes / comments / qualitative signal
```

Decision rule after first 4 posts:

- If one topic wins: cut 2-4 more variants around that topic.
- If one caption style wins: reuse style across remaining clips.
- If all underperform: change format/hook harder before posting the rest.
- If a post fails campaign review: pause and inspect rule mismatch before posting more.

## 10. Die With Zero campaign specifics observed 2026-05-22

Campaign: `Post Die With Zero Podcast Clips — Bill Perkins Life Philosophy & Money Mindset`

Platform/network:

- Content Rewards / Clipping Culture / Whop.
- Public URL: `https://contentrewards.com/discover/80bd16a7-a8d7-4e91-ba5c-403427767f65`
- Requirements doc: `https://docs.google.com/document/d/1AwrqhZNqRZ8kZ93Bc751KwwE47fRVzF2shJq5OTNMaE/edit?usp=sharing`

Observed payout:

- Public page initially showed TikTok: `$1.50 / 1K views`, min `$1.50`, max `$400`.
- Public page initially showed Instagram Reels: `$1 / 1K views`, min `$1`, max `$400`.
- Joined dashboard later showed TikTok min payout as `$2`, proving private dashboard values can override public page details.

Joined dashboard facts observed after Whop/Content Rewards login:

- Campaign visible and active inside Content Rewards.
- Paid out: about `$174.31 / $3,500`.
- Views shown: about `140k`.
- Creator count shown: `1`.
- Avg review time: about `21h`.
- Submit form fields: `Title`, `Link`, requirements acknowledgement checkbox, `Submit for approval`.
- Critical eligibility rule: videos must be submitted within 30 minutes of uploading; older videos are automatically rejected.
- Accounts page supported connecting TikTok, Instagram, YouTube, X, and Facebook; no linked accounts were present at verification time.

Rules observed:

- Use approved Content Library sources only.
- Post to TikTok and/or Instagram Reels.
- English only.
- High-quality posts only.
- Likes must be visible.
- Posts must remain live at least 30 days.
- Minimum engagement rate: 0.20%.
- No NSFW / violent / controversial content.
- No copying other clippers' videos.
- No spam posting or same clip repeatedly across multiple accounts.

Required tag ambiguity:

- Public page says TikTok `@diewithzero`; Instagram `@diewithzero` or `@diewithzerobook`.
- Requirements doc showed inconsistency for Instagram.
- Conservative rule: verify inside joined campaign/support before posting IG. For TikTok use `@diewithzero`.

CTA policy:

- External Dopamen CTA/link/watermark not confirmed.
- Do not add Dopamen CTA or watermark unless joined campaign/support explicitly allows it.

Current local DWZ assets:

- Clip outputs live at `/opt/mrhan/dwz_clips/output/final/`.
- Posting plan: `/opt/mrhan/dwz_clips/output/final/POSTING_PLAN.md`.

## 11. Next-step template

When assets are ready but posting has not started:

1. Verify joined campaign state from Antoine's Content Rewards/Whop account.
2. Verify payout method and submission path.
3. Choose posting account(s): dedicated clipping account preferred.
4. Verify TikTok account can post and likes are visible.
5. Post first diagnostic clip.
6. Submit post URL to campaign dashboard if required.
7. Log 1h/3h/24h metrics.
8. Continue with next diagnostic clip according to cadence.

### Status-reporting rule for “where were we?”

When Antoine asks where we are on automatic clipping/posting, report the pipeline by state, not as a generic plan. Separate:

```text
Campaign joined/verified:
Campaign rules/submission window known:
Posting/social account selected:
Social account connected to campaign dashboard:
Clip assets ready:
Scheduler/API automation layer ready:
First post/submission status:
Current blocker:
Manual fallback:
Recommended next action:
```

Workflow correction from Antoine: do not over-narrow the work to a single failed/duplicate submission if the stated goal is broader clipping operations. Run the full campaign loop in parallel where safe:

1. Continue posting/submitting eligible existing clips when the posting + submission path is verified.
2. Find and rank more campaigns by fit, payout, budget remaining, approval rate, and source accessibility.
3. Enroll/join the strongest campaigns and capture joined/private rules.
4. Pull source assets and start cutting clips for newly enrolled campaigns.
5. Only pause volume when the active posting path cannot produce publicly available, submit-able URLs inside the campaign window.

Status language should make this explicit: `posting blocked`, `submission blocked`, `campaign discovery continuing`, `enrollment in progress`, or `clip production in progress` are separate tracks, not one global blocker.

Do not conflate “social account connected to Content Rewards” with “automatic posting is ready.” Automatic posting additionally requires a connected scheduler/API layer such as Postiz or Ayrshare, an API key/integration id, a tested upload/draft path, and a way to retrieve the live public URL before campaign submission. If the scheduler is blocked on payment or OAuth, say exactly that and offer the TikTok web/manual handoff only as a fallback, not as the operating model.

When answering “how are we doing on clipping?” or similar status questions, be stateful, evidence-based, and brief. Antoine dislikes long operational updates here. Default format:

```text
- Campaigns entered: N
- Posts made: N
- Submitted: N
- Blocker: one line
- Next action: one line
```

Check/report the concrete artifacts that determine whether the loop is live:

- rendered MP4 paths and whether they exist;
- campaign tracker/ledger rows and whether any posted URLs/submissions are recorded;
- current public campaign status/budget if fetchable without auth;
- scheduler/API readiness, especially whether required env vars such as `POSTIZ_API_KEY` and platform integration id are present;
- whether the missing piece is creative production, social OAuth/payment/API setup, TikTok web login, or Content Rewards submission.

Keep auth layers separate in status language:

- `Content Rewards account auth` = can log in / joined app visible.
- `Social account verification` = TikTok/IG handle connected and verified inside Content Rewards.
- `Scheduler posting auth` = Postiz/Ayrshare/etc. can publish to TikTok/IG.
- `Submission automation` = agent can submit the live post URL inside the joined campaign within the freshness window.

Do not say “auth is solved” globally unless all relevant layers are currently verified. If one layer worked in a previous session but is not currently available, say “previously solved; current agent submission path not verified.”

Frame the strategic conclusion explicitly: if assets exist but no live URL/submission exists, the bottleneck is last-mile posting/submission, so do not recommend producing more clips until one diagnostic post can be published and submitted end-to-end.

Postiz credential/integration rule:

- If Antoine provides a Postiz API key, treat it as a secret: install it only in the appropriate local env, never save/repeat it in memory, notes, trackers, or summaries, verify the expected social integration by API before posting, and record only non-secret operational identifiers such as handle and integration id.
- Do not call Postiz posting “ready” until `Postiz API auth`, `Postiz social integration`, `TikTok public URL availability`, `Content Rewards extraction`, and `Campaign submission confirmation` have each been checked. See `references/postiz-api-key-and-integration-verification.md`.

## Verification checklist

- [ ] Campaign joined.
- [ ] Payment/payout method connected or deliberately deferred until after first validation approval.
- [ ] Submission method known.
- [ ] Post-by-post approval model and expected review timing understood.
- [ ] Required tags confirmed per platform.
- [ ] CTA/watermark policy confirmed.
- [ ] Posting account selected and accessible.
- [ ] Likes visible and account public.
- [ ] First 4 diagnostic clips selected.
- [ ] Tracker created.
- [ ] First post URL submitted/logged.
