Influencer Campaign Planner
Run ID: 69c94ab4fee1f7eb4a8103122026-03-29Marketing
PantheraHive BOS
BOS Dashboard

Plan an influencer marketing campaign with ideal influencer profiles, outreach templates, contract terms, content guidelines, and ROI tracking framework.

Step 1 of 4: Influencer Campaign Research - "Test Run"

This document outlines the comprehensive research phase for your "Test run for influencer_campaign." As this is a test run, the focus is on establishing a robust research methodology and identifying general best practices and example profiles that would be refined for a specific product or service. This foundational research is critical for identifying ideal influencer profiles and setting the stage for successful outreach and campaign execution.


1. Campaign Objectives & Target Audience Definition (Initial Phase)

Even for a test run, defining preliminary objectives and understanding the hypothetical target audience is crucial to guide research.

1.1. Hypothetical Campaign Objectives for a Test Run:

For a "test run," we'll focus on objectives that allow us to gather insights into the influencer landscape and engagement potential.

  • Brand Awareness: Increase visibility of a (hypothetical) new product/service within a specific niche.
  • Audience Engagement: Drive interaction (likes, comments, shares) around campaign content.
  • Content Generation: Secure high-quality, authentic user-generated content (UGC) style assets.
  • Influencer Identification: Validate the process of identifying and vetting suitable influencers.

1.2. Hypothetical Target Audience Profile:

To provide concrete examples for research, we'll assume a broad but common target audience. In a real campaign, this would be highly specific to your product/service.

  • Demographics:

* Age: 25-45 years old

* Gender: All genders

* Location: Primarily North America (USA, Canada), with secondary focus on UK/Australia.

* Income: Mid to upper-mid household income

* Education: College-educated or higher

  • Psychographics:

* Interests: Technology, sustainable living, wellness, home decor, travel, personal development.

* Values: Authenticity, quality, innovation, community, social responsibility.

* Lifestyle: Active, health-conscious, early adopters of new trends, value experiences over possessions.

* Pain Points: Time-poor, seeking convenience, looking for trustworthy recommendations, overwhelmed by choices.

  • Online Behavior:

* Platforms: Highly active on Instagram, TikTok, YouTube, and Pinterest. Regularly consume blog content and podcasts.

* Content Consumption: Prefer short-form video for discovery, long-form video/blogs for deeper dives, visually appealing content.

* Purchase Drivers: Influencer recommendations, peer reviews, brand transparency, value for money.


2. Ideal Influencer Profile Research & Selection Criteria

Based on the hypothetical objectives and target audience, we will research influencers matching the following criteria:

2.1. Key Selection Criteria:

  • Niche & Content Alignment:

* Relevance: Influencer's content should naturally align with the hypothetical brand's values and product category (e.g., tech reviewers for a gadget, wellness gurus for a health product).

* Authenticity: Content feels genuine and not overly commercialized.

* Creativity: Ability to produce high-quality, engaging, and original content.

  • Audience Demographics & Psychographics:

* Match: A significant portion of the influencer's audience must match our target audience profile.

* Trust: The influencer has a strong, trusting relationship with their followers.

  • Engagement Rate:

* Definition: The percentage of an influencer's followers who interact with their content (likes, comments, shares, saves).

* Benchmarks:

* Nano-influencers (1k-10k followers): 4-10%

* Micro-influencers (10k-100k followers): 2-5%

* Mid-tier influencers (100k-500k followers): 1.5-3%

* Macro-influencers (500k-1M+ followers): 0.5-2%

Note: These are general benchmarks; actual rates vary by platform and niche.*

  • Brand Safety & Reputation:

* Values: No history of controversial content, negative brand associations, or unethical practices.

* Professionalism: Demonstrates reliability and clear communication in past collaborations (where discoverable).

  • Content Quality:

* Visuals: High-resolution images and videos, consistent aesthetic.

* Audio (Video): Clear sound, professional editing.

* Messaging: Clear, concise, and persuasive communication style.

  • Past Collaborations:

* Review previous sponsored posts to assess integration quality, disclosure practices (FTC compliance), and audience reception.

* Check for over-saturation with sponsored content, which can dilute authenticity.

2.2. Influencer Tiers to Research:

For a comprehensive test run, we will consider a mix of tiers to understand their potential impact and cost-effectiveness.

  • Nano-Influencers (1k - 10k followers):

* Pros: High engagement, strong niche communities, highly authentic, cost-effective.

* Cons: Limited reach per individual, requires managing a larger number of creators for significant impact.

* Focus: Driving authentic reviews, hyper-targeted reach, community building.

  • Micro-Influencers (10k - 100k followers):

* Pros: Excellent balance of reach and engagement, often seen as industry experts, good value.

* Cons: Still requires managing multiple creators.

* Focus: Product launches, driving traffic, building brand credibility.

  • Mid-Tier Influencers (100k - 500k followers):

* Pros: Broader reach than micro, often professional content creators, established influence.

* Cons: Higher costs, engagement can start to dip compared to smaller tiers.

* Focus: Significant brand awareness, driving sales, high-quality content assets.

2.3. Key Platforms for Research:

  • Instagram: Strong for visual content, lifestyle, fashion, beauty, home decor, travel. Key features: Stories, Reels, Feed posts, Guides.
  • TikTok: Dominant for short-form video, trends, challenges, product discovery, Gen Z/Millennial audience.
  • YouTube: Ideal for long-form reviews, tutorials, unboxings, vlogs, gaming, tech.
  • Pinterest: Visual discovery, DIY, recipes, home decor, fashion, sustainable living. Strong for product inspiration.
  • Blogs/Websites: In-depth reviews, evergreen content, SEO value.
  • Facebook: Strong for community groups, events, older demographics.
  • X (formerly Twitter): Real-time engagement, news, short-form text, tech.

3. Research Methodology & Tools

Our research process will combine manual exploration with specialized tools to ensure thoroughness and data accuracy.

3.1. Manual Exploration:

  • Hashtag & Keyword Searches: Identifying relevant hashtags (e.g., #sustainableliving, #techgadgets, #wellnessjourney) and keywords on target platforms.
  • Competitor Analysis:

* Identification: List direct and indirect competitors in the hypothetical product space.

* Analysis: Examine their social media channels for past influencer collaborations. Identify which influencers they've worked with, the type of content created, and the perceived success (comments, engagement).

* Learning: Understand what strategies worked well, what didn't, and identify potential influencers who align with our brand but haven't worked with competitors.

  • Audience-First Approach: Search for content our target audience is already engaging with, then identify the creators of that content.
  • "Look-Alike" Influencers: Once a few strong candidates are identified, explore their followers and accounts they follow for similar profiles.

3.2. Influencer Marketing Platforms & Tools (Examples):

These tools provide advanced filtering, analytics, and streamlined identification.

  • Discovery Platforms:

* Upfluence / Grin / CreatorIQ / HypeAuditor: These platforms allow searching by keywords, audience demographics, engagement rates, location, and more. They provide detailed analytics on audience authenticity, sentiment, and past brand collaborations.

* Key Features Utilized:

* Audience Demographics Match: Filter influencers whose audience aligns with our hypothetical target.

* Engagement Rate Analysis: Quickly assess average engagement across various content types.

* Fraud Detection: Identify suspicious follower activity or bot accounts.

* Content Analysis: Review past sponsored posts and organic content.

  • Social Listening Tools (e.g., Brandwatch, Sprout Social):

* Monitor conversations around relevant keywords and topics to identify emerging voices or highly engaged communities that might host potential influencers.

* Track brand mentions and sentiment to identify organic advocates.

  • Native Platform Analytics (for existing brand channels):

* If the hypothetical brand already has a social presence, analyze its own followers and who they engage with to find potential micro-influencers already interested in the brand.


4. Initial Findings & Considerations for "Test Run"

Based on the outlined methodology, the initial findings for a "test run" would involve identifying categories of influencers and general observations.

4.1. Hypothetical Influencer Niche Identification:

  • Lifestyle Creators: Influencers focusing on daily routines, home life, sustainable choices, and general well-being.
  • Specialized Reviewers: Creators dedicated to reviewing specific product categories (e.g., tech gadgets, kitchen appliances, eco-friendly products).
  • "How-To" & Tutorial Channels: Influencers who create educational content, demonstrating product use or DIY projects.
  • Community Builders: Influencers with highly engaged, niche communities focused on specific interests (e.g., specific hobbies, local communities).

4.2. Key Metrics & Data Points to Prioritize During Research:

  • Audience Age & Gender Breakdown: Ensure a strong match with our 25-45 age range and diverse gender representation.
  • Audience Location: Prioritize influencers with a significant audience in North America, UK, and Australia.
  • Average Engagement Rate: Focus on influencers exceeding platform-specific benchmarks for their tier.
  • Follower Authenticity Score: Aim for 80%+ real followers (as indicated by tools like HypeAuditor).
  • Content Quality Assessment: Manual review of recent posts for visual appeal, clarity, and brand-appropriate tone.
  • Disclosure Practices: Observe if influencers consistently disclose sponsored content as per FTC guidelines.

4.3. Initial Risk Assessment Considerations:

  • Brand Reputation Risk: Avoid influencers with a history of controversial statements or actions.
  • FTC Compliance Risk: Ensure influencers are aware of and willing to adhere to disclosure requirements for sponsored content.
  • Authenticity Risk: Be wary of influencers with unusually high follower counts but low engagement, or generic comments (potential bots/fake engagement).

5. Deliverables from this Research Step

Upon completion of this "collab → research" phase, the following will be prepared:

  • Detailed Research Report: A comprehensive document summarizing the research process, key findings, and recommended strategy.
  • Shortlist of Potential Influencers: A curated list of 10-20 influencers (with diverse tiers where applicable) who meet the initial selection criteria. Each profile will include:

* Influencer Handle/Name

* Primary Platform(s)

* Follower Count

* Estimated Average Engagement Rate

* Key Audience Demographics (Age, Location, Gender)

* Niche/Content Focus

* Brief Rationale for Selection

* Link to Profile

  • Competitor Influencer Analysis Summary: Insights gained from analyzing competitor campaigns.
  • Preliminary Content Theme Ideas: Initial thoughts on potential content angles based on influencer styles and audience interests.

This detailed research forms the bedrock of a successful influencer campaign, ensuring that subsequent steps, such as outreach and contract negotiation, are built upon a solid foundation of data-driven insights.

collab Output

This output represents the comprehensive content generation for your "Influencer Campaign Planner," focusing on the material that will be shared with potential influencers, the content they are expected to create, and the foundational elements of your brand's content guidelines.


Influencer Campaign Content Brief: "Ignite Your [Solution/Benefit] with Meridian Solutions"

This brief provides a comprehensive overview for our selected influencers, guiding them in creating authentic and impactful content for the "[Test run for influencer_campaign]" campaign.

1. Campaign Title & Core Message

  • Campaign Title: "Ignite Your [Solution/Benefit] with Meridian Solutions" (e.g., "Ignite Your Creativity with Meridian's Creative Suite" or "Ignite Your Wellness Journey with Meridian's Wellness Platform")
  • Core Message: "Meridian Solutions empowers you to [achieve a specific goal/experience a unique benefit] by offering [key differentiator/product feature]." We want to highlight the transformative power of our product/service in everyday life.

2. Brand & Campaign Overview

  • About Meridian Solutions: We are [briefly describe your brand, mission, and values]. Our vision is to [state brand's long-term impact].
  • Campaign Objective: To increase brand awareness, drive engagement, and generate qualified leads/sales for [specific product/service] by showcasing its [key benefits] through authentic influencer experiences. We aim to reach [target demographic] and inspire them to [desired action].
  • Target Audience: [Describe your ideal customer: demographics, interests, pain points, aspirations]. Influencer content should resonate deeply with this group.

3. Key Deliverables & Content Requirements

Influencers are expected to create the following content pieces, adhering to the specified platforms and formats:

  • Instagram Reel (1x):

* Duration: 30-60 seconds

* Focus: Visually compelling content showcasing the product/service in action, highlighting its [specific feature/benefit]. Must be engaging, authentic, and include trending audio if appropriate.

* Call to Action: Direct viewers to "Link in Bio" to learn more or shop.

* Mandatory Elements: Tag @YourBrandOfficial, use #YourBrandIgnites, #YourBrandCampaign, and #Ad or #Sponsored in the caption and/or visually.

  • Instagram Stories (2-3x):

* Duration: 15-second segments each, posted within a 24-hour period.

* Focus: Behind-the-scenes, personal experience, Q&A, or quick tips related to the product/service. Can include polls, quizzes, or swipe-up links.

* Call to Action: Utilize "Swipe Up" or "Link Sticker" to direct to [specific landing page/product page].

* Mandatory Elements: Tag @YourBrandOfficial, use relevant hashtags, and clearly disclose partnership (e.g., "Paid partnership with @YourBrandOfficial").

  • Static Instagram Post (1x - Optional, based on agreement):

* Format: High-quality image or carousel post.

* Focus: A visually appealing flat lay or lifestyle shot featuring the product, accompanied by a thoughtful caption sharing personal experience and key benefits.

* Call to Action: Encourage comments, questions, and direct followers to "Link in Bio."

* Mandatory Elements: Tag @YourBrandOfficial, use #YourBrandIgnites, #YourBrandCampaign, and #Ad or #Sponsored.

  • TikTok Video (1x - Optional, based on agreement):

* Duration: 15-45 seconds

* Focus: Creative, short-form video engaging with a current trend or challenge, showcasing the product/service in a fun and authentic way.

* Call to Action: Direct to link in bio or prompt engagement in comments.

* Mandatory Elements: Tag @YourBrandOfficial, use #YourBrandIgnites, #YourBrandCampaign, and #Ad or #Sponsored.

4. Content Themes & Creative Freedom

  • Suggested Themes:

* Transformation: Before & after, problem-solution, achieving a goal.

* Lifestyle Integration: How the product seamlessly fits into daily routines.

* Authentic Review/Experience: Genuine feedback, personal stories, how it makes you feel.

* Tips & Tricks: Creative ways to use the product/service.

  • Creative Freedom: We value your unique voice and creativity! While adhering to the mandatory elements and core message, we encourage you to integrate the product/service into your existing content style in a way that feels natural and authentic to your audience. We're looking for genuine excitement and honest representation.

5. Mandatory Elements & Disclosure

  • Brand Mentions: Always tag @YourBrandOfficial on Instagram and TikTok.
  • Hashtags: Use #YourBrandIgnites, #YourBrandCampaign, and #YourBrand in all relevant captions.
  • Disclosure: Clear and conspicuous disclosure of the paid partnership is mandatory for every piece of content.

* Instagram: Use the "Paid partnership with @YourBrandOfficial" tag. Additionally, include #Ad or #Sponsored visibly in the caption and/or orally in videos.

* TikTok: Use the "Branded Content" toggle and include #Ad or #Sponsored in the caption.

* YouTube: Use the "Paid Promotion" disclosure and mention the partnership verbally at the beginning of the video.

  • Call to Action: Include a clear CTA in all content, directing followers to the designated link in bio or swipe-up.

6. Content Submission & Approval Process

  • Draft Submission: All content drafts (videos, images, captions) must be submitted for review at least 5 business days before the agreed-upon go-live date.
  • Submission Method: Please submit drafts via [preferred platform, e.g., Google Drive link, email to your POC].
  • Review & Feedback: Our team will review the content within 2-3 business days and provide feedback or approval. One round of minor revisions is typically included.
  • Go-Live: Content should only be published after final approval from Meridian Solutions.

7. Important Dates

  • Content Draft Submission Deadline: [Date]
  • Final Approval Deadline: [Date]
  • Go-Live Window: [Start Date] - [End Date]
  • Reporting Due: [Date] (e.g., 7-10 days after go-live)

Influencer Outreach Templates

These templates are designed for initial contact and follow-up with potential influencers. Personalize each message for maximum impact.

1. Initial Contact Email / DM Template

Subject: Collaboration Opportunity: Meridian Solutions x [Influencer's Name] - "[Test run for influencer_campaign]"

Hi [Influencer's Name],

My name is Alexandra Chen and I'm the Director of Operations at Meridian Solutions. We've been following your incredible content on [Platform, e.g., Instagram/TikTok] for a while now, and we're consistently impressed by your [specific quality, e.g., authentic storytelling, unique aesthetic, engaging community].

We're currently planning an exciting campaign called "[Test run for influencer_campaign]" to launch our new [product/service], and we immediately thought of you. Your audience's interest in [relevant niche/topic, e.g., sustainable living, fitness, creative arts] aligns perfectly with our mission to [briefly state brand mission/value proposition].

We believe your unique voice would be a fantastic fit to help us showcase how Meridian Analytics Pro can [key benefit for their audience]. We're looking for partners to create engaging content, including [mention 1-2 key deliverables, e.g., an Instagram Reel and Stories], sharing their genuine experience with our [product/service].

Would you be open to a brief chat to discuss this potential collaboration further? I'd love to share more details about the campaign and how we could work together.

Looking forward to hearing from you!

Best regards,

Alexandra Chen

Director of Operations

Meridian Solutions

www.meridiansolutions.com

[Link to Your Brand's Social Media]


2. Follow-Up Email Template

Subject: Following Up: Collaboration Opportunity with Meridian Solutions

Hi [Influencer's Name],

Hope you're having a great week!

I'm just following up on my previous email regarding a potential collaboration with Meridian Solutions for our "[Test run for influencer_campaign]" campaign. We're still very keen on the possibility of partnering with you.

We're excited about how your [specific content style/audience] could authentically highlight Meridian Analytics Pro and its benefits to your followers.

If you're interested, please let me know a good time next week for a quick 15-minute call, or feel free to reply with any initial questions you might have.

Thanks again for your time and consideration!

Best,

Alexandra Chen

Meridian Solutions


3. Campaign Offer & Next Steps Template

Subject: Meridian Solutions x [Influencer's Name] - Official Campaign Offer for "[Test run for influencer_campaign]"

Hi [Influencer's Name],

Thank you for your interest in partnering with Meridian Solutions for our "[Test run for influencer_campaign]" campaign. We're thrilled at the prospect of collaborating with you!

Based on our discussions and your impressive portfolio, we'd like to formally offer you the following for this campaign:

  • Deliverables:

* 1x Instagram Reel (30-60 seconds)

* 2-3x Instagram Stories (15-second segments)

* [Optional: 1x Static Instagram Post / 1x TikTok Video]

  • Compensation: [Specify compensation, e.g., flat fee of $X, product package value $Y + affiliate commission Z%, etc.]
  • Campaign Period: Content to go live between [Start Date] and [End Date].
  • Product/Service Provided: [Details of product/service to be sent, if applicable].

We've attached a detailed Campaign Content Brief (also available in the previous section of this document) outlining the campaign objectives, content themes, mandatory elements (hashtags, disclosures), and timeline.

If these terms align with your expectations, please let us know. We'll then proceed with a formal agreement and coordinate sending you the product/briefing call.

We're truly excited about the potential to create something amazing together!

Best regards,

Alexandra Chen

Director of Operations

Meridian Solutions


Content Style & Brand Guidelines for Influencers

These guidelines ensure consistency and brand integrity while allowing for creative expression.

1. Visual & Aesthetic Guidance

  • High Quality: All content must be high-resolution, well-lit, and professionally presented. Avoid blurry, pixelated, or poorly composed shots.
  • Authenticity: Content should feel genuine and unforced. Avoid overly staged or overly filtered aesthetics that don't align with your natural style.
  • Brand Color Palette (Optional but Recommended): While not mandatory, incorporating soft touches of deep navy, warm gold, and clean white can subtly reinforce brand identity.
  • Product Placement: Ensure the product is clearly visible, in focus, and presented attractively. Show it being used naturally within your environment.
  • Backgrounds: Opt for clean, uncluttered, and aesthetically pleasing backgrounds that complement the product and your personal brand.
  • Diversity & Inclusivity: If applicable, aim for diverse representation in your content, reflecting the broad audience of Meridian Solutions.

2. Tone of Voice Guidelines

  • Authentic & Relatable: Speak in your natural voice, as if you're talking to a friend.
  • Positive & Uplifting: Focus on the positive experiences and benefits of using Meridian Analytics Pro.
  • Informative (but not overly salesy): Share genuine insights and benefits without sounding like a direct advertisement.
  • Enthusiastic & Engaging: Convey excitement and passion for the product/service.
  • Professional: Maintain a respectful and appropriate tone, avoiding offensive language or controversial topics.

3. Key Messaging & Talking Points

  • Focus on Benefits, Not Just Features: Instead of just saying "[Product] has X feature," explain "With X feature, you can [achieve Y benefit], making your life Z."
  • Personal Experience: Share your unique journey or experience with the product. How has it helped you? What problem did it solve?
  • Problem-Solution Narrative: Identify a common pain point of your audience and demonstrate how Meridian Analytics Pro effectively addresses it.
  • Call to Action: Always include a clear call to action, encouraging engagement (comments, questions) and directing traffic to the specified link (link in bio, swipe up).
  • Key Messages to Reinforce:

* [Key Message 1: e.g., "Meridian Solutions makes [complex task] easy."]

* [Key Message 2: e.g., "Experience the difference with Meridian Solutions."]

* [Key Message 3: e.g., "Join the Meridian Solutions community and [achieve a shared goal]."]

4. Prohibited Content Examples

To maintain brand safety and integrity, please avoid the following in all campaign content:

  • Negative or disparaging remarks about competitors.
  • Content that is explicit, offensive, discriminatory, or promotes illegal activities.
  • Misleading claims or exaggerated benefits about Meridian Analytics Pro.
  • Content that is politically charged
collab Output

This deliverable provides a foundational Python code framework designed to help manage key aspects of an influencer marketing campaign. It's structured to allow for the definition of influencers, campaign parameters, and a basic mechanism for tracking costs and calculating Return on Investment (ROI). This code serves as a blueprint that can be extended and integrated into more complex systems for full-scale campaign management.


1. Introduction to the Code Framework

This code is a "test run" for an influencer campaign planner, focusing on core data structures and logic. It provides classes to represent Influencer profiles and Campaign details, along with a function to calculate ROI. The aim is to give you a clear, object-oriented approach to managing campaign data programmatically.

The framework covers:

  • Influencer Profile Management: Storing and updating details for individual influencers.
  • Campaign Definition: Setting up campaign goals, budget, content guidelines, and associated influencers.
  • Cost & Revenue Tracking: Basic mechanisms to record expenses and simulated revenue for ROI calculation.
  • ROI Calculation: A clear formula to determine campaign effectiveness.

2. Core Components of the Code

The solution is built around two primary classes and a helper function:

2.1. Influencer Class

This class represents an individual influencer profile. It stores essential details such as their name, social media handles, niche, follower count, engagement rate, contact information, and their current status within a campaign (e.g., 'pending_outreach', 'contracted').

2.2. Campaign Class

This class encapsulates all information related to a specific influencer marketing campaign. It includes campaign goals, budget, start/end dates, content guidelines, and a list of Influencer objects participating in the campaign. It also manages campaign costs and provides a mechanism to calculate ROI.

2.3. calculate_roi Function

A standalone helper function to compute the Return on Investment based on total revenue generated and total campaign costs.

3. Code Implementation

Below is the Python code, complete with comments explaining each section and its purpose.


import datetime

class Influencer:
    """
    Represents an individual influencer profile.
    Stores key information and manages their status within a campaign.
    """
    def __init__(self, influencer_id: str, name: str, platform: str, handle: str,
                 niche: str, followers: int, engagement_rate: float,
                 contact_email: str, status: str = "pending_outreach"):
        """
        Initializes an Influencer object.

        Args:
            influencer_id (str): Unique identifier for the influencer.
            name (str): Full name or common name of the influencer.
            platform (str): Primary social media platform (e.g., "Instagram", "TikTok", "YouTube").
            handle (str): Influencer's social media handle/username.
            niche (str): Influencer's content niche (e.g., "Beauty", "Gaming", "Travel").
            followers (int): Number of followers/subscribers.
            engagement_rate (float): Average engagement rate (e.g., 0.05 for 5%).
            contact_email (str): Primary email for contact.
            status (str): Current status in relation to a campaign
                          (e.g., 'pending_outreach', 'contacted', 'negotiating', 'contracted', 'declined').
        """
        self.influencer_id = influencer_id
        self.name = name
        self.platform = platform
        self.handle = handle
        self.niche = niche
        self.followers = followers
        self.engagement_rate = engagement_rate
        self.contact_email = contact_email
        self.status = status
        self.notes = [] # To store specific notes about interactions

    def update_status(self, new_status: str, note: str = ""):
        """
        Updates the influencer's status and adds a note.

        Args:
            new_status (str): The new status to set.
            note (str): An optional note explaining the status change.
        """
        valid_statuses = ['pending_outreach', 'contacted', 'negotiating',
                          'contracted', 'content_created', 'content_posted',
                          'paid', 'declined', 'archived']
        if new_status not in valid_statuses:
            print(f"Warning: '{new_status}' is not a standard status. Please choose from {valid_statuses}.")
        self.status = new_status
        if note:
            self.notes.append(f"{datetime.date.today()}: Status changed to '{new_status}' - {note}")
        else:
            self.notes.append(f"{datetime.date.today()}: Status changed to '{new_status}'")
        print(f"Influencer {self.name}'s status updated to: {self.status}")

    def display_info(self):
        """Prints a summary of the influencer's profile."""
        print(f"\n--- Influencer Profile: {self.name} ({self.handle}) ---")
        print(f"  ID: {self.influencer_id}")
        print(f"  Platform: {self.platform} | Niche: {self.niche}")
        print(f"  Followers: {self.followers:,} | Engagement Rate: {self.engagement_rate:.2%}")
        print(f"  Contact: {self.contact_email}")
        print(f"  Current Status: {self.status}")
        if self.notes:
            print("  Notes:")
            for note in self.notes:
                print(f"    - {note}")
        print("-------------------------------------------------")


class Campaign:
    """
    Represents a single influencer marketing campaign.
    Manages campaign details, associated influencers, and financial tracking.
    """
    def __init__(self, campaign_id: str, name: str, description: str,
                 start_date: str, end_date: str, budget: float,
                 goals: list, target_audience: str,
                 content_guidelines: str = "Specific guidelines will be provided per content piece."):
        """
        Initializes a Campaign object.

        Args:
            campaign_id (str): Unique identifier for the campaign.
            name (str): Name of the campaign.
            description (str): Detailed description of the campaign.
            start_date (str): Campaign start date (YYYY-MM-DD).
            end_date (str): Campaign end date (YYYY-MM-DD).
            budget (float): Total allocated budget for the campaign.
            goals (list): List of campaign goals (e.g., ["Brand Awareness", "Lead Generation"]).
            target_audience (str): Description of the target audience.
            content_guidelines (str): General content guidelines for influencers.
        """
        self.campaign_id = campaign_id
        self.name = name
        self.description = description
        self.start_date = datetime.datetime.strptime(start_date, '%Y-%m-%d').date()
        self.end_date = datetime.datetime.strptime(end_date, '%Y-%m-%d').date()
        self.budget = budget
        self.goals = goals
        self.target_audience = target_audience
        self.content_guidelines = content_guidelines
        self.influencers = {}  # Stores Influencer objects by their ID
        self.costs_incurred = {"influencer_fees": 0.0, "ad_spend": 0.0, "product_costs": 0.0, "other_expenses": 0.0}
        self.estimated_revenue = 0.0
        self.metrics_tracked = {
            "reach": 0,
            "impressions": 0,
            "engagements": 0,
            "clicks": 0,
            "conversions": 0
        }
        self.outreach_templates = {
            "initial": "Hi {influencer_name}, we love your content...",
            "follow_up": "Just following up on our previous message...",
            "contract_offer": "We'd like to offer you a collaboration for our {campaign_name} campaign..."
        }
        self.contract_terms = "Standard terms: Payment upon content approval, usage rights for 1 year, exclusivity period 30 days."

    def add_influencer(self, influencer: Influencer):
        """Adds an Influencer object to the campaign."""
        if influencer.influencer_id in self.influencers:
            print(f"Warning: Influencer {influencer.name} (ID: {influencer.influencer_id}) already added to this campaign.")
        else:
            self.influencers[influencer.influencer_id] = influencer
            print(f"Influencer {influencer.name} added to campaign {self.name}.")

    def remove_influencer(self, influencer_id: str):
        """Removes an influencer from the campaign by their ID."""
        if influencer_id in self.influencers:
            influencer_name = self.influencers[influencer_id].name
            del self.influencers[influencer_id]
            print(f"Influencer {influencer_name} removed from campaign {self.name}.")
        else:
            print(f"Error: Influencer with ID {influencer_id} not found in campaign {self.name}.")

    def track_cost(self, category: str, amount: float):
        """
        Tracks a cost incurred for the campaign.

        Args:
            category (str): The cost category (e.g., "influencer_fees", "ad_spend", "product_costs", "other_expenses").
            amount (float): The amount of cost incurred.
        """
        if category in self.costs_incurred:
            self.costs_incurred[category] += amount
            print(f"Added {amount:.2f} to {category}. Total for {category}: {self.costs_incurred[category]:.2f}")
        else:
            self.costs_incurred[category] = amount
            print(f"Added new cost category '{category}' with amount {amount:.2f}.")

    def update_metrics(self, metric: str, value: int):
        """
        Updates a specific performance metric for the campaign.

        Args:
            metric (str): The metric to update (e.g., "reach", "engagements").
            value (int): The value to add to the metric.
        """
        if metric in self.metrics_tracked:
            self.metrics_tracked[metric] += value
            print(f"Updated {metric} by {value}. Current total {metric}: {self.metrics_tracked[metric]:,}")
        else:
            self.metrics_tracked[metric] = value
            print(f"Added new metric '{metric}' with value {value:,}.")

    def set_estimated_revenue(self, revenue: float):
        """Sets the estimated revenue generated by the campaign."""
        self.estimated_revenue = revenue
        print(f"Estimated revenue for campaign {self.name} set to: {self.estimated_revenue:.2f}")

    def get_total_cost(self) -> float:
        """Calculates the total cost incurred for the campaign."""

collab Output

Influencer Campaign Content Generation: "EcoGlow Radiance Challenge" (Test Run)

This document outlines the comprehensive content strategy and examples for your influencer marketing campaign's "Test Run." We've designed engaging, actionable content ready for deployment across various platforms, focusing on your brand's unique selling propositions and target audience.


1. Campaign Overview & Theme: "EcoGlow Radiance Challenge"

For this test run, we're launching the "EcoGlow Radiance Challenge," a campaign designed to highlight the transformative power of sustainable, natural skincare. The theme emphasizes inner and outer radiance achieved through conscious choices, aligning with EcoGlow's commitment to nature and well-being.

Core Message: Discover your natural glow with EcoGlow Skincare, where nature meets science for radiant, healthy skin and a healthier planet.

Hashtags:

  • #EcoGlowRadiance
  • #NaturalSkincareJourney
  • #SustainableBeauty
  • #GlowWithEcoGlow
  • #[YourBrandName]Partner (for influencers)

2. Key Messaging Pillars for Influencers

Influencers should weave these core messages into their content to ensure consistency and reinforce brand values:

  • Natural Ingredients & Efficacy: Emphasize the power of nature-derived ingredients and visible results (e.g., "My skin has never felt so nourished and vibrant thanks to EcoGlow's [Product Name]!").
  • Sustainability & Ethics: Highlight EcoGlow's commitment to the environment (e.g., "Love that EcoGlow's packaging is [feature] and they're cruelty-free!").
  • Holistic Wellness: Connect skincare to overall well-being and self-care routines (e.g., "My evening routine feels complete with EcoGlow – it's more than just skincare, it's self-love.").
  • Accessibility & Inclusivity: Position EcoGlow as a brand for everyone seeking natural radiance (e.g., "No matter your skin type, EcoGlow has something for you!").
  • Authentic Experience: Encourage personal testimonials and genuine enthusiasm for the products.

3. Influencer Content Examples & Guidelines

Below are detailed content examples tailored for different platforms, along with specific instructions for influencers.

3.1. Instagram Post (Feed & Carousel)

Concept: A visually appealing static image or a carousel showcasing the product, texture, application, and a "before/after" or "in-use" shot.

Visuals:

  • High-quality, bright, natural lighting.
  • Product shots (individual and group).
  • Influencer applying the product (e.g., serum drop, cream application).
  • Lifestyle shot (product on a vanity, next to a plant, during a self-care moment).
  • Carousel Idea: 1st image: Influencer glowing; 2nd: Product flat lay; 3rd: Texture shot; 4th: Key ingredients graphic.

Caption Template:

(Headline Hook)

"My Secret to That Natural Glow? It's All About EcoGlow!"

(Body - Personal Story/Review)

"You know I'm always on the hunt for skincare that's not only effective but also kind to the planet. I've been using the @EcoGlowSkincare [Specific Product Name, e.g., 'Radiance Renewal Serum'] for the past few weeks, and honestly, my skin has never felt so hydrated and looked so vibrant! ✨

What truly sets EcoGlow apart is their commitment to natural, sustainably sourced ingredients. My sensitive skin loves how gentle yet powerful this serum is – I've noticed a significant improvement in [mention specific benefit, e.g., 'skin texture and a reduction in dullness']. Plus, knowing their packaging is [mention feature, e.g., 'recyclable'] makes me feel even better about my beauty choices.

(Call to Action)

Ready to discover your own natural radiance? Head over to [Link in Bio - or specific campaign landing page] and use my code [INFLUENCER_CODE] for 15% off your first EcoGlow order! Let me know in the comments if you've tried EcoGlow or if you have any questions! 👇

(Hashtags & Disclosure)

#EcoGlowRadiance #NaturalSkincareJourney #SustainableBeauty #GlowWithEcoGlow #[YourBrandName]Partner #Ad #Sponsored


3.2. Instagram Stories (3-5 Frames)

Concept: Authentic, short video clips or photo sequences demonstrating product use, unboxing, quick reviews, and a direct call to action.

Story 1 (Video - ~10-15s): Unboxing/First Impressions

  • Visual: Influencer unboxing EcoGlow products with excitement.
  • Audio/Text: "Guess what just arrived! So excited to dive into the @EcoGlowSkincare Radiance Challenge! Look at this beautiful packaging! 😍"
  • Sticker: "Tap to shop" with link to product page.

Story 2 (Video/Photo - ~10s): Product Feature/Texture

  • Visual: Close-up of product texture (e.g., applying serum to hand, showing cream consistency).
  • Audio/Text: "Seriously, the texture of this [Product Name] is divine. So lightweight and absorbs beautifully. My skin is already thanking me!"
  • Text Overlay: "Key Ingredients: [Ingredient 1], [Ingredient 2]"

Story 3 (Video - ~15-20s): Quick Review/Benefit

  • Visual: Influencer applying product to face, talking directly to camera, showing their glowing skin.
  • Audio/Text: "Okay, a quick check-in! I've been using EcoGlow's Radiance Renewal Serum for a week, and my skin feels so much smoother and looks brighter. It's become a non-negotiable in my routine. Love that it's natural and eco-friendly too!"
  • Text Overlay: "Visible results in just one week!"

Story 4 (Photo/Graphic - ~5-10s): Call to Action

  • Visual: Graphic with influencer's discount code and EcoGlow logo.
  • Text: "Ready for your glow-up? ✨ Get 15% off your first EcoGlow order with code [INFLUENCER_CODE]!"
  • Sticker: "Swipe Up" or "Shop Now" link to campaign landing page.
  • Disclosure: Small text #Ad or #Sponsored visible.

3.3. TikTok Video (15-30 seconds)

Concept: Dynamic, trend-driven content demonstrating product use in a fun, relatable way. Focus on short-form storytelling or transformation.

Video Idea: "My 3-Step EcoGlow Routine for Radiant Skin" (Trend: Quick Transformation/Routine)

  • 0-3s (Hook): Influencer looking tired/dull, text overlay: "POV: You thought natural skincare couldn't give you that glow..."
  • 3-10s (Product Intro): Quick cuts showing EcoGlow products. Influencer miming applying [Cleanser], [Serum], [Moisturizer] with satisfying sounds. Text overlays for each product: "Step 1: Gentle Cleanse," "Step 2: Radiance Boost," "Step 3: Hydrate & Protect."
  • 10-25s (Transformation/Reveal): Influencer looking fresh, glowing, confident. Quick cuts of them smiling, touching their skin.
  • 25-30s (CTA): Influencer pointing to text overlay with discount code. Text: "Unlock your natural glow with @EcoGlowSkincare! Use code [INFLUENCER_CODE] for 15% off! #EcoGlowRadiance #SustainableBeauty #SkincareRoutine #GlowUp #Ad"
  • Music: Popular trending audio.

3.4. Blog Post / YouTube Video (Outline)

Concept: In-depth review, routine integration, or educational content.

Blog Post Title Idea: "My Journey to Radiant Skin: Why EcoGlow Skincare is a Game-Changer"

Key Sections:

  1. Introduction: My skincare struggles & what I was looking for (natural, effective, sustainable).
  2. Discovering EcoGlow: How I found the brand and what initially caught my eye.
  3. Product Deep Dive:

* [Product 1]: My experience, key ingredients, benefits I noticed.

* [Product 2]: How I integrate it, texture, smell, results.

* [Product 3]: Favorite aspect, long-term benefits.

  1. Why EcoGlow Stands Out: Discussion of sustainability practices, ethical sourcing, brand values.
  2. My EcoGlow Skincare Routine: Step-by-step guide with product placement.
  3. Results & Transformation: Before/after photos (optional but highly recommended), personal testimonials.
  4. Final Thoughts & Recommendation: Who would I recommend this to? Why it's worth it.
  5. Call to Action: "Ready to try EcoGlow? Use my exclusive code [INFLUENCER_CODE] for 15% off at [Link to Website]!"
  6. Disclosure: Clearly state #Ad or #Sponsored at the beginning and end.

YouTube Video Outline: Similar structure, incorporating visual demonstrations of product application, texture, and "in-use" footage.


4. Brand-Owned Content Examples

Your brand's channels will amplify the influencer content and drive traffic.

4.1. Social Media Announcement Post (Instagram/Facebook)

Visual: A stunning graphic featuring a collage of diverse, radiant faces (stock photos or previous campaign images) with EcoGlow products, or a short, inspiring video montage.

Caption:

"✨ Introducing the EcoGlow Radiance Challenge!

We believe true beauty comes from nature, and a radiant glow is a reflection of conscious choices. That's why we're thrilled to launch the #EcoGlowRadiance Challenge, inviting you to join us on a journey to healthier skin and a happier planet!

Over the next few weeks, prepare to be inspired by incredible voices in the beauty community who are embracing their natural glow with EcoGlow. They'll be sharing their honest experiences, favorite products, and tips for sustainable beauty.

Follow along with #EcoGlowRadiance and discover:

  • 🌿 The power of natural, potent ingredients.
  • 🌍 Our commitment to sustainable practices.
  • 💖 Your most radiant, authentic self!

Ready to glow with us? Tap the link in bio to explore the EcoGlow collection and start your own radiance journey!

#EcoGlowRadiance #NaturalSkincareJourney #SustainableBeauty #GlowWithEcoGlow #BeautyChallenge


4.2. Website Landing Page Snippet

Headline:

Unlock Your Natural Radiance: Join the EcoGlow Radiance Challenge!

Body:

Welcome to the EcoGlow Radiance Challenge! We've partnered with inspiring voices to share the secret to truly radiant skin – a secret rooted in nature, sustainability, and self-love. Explore their journeys, discover powerful natural ingredients, and find your perfect EcoGlow routine.

Featured Content:

  • [Influencer 1 Name]: "My Skin Transformation with EcoGlow" (Link to their blog/video)
  • [Influencer 2 Name]: "Top 3 EcoGlow Products for Sensitive Skin" (Link to their Instagram post)
  • [Influencer 3 Name]: "A Week of EcoGlow: My Honest Review" (Link to their TikTok)

Call to Action:

Shop the EcoGlow Collection & Start Your Journey Today!

Use code RADIANCE15 for 15% off your first order!


4.3. Email Marketing Snippet

Subject Line: ✨ Your Natural Glow Awaits! Join the EcoGlow Radiance Challenge!

Body:

Hi [Customer Name],

Are you ready to embrace a skincare routine that truly makes you glow, inside and out? We're thrilled to announce the EcoGlow Radiance Challenge!

We've teamed up with amazing influencers who are passionate about natural beauty and sustainability. They're sharing their authentic experiences with EcoGlow, showcasing how our products can transform your skin and elevate your self-care ritual.

[Image: Collage of influencer content/radiant faces]

What to Expect from the Challenge:

  • Inspiring testimonials and real results.
  • Insights into our natural, ethically sourced ingredients.
  • Tips for a sustainable and effective skincare routine.

Ready to find your natural radiance?

Explore the challenge content and shop our collection today! Don't forget to use code RADIANCE15 at checkout for 15% off your first EcoGlow order!

[Button: Join the Radiance Challenge Now!] (Links to landing page)

Follow us on social media for daily updates and more glowing content!

#EcoGlowRadiance #SustainableBeauty


5. Universal Calls to Action (CTAs)

Ensure all content, both influencer and brand-owned, clearly directs the audience:

  • "Shop Now" / "Shop the Collection": Direct link to product page or campaign landing page.
  • "Use Code [INFLUENCER_CODE] for [X]% Off": Clear discount promotion.
  • "Link in Bio": For Instagram profiles.
  • "Learn More": To educational content or product benefits.
  • "Follow [Brand Account]": To encourage audience growth.
  • "Tag a Friend Who Needs a Glow-Up!": To boost engagement and reach.
  • "What's your favorite EcoGlow product? Let us know in the comments!": For community interaction.

6. Content Guidelines for Influencers (Reiteration)

To ensure a successful and compliant campaign, please adhere to these guidelines:

  1. Authenticity is Key: Share your genuine experience with EcoGlow products. Your audience trusts your honest opinion.
  2. Clear Disclosure: Always use #Ad and #Sponsored (or platform-specific disclosure tools) prominently in all sponsored posts across all platforms. For YouTube/blogs, a verbal and written disclosure is required at the beginning of the content.
  3. Brand Tagging: Tag @EcoGlowSkincare (or your brand's specific handle) in all relevant posts and stories.
influencer_campaign_planner.md
Download as Markdown
Copy all content
Full output as text
Download ZIP
IDE-ready project ZIP
Copy share link
Permanent URL for this run
Get Embed Code
Embed this result on any website
Print / Save PDF
Use browser print dialog
\n\n\n"); var hasSrcMain=Object.keys(extracted).some(function(k){return k.indexOf("src/main")>=0;}); if(!hasSrcMain) zip.file(folder+"src/main."+ext,"import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App'\nimport './index.css'\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n \n \n \n)\n"); var hasSrcApp=Object.keys(extracted).some(function(k){return k==="src/App."+ext||k==="App."+ext;}); if(!hasSrcApp) zip.file(folder+"src/App."+ext,"import React from 'react'\nimport './App.css'\n\nfunction App(){\n return(\n
\n
\n

"+slugTitle(pn)+"

\n

Built with PantheraHive BOS

\n
\n
\n )\n}\nexport default App\n"); zip.file(folder+"src/index.css","*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:system-ui,-apple-system,sans-serif;background:#f0f2f5;color:#1a1a2e}\n.app{min-height:100vh;display:flex;flex-direction:column}\n.app-header{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:40px}\nh1{font-size:2.5rem;font-weight:700}\n"); zip.file(folder+"src/App.css",""); zip.file(folder+"src/components/.gitkeep",""); zip.file(folder+"src/pages/.gitkeep",""); zip.file(folder+"src/hooks/.gitkeep",""); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\nnpm run dev\n\`\`\`\n\n## Build\n\`\`\`bash\nnpm run build\n\`\`\`\n\n## Open in IDE\nOpen the project folder in VS Code or WebStorm.\n"); zip.file(folder+".gitignore","node_modules/\ndist/\n.env\n.DS_Store\n*.local\n"); } /* --- Vue (Vite + Composition API + TypeScript) --- */ function buildVue(zip,folder,app,code,panelTxt){ var pn=pkgName(app); var C=cc(pn); var extracted=extractCode(panelTxt); zip.file(folder+"package.json",'{\n "name": "'+pn+'",\n "version": "0.0.0",\n "type": "module",\n "scripts": {\n "dev": "vite",\n "build": "vue-tsc -b && vite build",\n "preview": "vite preview"\n },\n "dependencies": {\n "vue": "^3.5.13",\n "vue-router": "^4.4.5",\n "pinia": "^2.3.0",\n "axios": "^1.7.9"\n },\n "devDependencies": {\n "@vitejs/plugin-vue": "^5.2.1",\n "typescript": "~5.7.3",\n "vite": "^6.0.5",\n "vue-tsc": "^2.2.0"\n }\n}\n'); zip.file(folder+"vite.config.ts","import { defineConfig } from 'vite'\nimport vue from '@vitejs/plugin-vue'\nimport { resolve } from 'path'\n\nexport default defineConfig({\n plugins: [vue()],\n resolve: { alias: { '@': resolve(__dirname,'src') } }\n})\n"); zip.file(folder+"tsconfig.json",'{"files":[],"references":[{"path":"./tsconfig.app.json"},{"path":"./tsconfig.node.json"}]}\n'); zip.file(folder+"tsconfig.app.json",'{\n "compilerOptions":{\n "target":"ES2020","useDefineForClassFields":true,"module":"ESNext","lib":["ES2020","DOM","DOM.Iterable"],\n "skipLibCheck":true,"moduleResolution":"bundler","allowImportingTsExtensions":true,\n "isolatedModules":true,"moduleDetection":"force","noEmit":true,"jsxImportSource":"vue",\n "strict":true,"paths":{"@/*":["./src/*"]}\n },\n "include":["src/**/*.ts","src/**/*.d.ts","src/**/*.tsx","src/**/*.vue"]\n}\n'); zip.file(folder+"env.d.ts","/// \n"); zip.file(folder+"index.html","\n\n\n \n \n "+slugTitle(pn)+"\n\n\n
\n \n\n\n"); var hasMain=Object.keys(extracted).some(function(k){return k==="src/main.ts"||k==="main.ts";}); if(!hasMain) zip.file(folder+"src/main.ts","import { createApp } from 'vue'\nimport { createPinia } from 'pinia'\nimport App from './App.vue'\nimport './assets/main.css'\n\nconst app = createApp(App)\napp.use(createPinia())\napp.mount('#app')\n"); var hasApp=Object.keys(extracted).some(function(k){return k.indexOf("App.vue")>=0;}); if(!hasApp) zip.file(folder+"src/App.vue","\n\n\n\n\n"); zip.file(folder+"src/assets/main.css","*{margin:0;padding:0;box-sizing:border-box}body{font-family:system-ui,sans-serif;background:#fff;color:#213547}\n"); zip.file(folder+"src/components/.gitkeep",""); zip.file(folder+"src/views/.gitkeep",""); zip.file(folder+"src/stores/.gitkeep",""); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\nnpm run dev\n\`\`\`\n\n## Build\n\`\`\`bash\nnpm run build\n\`\`\`\n\nOpen in VS Code or WebStorm.\n"); zip.file(folder+".gitignore","node_modules/\ndist/\n.env\n.DS_Store\n*.local\n"); } /* --- Angular (v19 standalone) --- */ function buildAngular(zip,folder,app,code,panelTxt){ var pn=pkgName(app); var C=cc(pn); var sel=pn.replace(/_/g,"-"); var extracted=extractCode(panelTxt); zip.file(folder+"package.json",'{\n "name": "'+pn+'",\n "version": "0.0.0",\n "scripts": {\n "ng": "ng",\n "start": "ng serve",\n "build": "ng build",\n "test": "ng test"\n },\n "dependencies": {\n "@angular/animations": "^19.0.0",\n "@angular/common": "^19.0.0",\n "@angular/compiler": "^19.0.0",\n "@angular/core": "^19.0.0",\n "@angular/forms": "^19.0.0",\n "@angular/platform-browser": "^19.0.0",\n "@angular/platform-browser-dynamic": "^19.0.0",\n "@angular/router": "^19.0.0",\n "rxjs": "~7.8.0",\n "tslib": "^2.3.0",\n "zone.js": "~0.15.0"\n },\n "devDependencies": {\n "@angular-devkit/build-angular": "^19.0.0",\n "@angular/cli": "^19.0.0",\n "@angular/compiler-cli": "^19.0.0",\n "typescript": "~5.6.0"\n }\n}\n'); zip.file(folder+"angular.json",'{\n "$schema": "./node_modules/@angular/cli/lib/config/schema.json",\n "version": 1,\n "newProjectRoot": "projects",\n "projects": {\n "'+pn+'": {\n "projectType": "application",\n "root": "",\n "sourceRoot": "src",\n "prefix": "app",\n "architect": {\n "build": {\n "builder": "@angular-devkit/build-angular:application",\n "options": {\n "outputPath": "dist/'+pn+'",\n "index": "src/index.html",\n "browser": "src/main.ts",\n "tsConfig": "tsconfig.app.json",\n "styles": ["src/styles.css"],\n "scripts": []\n }\n },\n "serve": {"builder":"@angular-devkit/build-angular:dev-server","configurations":{"production":{"buildTarget":"'+pn+':build:production"},"development":{"buildTarget":"'+pn+':build:development"}},"defaultConfiguration":"development"}\n }\n }\n }\n}\n'); zip.file(folder+"tsconfig.json",'{\n "compileOnSave": false,\n "compilerOptions": {"baseUrl":"./","outDir":"./dist/out-tsc","forceConsistentCasingInFileNames":true,"strict":true,"noImplicitOverride":true,"noPropertyAccessFromIndexSignature":true,"noImplicitReturns":true,"noFallthroughCasesInSwitch":true,"paths":{"@/*":["src/*"]},"skipLibCheck":true,"esModuleInterop":true,"sourceMap":true,"declaration":false,"experimentalDecorators":true,"moduleResolution":"bundler","importHelpers":true,"target":"ES2022","module":"ES2022","useDefineForClassFields":false,"lib":["ES2022","dom"]},\n "references":[{"path":"./tsconfig.app.json"}]\n}\n'); zip.file(folder+"tsconfig.app.json",'{\n "extends":"./tsconfig.json",\n "compilerOptions":{"outDir":"./dist/out-tsc","types":[]},\n "files":["src/main.ts"],\n "include":["src/**/*.d.ts"]\n}\n'); zip.file(folder+"src/index.html","\n\n\n \n "+slugTitle(pn)+"\n \n \n \n\n\n \n\n\n"); zip.file(folder+"src/main.ts","import { bootstrapApplication } from '@angular/platform-browser';\nimport { appConfig } from './app/app.config';\nimport { AppComponent } from './app/app.component';\n\nbootstrapApplication(AppComponent, appConfig)\n .catch(err => console.error(err));\n"); zip.file(folder+"src/styles.css","* { margin: 0; padding: 0; box-sizing: border-box; }\nbody { font-family: system-ui, -apple-system, sans-serif; background: #f9fafb; color: #111827; }\n"); var hasComp=Object.keys(extracted).some(function(k){return k.indexOf("app.component")>=0;}); if(!hasComp){ zip.file(folder+"src/app/app.component.ts","import { Component } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\n\n@Component({\n selector: 'app-root',\n standalone: true,\n imports: [RouterOutlet],\n templateUrl: './app.component.html',\n styleUrl: './app.component.css'\n})\nexport class AppComponent {\n title = '"+pn+"';\n}\n"); zip.file(folder+"src/app/app.component.html","
\n
\n

"+slugTitle(pn)+"

\n

Built with PantheraHive BOS

\n
\n \n
\n"); zip.file(folder+"src/app/app.component.css",".app-header{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:60vh;gap:16px}h1{font-size:2.5rem;font-weight:700;color:#6366f1}\n"); } zip.file(folder+"src/app/app.config.ts","import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';\nimport { provideRouter } from '@angular/router';\nimport { routes } from './app.routes';\n\nexport const appConfig: ApplicationConfig = {\n providers: [\n provideZoneChangeDetection({ eventCoalescing: true }),\n provideRouter(routes)\n ]\n};\n"); zip.file(folder+"src/app/app.routes.ts","import { Routes } from '@angular/router';\n\nexport const routes: Routes = [];\n"); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\nng serve\n# or: npm start\n\`\`\`\n\n## Build\n\`\`\`bash\nng build\n\`\`\`\n\nOpen in VS Code with Angular Language Service extension.\n"); zip.file(folder+".gitignore","node_modules/\ndist/\n.env\n.DS_Store\n*.local\n.angular/\n"); } /* --- Python --- */ function buildPython(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^\`\`\`[\w]*\n?/m,"").replace(/\n?\`\`\`$/m,"").trim(); var reqMap={"numpy":"numpy","pandas":"pandas","sklearn":"scikit-learn","tensorflow":"tensorflow","torch":"torch","flask":"flask","fastapi":"fastapi","uvicorn":"uvicorn","requests":"requests","sqlalchemy":"sqlalchemy","pydantic":"pydantic","dotenv":"python-dotenv","PIL":"Pillow","cv2":"opencv-python","matplotlib":"matplotlib","seaborn":"seaborn","scipy":"scipy"}; var reqs=[]; Object.keys(reqMap).forEach(function(k){if(src.indexOf("import "+k)>=0||src.indexOf("from "+k)>=0)reqs.push(reqMap[k]);}); var reqsTxt=reqs.length?reqs.join("\n"):"# add dependencies here\n"; zip.file(folder+"main.py",src||"# "+title+"\n# Generated by PantheraHive BOS\n\nprint(title+\" loaded\")\n"); zip.file(folder+"requirements.txt",reqsTxt); zip.file(folder+".env.example","# Environment variables\n"); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\npython3 -m venv .venv\nsource .venv/bin/activate\npip install -r requirements.txt\n\`\`\`\n\n## Run\n\`\`\`bash\npython main.py\n\`\`\`\n"); zip.file(folder+".gitignore",".venv/\n__pycache__/\n*.pyc\n.env\n.DS_Store\n"); } /* --- Node.js --- */ function buildNode(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^\`\`\`[\w]*\n?/m,"").replace(/\n?\`\`\`$/m,"").trim(); var depMap={"mongoose":"^8.0.0","dotenv":"^16.4.5","axios":"^1.7.9","cors":"^2.8.5","bcryptjs":"^2.4.3","jsonwebtoken":"^9.0.2","socket.io":"^4.7.4","uuid":"^9.0.1","zod":"^3.22.4","express":"^4.18.2"}; var deps={}; Object.keys(depMap).forEach(function(k){if(src.indexOf(k)>=0)deps[k]=depMap[k];}); if(!deps["express"])deps["express"]="^4.18.2"; var pkgJson=JSON.stringify({"name":pn,"version":"1.0.0","main":"src/index.js","scripts":{"start":"node src/index.js","dev":"nodemon src/index.js"},"dependencies":deps,"devDependencies":{"nodemon":"^3.0.3"}},null,2)+"\n"; zip.file(folder+"package.json",pkgJson); var fallback="const express=require(\"express\");\nconst app=express();\napp.use(express.json());\n\napp.get(\"/\",(req,res)=>{\n res.json({message:\""+title+" API\"});\n});\n\nconst PORT=process.env.PORT||3000;\napp.listen(PORT,()=>console.log(\"Server on port \"+PORT));\n"; zip.file(folder+"src/index.js",src||fallback); zip.file(folder+".env.example","PORT=3000\n"); zip.file(folder+".gitignore","node_modules/\n.env\n.DS_Store\n"); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\n\`\`\`\n\n## Run\n\`\`\`bash\nnpm run dev\n\`\`\`\n"); } /* --- Vanilla HTML --- */ function buildVanillaHtml(zip,folder,app,code){ var title=slugTitle(app); var isFullDoc=code.trim().toLowerCase().indexOf("=0||code.trim().toLowerCase().indexOf("=0; var indexHtml=isFullDoc?code:"\n\n\n\n\n"+title+"\n\n\n\n"+code+"\n\n\n\n"; zip.file(folder+"index.html",indexHtml); zip.file(folder+"style.css","/* "+title+" — styles */\n*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:system-ui,-apple-system,sans-serif;background:#fff;color:#1a1a2e}\n"); zip.file(folder+"script.js","/* "+title+" — scripts */\n"); zip.file(folder+"assets/.gitkeep",""); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\n## Open\nDouble-click \`index.html\` in your browser.\n\nOr serve locally:\n\`\`\`bash\nnpx serve .\n# or\npython3 -m http.server 3000\n\`\`\`\n"); zip.file(folder+".gitignore",".DS_Store\nnode_modules/\n.env\n"); } /* ===== MAIN ===== */ var sc=document.createElement("script"); sc.src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"; sc.onerror=function(){ if(lbl)lbl.textContent="Download ZIP"; alert("JSZip load failed — check connection."); }; sc.onload=function(){ var zip=new JSZip(); var base=(_phFname||"output").replace(/\.[^.]+$/,""); var app=base.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")||"my_app"; var folder=app+"/"; var vc=document.getElementById("panel-content"); var panelTxt=vc?(vc.innerText||vc.textContent||""):""; var lang=detectLang(_phCode,panelTxt); if(_phIsHtml){ buildVanillaHtml(zip,folder,app,_phCode); } else if(lang==="flutter"){ buildFlutter(zip,folder,app,_phCode,panelTxt); } else if(lang==="react-native"){ buildReactNative(zip,folder,app,_phCode,panelTxt); } else if(lang==="swift"){ buildSwift(zip,folder,app,_phCode,panelTxt); } else if(lang==="kotlin"){ buildKotlin(zip,folder,app,_phCode,panelTxt); } else if(lang==="react"){ buildReact(zip,folder,app,_phCode,panelTxt); } else if(lang==="vue"){ buildVue(zip,folder,app,_phCode,panelTxt); } else if(lang==="angular"){ buildAngular(zip,folder,app,_phCode,panelTxt); } else if(lang==="python"){ buildPython(zip,folder,app,_phCode); } else if(lang==="node"){ buildNode(zip,folder,app,_phCode); } else { /* Document/content workflow */ var title=app.replace(/_/g," "); var md=_phAll||_phCode||panelTxt||"No content"; zip.file(folder+app+".md",md); var h=""+title+""; h+="

"+title+"

"; var hc=md.replace(/&/g,"&").replace(//g,">"); hc=hc.replace(/^### (.+)$/gm,"

$1

"); hc=hc.replace(/^## (.+)$/gm,"

$1

"); hc=hc.replace(/^# (.+)$/gm,"

$1

"); hc=hc.replace(/\*\*(.+?)\*\*/g,"$1"); hc=hc.replace(/\n{2,}/g,"

"); h+="

"+hc+"

Generated by PantheraHive BOS
"; zip.file(folder+app+".html",h); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\nFiles:\n- "+app+".md (Markdown)\n- "+app+".html (styled HTML)\n"); } zip.generateAsync({type:"blob"}).then(function(blob){ var a=document.createElement("a"); a.href=URL.createObjectURL(blob); a.download=app+".zip"; a.click(); URL.revokeObjectURL(a.href); if(lbl)lbl.textContent="Download ZIP"; }); }; document.head.appendChild(sc); } function phShare(){navigator.clipboard.writeText(window.location.href).then(function(){var el=document.getElementById("ph-share-lbl");if(el){el.textContent="Link copied!";setTimeout(function(){el.textContent="Copy share link";},2500);}});}function phEmbed(){var runId=window.location.pathname.split("/").pop().replace(".html","");var embedUrl="https://pantherahive.com/embed/"+runId;var code='';navigator.clipboard.writeText(code).then(function(){var el=document.getElementById("ph-embed-lbl");if(el){el.textContent="Embed code copied!";setTimeout(function(){el.textContent="Get Embed Code";},2500);}});}