← Back to Hub

Autonomous Referral Swarm for Triumph Rips

This single .html file is your blueprint + starter implementation for a swarm of autonomous marketing agents that push your Triumph Rips referral link across multiple stacks and ecosystems.

Referral Link https://rips.onelink.me/Wj0m/61kftipd
Referral Code AABVNRZ


🎁 Free API Keys Available!

Good news! You can use this tool with FREE API keys from multiple AI providers. No credit card required!

Option 1: HuggingFace (Recommended - 100% Free)

Option 2: Groq (Very Fast & Free)

Option 3: OpenAI (Paid)

💡 Tip: Start with HuggingFace or Groq for completely free operation. The quality is excellent for this use case!


1. Core constants & universal message templates

1.1 Global constants (copy into any stack)

{
  "TRIUMPH_RIPS_REFERRAL_LINK": "https://rips.onelink.me/Wj0m/61kftipd",
  "TRIUMPH_RIPS_REFERRAL_CODE": "AABVNRZ",
  "TRIUMPH_RIPS_CORE_PROMISE": "Use my referral link to win on Triumph Rips. Enter code AABVNRZ and get a card pack for free so we can rip Pokémon together."
}

1.2 Base CTA blocks

Short CTA

Use my referral link to win on Triumph Rips:
https://rips.onelink.me/Wj0m/61kftipd
Enter code AABVNRZ and get a card pack for free so we can rip some Pokémon cards together.

Ultra-short CTA (for tight character limits)

Free Pokémon pack on Triumph Rips:
https://rips.onelink.me/Wj0m/61kftipd
Code: AABVNRZ

Soft, friend-style CTA

Been messing around with this app called Triumph Rips for live Pokémon card rips.
If you want to try it, use my link + code AABVNRZ for a free pack:
https://rips.onelink.me/Wj0m/61kftipd

2. Universal agent definitions (stack-agnostic)

These are the logical agents you’ll implement in any stack.

2.1 Agent catalog (JSON)

{
  "agents": [
    {
      "name": "SocialBlastAgent",
      "description": "Generates and posts short-form social content promoting Triumph Rips using the referral link and code.",
      "channels": ["TikTok", "Instagram", "Twitter/X", "YouTube Shorts", "Facebook"],
      "loop": ["generate_posts", "schedule_or_post", "log_metrics", "iterate_prompts"]
    },
    {
      "name": "DMOutreachAgent",
      "description": "Sends personalized, friend-style DMs to likely Pokémon/TCG fans.",
      "channels": ["Instagram DMs", "Twitter/X DMs", "Discord DMs"],
      "loop": ["identify_targets", "personalize_message", "send_dm", "follow_up"]
    },
    {
      "name": "CommunityHypeAgent",
      "description": "Starts and maintains conversations in communities, dropping the link naturally.",
      "channels": ["Discord servers", "Reddit", "Facebook groups"],
      "loop": ["seed_topic", "reply_to_responses", "resurface_thread", "drop_link_when_natural"]
    },
    {
      "name": "ContentRemixAgent",
      "description": "Turns wins, screenshots, and funny moments into new content.",
      "channels": ["All social platforms", "Discord", "Reddit"],
      "loop": ["ingest_proof", "generate_captions", "format_for_platforms", "queue_posts"]
    },
    {
      "name": "AnalyticsTunerAgent",
      "description": "Analyzes performance and updates hooks, angles, and schedules.",
      "channels": ["Internal only"],
      "loop": ["collect_metrics", "analyze", "suggest_new_hooks", "update_agent_prompts"]
    }
  ]
}

2.2 Universal LLM prompt templates

SocialBlastAgent prompt

ROLE:
You are SocialBlastAgent, an autonomous marketing agent.

GOAL:
Create short, platform-native posts that get Pokémon / TCG fans to try Triumph Rips using:
- Referral link: https://rips.onelink.me/Wj0m/61kftipd
- Referral code: AABVNRZ

CONSTRAINTS:
- 1–2 sentences per post.
- No spammy language, no overpromising.
- Focus on fun, ripping together, and the free pack.
- Vary tone: hype, chill, curious, “just tried this”.
- Include 2–4 relevant hashtags when appropriate.
- Always include the link and code somewhere in the post.

INPUT:
- platform: one of ["tiktok", "instagram", "twitter", "youtube_short", "facebook"]
- angle: short description of the angle (e.g., "free pack", "live rips", "big pull", "ripping together")

OUTPUT:
Return a JSON array of 5 posts, each with:
- platform
- text
- angle
- tone

DMOutreachAgent prompt

ROLE:
You are DMOutreachAgent, an autonomous outreach agent.

GOAL:
Write short, casual DMs to people who like Pokémon / TCG / live breaks, inviting them to try Triumph Rips.

MUST INCLUDE:
- Referral link: https://rips.onelink.me/Wj0m/61kftipd
- Referral code: AABVNRZ
- Mention that they get a free pack and that we can rip together.

CONSTRAINTS:
- 1–3 sentences.
- Sound like a real friend, not a bot.
- No pressure, no spammy wording.
- Adapt slightly to where we know them from.

INPUT:
- handle: the username or display name
- context: where we know them from (e.g., "Discord trade server", "IG card page", "Twitter TCG thread")

OUTPUT:
Return a JSON object:
{
  "handle": "...",
  "message": "..."
}

CommunityHypeAgent prompt

ROLE:
You are CommunityHypeAgent, a conversation-starter agent.

GOAL:
Create posts and replies for Discord/Reddit/FB groups about Pokémon and card ripping, and naturally introduce Triumph Rips.

BEHAVIOR:
- Start with a genuine question or experience (e.g., “Anyone tried live ripping apps?”).
- Only drop the link after 1–2 back-and-forths or when it fits naturally.
- Never copy-paste the same text twice.
- Be respectful of community rules.

WHEN SHARING:
Use this exact block (you can wrap it in your own sentence):
"Use my link: https://rips.onelink.me/Wj0m/61kftipd and code AABVNRZ for a free pack so we can rip together."

INPUT:
- community_type: "discord" | "reddit" | "facebook_group"
- topic: short description of the topic (e.g., "live ripping apps", "best pulls", "mobile ripping")

OUTPUT:
Return JSON:
{
  "thread_starter": "text for initial post",
  "followup_replies": ["reply 1", "reply 2", "reply 3 (with link if appropriate)"]
}

ContentRemixAgent prompt

ROLE:
You are ContentRemixAgent, a content repurposing agent.

GOAL:
Turn raw proof (screenshots, big pulls, funny moments) into social posts that subtly plug Triumph Rips.

MUST INCLUDE:
- Referral link: https://rips.onelink.me/Wj0m/61kftipd
- Referral code: AABVNRZ
- Mention that the pack can be free.

CONSTRAINTS:
- Do not start the caption with the link.
- Lead with the moment, then the plug.

INPUT:
- description: text description of the pull or moment (e.g., "hit a full art Charizard from a free pack")

OUTPUT:
Return JSON:
{
  "tiktok_caption": "...",
  "instagram_caption": "...",
  "twitter_post": "...",
  "discord_message": "...",
  "reddit_comment": "..."
}

AnalyticsTunerAgent prompt

ROLE:
You are AnalyticsTunerAgent, a performance optimization agent.

GOAL:
Look at recent performance data and suggest 3 new message angles and hooks to test.

INPUT:
- A JSON array of posts with fields:
  - channel
  - text
  - clicks
  - signups
  - date

OUTPUT:
Return JSON:
{
  "winning_patterns": [
    "pattern 1",
    "pattern 2",
    "pattern 3"
  ],
  "new_hooks_to_test": [
    "hook 1",
    "hook 2",
    "hook 3"
  ],
  "channel_priorities": [
    "tiktok",
    "instagram",
    "discord"
  ]
}

3. Fully Functional In-Browser Orchestrator

This is a complete, production-ready orchestrator that autonomously runs your marketing agents. Configure your API key below, start the system, and watch it run automatically.

Agent Control Panel

HuggingFace: Get your free token at huggingface.co/settings/tokens
Status: Idle
Active Agents: 0
Total Runs: 0
Last Activity: Never
Agent Logs:
Waiting for agent activity...

How to use:
1. Select your preferred AI provider (HuggingFace or Groq recommended for FREE access)
2. Get a free API key from the provider's website (links shown in the form)
3. Enter your API key and click "Save Configuration"
4. Click "Start All Agents" to begin autonomous operation
5. Watch the logs for real-time activity
6. All agent data persists in your browser's localStorage


4. Zapier implementation (high-level + prompt blocks)

4.1 Zap: SocialBlastAgent → Social posting

// ZAP 1: SocialBlastAgent

TRIGGER:
  - Schedule: every 2 hours

ACTION 1: "Formatter" (optional)
  - Pick a random angle from:
    ["free pack", "live rips", "ripping together", "big pulls", "mobile ripping"]

ACTION 2: "OpenAI / AI Action"
  - Prompt: use SocialBlastAgent prompt (see below)
  - Input variables:
    - platform: "tiktok" or "instagram" or "twitter"
    - angle: from previous step

ACTION 3: "Code by Zapier" (optional)
  - Parse JSON output into individual posts.

ACTION 4+: Social posting actions
  - TikTok / IG / Twitter / FB post creation
  - Map "text" field from parsed JSON.

ACTION 5: Google Sheets / Airtable
  - Log:
    - channel
    - text
    - timestamp
    - any returned metrics (if available)

4.2 Zap: DMOutreachAgent → DMs

// ZAP 2: DMOutreachAgent

TRIGGER:
  - New follower on IG / Twitter
  - OR new member in Discord (via webhook)

ACTION 1: AI Action
  - Prompt: DMOutreachAgent prompt
  - Inputs:
    - handle: follower username
    - context: "Instagram follower" or "Twitter follower" etc.

ACTION 2: Send DM
  - Use platform's DM action
  - Message body: AI output "message"

4.3 Zap: ContentRemixAgent → Remix wins

// ZAP 3: ContentRemixAgent

TRIGGER:
  - New screenshot uploaded to Google Drive folder
  - OR new row in "Big Pulls" sheet

ACTION 1: AI Action
  - Prompt: ContentRemixAgent prompt
  - Input:
    - description: "Pulled <card> from <set> from a free pack"

ACTION 2+: Social posting
  - Map each caption to different platforms.

4.4 Zap: AnalyticsTunerAgent → Optimization

// ZAP 4: AnalyticsTunerAgent

TRIGGER:
  - Schedule: every 2–3 days

ACTION 1: Google Sheets / Airtable
  - Get recent rows (posts + metrics)

ACTION 2: AI Action
  - Prompt: AnalyticsTunerAgent prompt
  - Input: JSON array of rows

ACTION 3: Storage by Zapier
  - Save "new_hooks_to_test" and "channel_priorities" as config
  - Next Zaps can read these to bias future prompts.

5. Make (Integromat) implementation

5.1 Scenario: SocialBlastAgent

MODULES:
1. Scheduler
   - Run every 2 hours.

2. Tools / AI (OpenAI, etc.)
   - Operation: Create a completion / chat
   - Prompt: SocialBlastAgent prompt
   - Variables: platform, angle

3. JSON Parse
   - Parse AI output into array of posts.

4. Router
   - Route by "platform" field:
     - TikTok route
     - Instagram route
     - Twitter route
     - Facebook route

5. Social modules
   - Each route posts the "text" to the appropriate platform.

6. Airtable / Google Sheets
   - Log each post with timestamp and platform.

5.2 Scenario: DMOutreachAgent

MODULES:
1. Watch events
   - New follower / new member (via webhook or API).

2. AI module
   - Prompt: DMOutreachAgent prompt
   - Inputs: handle, context

3. Platform DM module
   - Send message = AI output.

5.3 Scenario: AnalyticsTunerAgent

MODULES:
1. Scheduler
2. Airtable / Sheets: List records
3. AI module: AnalyticsTunerAgent prompt
4. Data store: Save new hooks and priorities for other scenarios to read.

6. n8n implementation

6.1 Workflow JSON skeleton (SocialBlastAgent)

{
  "nodes": [
    {
      "id": "Cron",
      "name": "Cron",
      "type": "n8n-nodes-base.cron",
      "typeVersion": 1,
      "position": [250, 300],
      "parameters": {
        "triggerTimes": [
          {
            "mode": "everyX",
            "unit": "hours",
            "value": 2
          }
        ]
      }
    },
    {
      "id": "LLM",
      "name": "SocialBlastAgent",
      "type": "n8n-nodes-base.openAi",
      "typeVersion": 1,
      "position": [550, 300],
      "parameters": {
        "operation": "chat",
        "model": "gpt-4.1-mini",
        "messages": [
          {
            "role": "user",
            "content": "USE THE SocialBlastAgent PROMPT HERE WITH platform AND angle VARIABLES"
          }
        ]
      }
    },
    {
      "id": "Split",
      "name": "Split Posts",
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 1,
      "position": [850, 300],
      "parameters": {
        "batchSize": 1
      }
    },
    {
      "id": "Twitter",
      "name": "Post to Twitter",
      "type": "n8n-nodes-base.twitter",
      "typeVersion": 1,
      "position": [1150, 200],
      "parameters": {
        "operation": "updateStatus",
        "text": "={{$json[\"text\"]}}"
      }
    }
    // Add more nodes for IG, TikTok, etc.
  ],
  "connections": {
    "Cron": {
      "main": [
        [
          {
            "node": "SocialBlastAgent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "SocialBlastAgent": {
      "main": [
        [
          {
            "node": "Split Posts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Posts": {
      "main": [
        [
          {
            "node": "Post to Twitter",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Duplicate the posting node for other platforms and route based on the platform field in the JSON.


7. LangChain / LangGraph implementation (Python skeleton)

from langchain.chat_models import ChatOpenAI
from langchain.tools import Tool
from langchain.agents import initialize_agent, AgentType

TRIUMPH_RIPS_REFERRAL_LINK = "https://rips.onelink.me/Wj0m/61kftipd"
TRIUMPH_RIPS_REFERRAL_CODE = "AABVNRZ"

llm = ChatOpenAI(model="gpt-4.1-mini", temperature=0.8)

def post_to_twitter(text: str):
    # TODO: implement Twitter API call
    print("[TWITTER]", text)

def post_to_discord(text: str):
    # TODO: implement Discord API call
    print("[DISCORD]", text)

social_tool = Tool(
    name="social_poster",
    func=lambda text: post_to_twitter(text),
    description="Post a short text update to Twitter."
)

discord_tool = Tool(
    name="discord_poster",
    func=lambda text: post_to_discord(text),
    description="Post a message to Discord."
)

tools = [social_tool, discord_tool]

agent = initialize_agent(
    tools,
    llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)

SOCIAL_BLAST_SYSTEM_PROMPT = """
You are SocialBlastAgent. Use this referral link and code in your posts:
- Link: https://rips.onelink.me/Wj0m/61kftipd
- Code: AABVNRZ
Generate short posts and decide which tool to call based on the channel.
"""

def run_social_agent():
    agent.run(
        f"{SOCIAL_BLAST_SYSTEM_PROMPT}\nGenerate 3 posts for Pokémon fans about live ripping and free packs."
    )

if __name__ == "__main__":
    run_social_agent()

8. Node.js / Express microservices implementation

8.1 Basic Express service with SocialBlastAgent endpoint

// package.json (minimal)
{
  "name": "triumph-rips-swarm",
  "version": "1.0.0",
  "type": "module",
  "dependencies": {
    "express": "^4.19.0",
    "node-fetch": "^3.3.2"
  }
}
// index.mjs
import express from "express";
import fetch from "node-fetch";

const app = express();
app.use(express.json());

const CONFIG = {
  REF_LINK: "https://rips.onelink.me/Wj0m/61kftipd",
  REF_CODE: "AABVNRZ",
  // Support multiple providers - set via environment variables
  API_KEY: process.env.API_KEY || process.env.OPENAI_API_KEY,
  API_PROVIDER: process.env.API_PROVIDER || "huggingface", // HuggingFace, Groq, or OpenAI
  PROVIDERS: {
    huggingface: {
      endpoint: "https://api-inference.huggingface.co/models/mistralai/Mistral-7B-Instruct-v0.2",
      model: "mistralai/Mistral-7B-Instruct-v0.2"
    },
    groq: {
      endpoint: "https://api.groq.com/openai/v1/chat/completions",
      model: "llama-3.1-8b-instant"
    },
    openai: {
      endpoint: "https://api.openai.com/v1/chat/completions",
      model: "gpt-4o-mini"
    }
  }
};

async function callLLM(prompt) {
  const provider = CONFIG.PROVIDERS[CONFIG.API_PROVIDER];
  
  if (CONFIG.API_PROVIDER === 'huggingface') {
    const res = await fetch(provider.endpoint, {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        "Authorization": "Bearer " + CONFIG.API_KEY
      },
      body: JSON.stringify({
        inputs: prompt,
        parameters: { max_new_tokens: 500, temperature: 0.8 }
      })
    });
    const data = await res.json();
    if (data[0]?.generated_text) {
      return data[0].generated_text;
    }
    console.warn('Unexpected HuggingFace response:', data);
    return "Error: Unexpected API response format.";
  } else {
    // Groq and OpenAI use same format
    const res = await fetch(provider.endpoint, {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        "Authorization": "Bearer " + CONFIG.API_KEY
      },
      body: JSON.stringify({
        model: provider.model,
        messages: [{ role: "user", content: prompt }],
        temperature: 0.8
      })
    });
    const data = await res.json();
    return data.choices[0].message.content;
  }
}

const SOCIAL_BLAST_PROMPT = `
[SocialBlastAgent Prompt]
You are SocialBlastAgent. Use:
- Link: ${CONFIG.REF_LINK}
- Code: ${CONFIG.REF_CODE}
Return JSON array of posts with fields: platform, text, angle, tone.
`;

app.post("/agent/social", async (req, res) => {
  const { platform = "twitter", angle = "free pack" } = req.body || {};
  const prompt = `
${SOCIAL_BLAST_PROMPT}

platform: ${platform}
angle: ${angle}
`;
  try {
    const out = await callLLM(prompt);
    res.json({ raw: out });
  } catch (e) {
    console.error(e);
    res.status(500).json({ error: "LLM error" });
  }
});

app.listen(3000, () => {
  console.log("Triumph Rips swarm listening on :3000");
});

9. Python FastAPI implementation

# requirements.txt
fastapi
uvicorn
requests
# main.py
import os
import requests
from fastapi import FastAPI
from pydantic import BaseModel

TRIUMPH_RIPS_REFERRAL_LINK = "https://rips.onelink.me/Wj0m/61kftipd"
TRIUMPH_RIPS_REFERRAL_CODE = "AABVNRZ"

# Support multiple AI providers
API_KEY = os.getenv("API_KEY") or os.getenv("OPENAI_API_KEY")
API_PROVIDER = os.getenv("API_PROVIDER", "huggingface")  # HuggingFace, Groq, or OpenAI

PROVIDERS = {
    "huggingface": {
        "endpoint": "https://api-inference.huggingface.co/models/mistralai/Mistral-7B-Instruct-v0.2",
        "model": "mistralai/Mistral-7B-Instruct-v0.2"
    },
    "groq": {
        "endpoint": "https://api.groq.com/openai/v1/chat/completions",
        "model": "llama-3.1-8b-instant"
    },
    "openai": {
        "endpoint": "https://api.openai.com/v1/chat/completions",
        "model": "gpt-4o-mini"
    }
}

app = FastAPI()

class SocialRequest(BaseModel):
  platform: str = "twitter"
  angle: str = "free pack"

def call_llm(prompt: str) -> str:
  provider = PROVIDERS[API_PROVIDER]
  
  if API_PROVIDER == "huggingface":
    resp = requests.post(
      provider["endpoint"],
      headers={
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json"
      },
      json={
        "inputs": prompt,
        "parameters": {"max_new_tokens": 500, "temperature": 0.8}
      }
    )
    resp.raise_for_status()
    data = resp.json()
    if data and len(data) > 0 and "generated_text" in data[0]:
      return data[0]["generated_text"]
    print(f"Warning: Unexpected HuggingFace response format: {data}")
    return "Error: Unexpected API response format."
  else:
    # Groq and OpenAI use same format
    resp = requests.post(
      provider["endpoint"],
      headers={
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json"
      },
      json={
        "model": provider["model"],
        "messages": [{"role": "user", "content": prompt}],
        "temperature": 0.8
      }
    )
    resp.raise_for_status()
    return resp.json()["choices"][0]["message"]["content"]

SOCIAL_BLAST_PROMPT = f"""
You are SocialBlastAgent.

Use:
- Link: {TRIUMPH_RIPS_REFERRAL_LINK}
- Code: {TRIUMPH_RIPS_REFERRAL_CODE}

Return JSON array of posts with fields: platform, text, angle, tone.
"""

@app.post("/agent/social")
def social_agent(req: SocialRequest):
  prompt = f"""{SOCIAL_BLAST_PROMPT}

platform: {req.platform}
angle: {req.angle}
"""
  out = call_llm(prompt)
  return {"raw": out}

10. Discord bot skeleton (Node.js)

// discord-bot.mjs
import { Client, GatewayIntentBits } from "discord.js";
import fetch from "node-fetch";

const client = new Client({
  intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent]
});

const CONFIG = {
  TOKEN: process.env.DISCORD_BOT_TOKEN,
  OPENAI_API_KEY: process.env.OPENAI_API_KEY,
  REF_LINK: "https://rips.onelink.me/Wj0m/61kftipd",
  REF_CODE: "AABVNRZ"
};

async function callLLM(prompt) {
  const res = await fetch("https://api.openai.com/v1/chat/completions", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "Authorization": "Bearer " + CONFIG.OPENAI_API_KEY
    },
    body: JSON.stringify({
      model: "gpt-4.1-mini",
      messages: [{ role: "user", content: prompt }],
      temperature: 0.8
    })
  });
  const data = await res.json();
  return data.choices[0].message.content;
}

const COMMUNITY_PROMPT = `
You are CommunityHypeAgent for Triumph Rips.
Use:
- Link: ${CONFIG.REF_LINK}
- Code: ${CONFIG.REF_CODE}
When asked for a promo, respond with a friendly message and include the link + code.
`;

client.on("messageCreate", async (msg) => {
  if (msg.author.bot) return;
  if (!msg.content.toLowerCase().includes("triumph") &&
      !msg.content.toLowerCase().includes("pokemon rip")) return;

  const prompt = COMMUNITY_PROMPT + "\nUser message: " + msg.content;
  const reply = await callLLM(prompt);
  msg.reply(reply);
});

client.login(CONFIG.TOKEN);

11. Data model for analytics (Airtable / Sheets / DB)

11.1 Table: posts

posts
- id (string)
- channel (string)        // tiktok, instagram, twitter, discord, reddit
- text (string)
- angle (string)          // free pack, live rips, etc.
- created_at (datetime)
- clicks (number)
- signups (number)
- packs_claimed (number, optional)

11.2 Table: dms

dms
- id
- handle
- platform
- message
- sent_at
- replied (boolean)
- converted (boolean)

11.3 Table: prompt_versions

prompt_versions
- id
- agent_name
- version
- prompt_text
- created_at
- notes

12. Orchestration loop (conceptual)

DAILY:
  - SocialBlastAgent:
      - Generate 10–20 posts across TikTok/IG/Twitter.
      - Log them in "posts" table.
  - ContentRemixAgent:
      - For any new big pulls, generate 3–5 extra posts.

ONGOING:
  - DMOutreachAgent:
      - For each new follower / member, send 1 personalized DM.
  - CommunityHypeAgent:
      - Seed 2–3 new threads.
      - Reply to existing threads.

EVERY 2–3 DAYS:
  - AnalyticsTunerAgent:
      - Read "posts" table.
      - Identify top-performing angles.
      - Update prompt_versions for SocialBlastAgent and DMOutreachAgent.

13. Embedded prompt blocks (for copy-paste)

These are here so you can easily select/copy them from the browser.

13.1 SocialBlastAgent prompt (raw)

ROLE:
You are SocialBlastAgent, an autonomous marketing agent.

GOAL:
Create short, platform-native posts that get Pokémon / TCG fans to try Triumph Rips using:
- Referral link: https://rips.onelink.me/Wj0m/61kftipd
- Referral code: AABVNRZ

CONSTRAINTS:
- 1–2 sentences per post.
- No spammy language, no overpromising.
- Focus on fun, ripping together, and the free pack.
- Vary tone: hype, chill, curious, “just tried this”.
- Include 2–4 relevant hashtags when appropriate.
- Always include the link and code somewhere in the post.

INPUT:
- platform: one of ["tiktok", "instagram", "twitter", "youtube_short", "facebook"]
- angle: short description of the angle (e.g., "free pack", "live rips", "big pull", "ripping together")

OUTPUT:
Return a JSON array of 5 posts, each with:
- platform
- text
- angle
- tone

13.2 DMOutreachAgent prompt (raw)

ROLE:
You are DMOutreachAgent, an autonomous outreach agent.

GOAL:
Write short, casual DMs to people who like Pokémon / TCG / live breaks, inviting them to try Triumph Rips.

MUST INCLUDE:
- Referral link: https://rips.onelink.me/Wj0m/61kftipd
- Referral code: AABVNRZ
- Mention that they get a free pack and that we can rip together.

CONSTRAINTS:
- 1–3 sentences.
- Sound like a real friend, not a bot.
- No pressure, no spammy wording.
- Adapt slightly to where we know them from.

INPUT:
- handle: the username or display name
- context: where we know them from (e.g., "Discord trade server", "IG card page", "Twitter TCG thread")

OUTPUT:
Return a JSON object:
{
  "handle": "...",
  "message": "..."
}

13.3 CommunityHypeAgent prompt (raw)

ROLE:
You are CommunityHypeAgent, a conversation-starter agent.

GOAL:
Create posts and replies for Discord/Reddit/FB groups about Pokémon and card ripping, and naturally introduce Triumph Rips.

BEHAVIOR:
- Start with a genuine question or experience (e.g., “Anyone tried live ripping apps?”).
- Only drop the link after 1–2 back-and-forths or when it fits naturally.
- Never copy-paste the same text twice.
- Be respectful of community rules.

WHEN SHARING:
Use this exact block (you can wrap it in your own sentence):
"Use my link: https://rips.onelink.me/Wj0m/61kftipd and code AABVNRZ for a free pack so we can rip together."

INPUT:
- community_type: "discord" | "reddit" | "facebook_group"
- topic: short description of the topic (e.g., "live ripping apps", "best pulls", "mobile ripping")

OUTPUT:
Return JSON:
{
  "thread_starter": "text for initial post",
  "followup_replies": ["reply 1", "reply 2", "reply 3 (with link if appropriate)"]
}

13.4 ContentRemixAgent prompt (raw)

ROLE:
You are ContentRemixAgent, a content repurposing agent.

GOAL:
Turn raw proof (screenshots, big pulls, funny moments) into social posts that subtly plug Triumph Rips.

MUST INCLUDE:
- Referral link: https://rips.onelink.me/Wj0m/61kftipd
- Referral code: AABVNRZ
- Mention that the pack can be free.

CONSTRAINTS:
- Do not start the caption with the link.
- Lead with the moment, then the plug.

INPUT:
- description: text description of the pull or moment (e.g., "hit a full art Charizard from a free pack")

OUTPUT:
Return JSON:
{
  "tiktok_caption": "...",
  "instagram_caption": "...",
  "twitter_post": "...",
  "discord_message": "...",
  "reddit_comment": "..."
}

13.5 AnalyticsTunerAgent prompt (raw)

ROLE:
You are AnalyticsTunerAgent, a performance optimization agent.

GOAL:
Look at recent performance data and suggest 3 new message angles and hooks to test.

INPUT:
- A JSON array of posts with fields:
  - channel
  - text
  - clicks
  - signups
  - date

OUTPUT:
Return JSON:
{
  "winning_patterns": [
    "pattern 1",
    "pattern 2",
    "pattern 3"
  ],
  "new_hooks_to_test": [
    "hook 1",
    "hook 2",
    "hook 3"
  ],
  "channel_priorities": [
    "tiktok",
    "instagram",
    "discord"
  ]
}

14. How to use this .html in practice