@extends('layouts.app') @section('title', isset($campaign) ? 'Edit Campaign' : 'New Campaign') @section('page-title', isset($campaign) ? 'Edit Campaign' : 'New Campaign') @section('page-subtitle', isset($campaign) ? $campaign->name : 'Set up a new influencer campaign') @push('styles') @endpush @section('content')
@csrf @if (isset($campaign)) @method('PUT') @endif
{{-- ── MAIN FORM ── --}}
{{-- Section tabs --}}
{{-- ── BASICS ── --}}
Campaign overview
@error('name')
{{ $message }}
@enderror
@error('brand_name')
{{ $message }}
@enderror
@error('industry')
{{ $message }}
@enderror
Describe the primary goal of this campaign in your own words.
@error('objective')
{{ $message }}
@enderror
@error('description')
{{ $message }}
@enderror
@error('target_audience')
{{ $message }}
@enderror
Schedule & ownership
@error('start_date')
{{ $message }}
@enderror
@error('end_date')
{{ $message }}
@enderror
@error('status')
{{ $message }}
@enderror
@error('campaign_manager')
{{ $message }}
@enderror
{{-- ── ELIGIBILITY ── --}}
Platforms
@foreach (['Instagram', 'YouTube'] as $platform) @endforeach
@error('allowed_platforms')
{{ $message }}
@enderror
Audience size requirements
@error('min_followers')
{{ $message }}
@enderror
@error('min_avg_views')
{{ $message }}
@enderror
Location & language
@error('geo_eligibility')
{{ $message }}
@enderror
@error('language_requirement')
{{ $message }}
@enderror
Audience profile
@error('gender_preference')
{{ $message }}
@enderror
@error('age_preference')
{{ $message }}
@enderror
Manual approval required
Each influencer must be individually approved before joining
{{-- ── PAYMENT ── --}}
Payment model
@foreach ([['per_view', 'Per View'], ['fixed_fee', 'Fixed Fee'], ['per_post', 'Per Post'], ['per_conversion', 'Per Conversion'], ['hybrid', 'Hybrid']] as [$val, $label]) @endforeach
@error('payment_model')
{{ $message }}
@enderror
@error('payment_currency')
{{ $message }}
@enderror
@error('payout_release_rule')
{{ $message }}
@enderror
Per-view pricing
@error('per_view_price')
{{ $message }}
@enderror
Views beyond this cap are not compensated.
@error('max_payable_views')
{{ $message }}
@enderror
Influencer must reach this view count to qualify.
@error('min_view_threshold')
{{ $message }}
@enderror
@error('platform_commission')
{{ $message }}
@enderror
Fixed fee details
@error('fixed_fee_amount')
{{ $message }}
@enderror
@error('platform_commission')
{{ $message }}
@enderror
Per-post pricing
@error('per_post_rate')
{{ $message }}
@enderror
Leave blank for unlimited posts.
@error('max_posts_per_influencer')
{{ $message }}
@enderror
@error('platform_commission')
{{ $message }}
@enderror
Per-conversion pricing
@error('per_conversion_rate')
{{ $message }}
@enderror
@error('conversion_event')
{{ $message }}
@enderror
Conversions beyond this cap are not compensated.
@error('max_conversions_per_influencer')
{{ $message }}
@enderror
@error('platform_commission')
{{ $message }}
@enderror
{{-- ───────────────────────────────────────────────────────────────────── HYBRID fields — visible when payment_model = hybrid Shows a subset of both per-view and fixed fields ──────────────────────────────────────────────────────────────────────── --}}
Hybrid — base fee
@error('fixed_fee_amount')
{{ $message }}
@enderror
@error('platform_commission')
{{ $message }}
@enderror
Hybrid — performance bonus (per view)
@error('per_view_price')
{{ $message }}
@enderror
Views beyond this cap are not compensated.
@error('max_payable_views')
{{ $message }}
@enderror
Influencer must reach this view count to earn the view bonus.
@error('min_view_threshold')
{{ $message }}
@enderror
{{-- ───────────────────────────────────────────────────────────────────── BUDGET TRACKING — always visible ──────────────────────────────────────────────────────────────────────── --}}
Budget tracking
@error('total_budget')
{{ $message }}
@enderror
Updated automatically as payments are released.
@error('budget_consumed')
{{ $message }}
@enderror
Tax & deductions
@error('gst_percent')
{{ $message }}
@enderror
@error('tds_percent')
{{ $message }}
@enderror
@error('tax_notes')
{{ $message }}
@enderror
{{-- ── CONTENT BRIEF ── --}}
Video format
@foreach (['YouTube Video', 'YouTube Short'] as $fmt) @endforeach
@error('video_formats')
{{ $message }}
@enderror
@error('required_duration')
{{ $message }}
@enderror
@error('aspect_ratio')
{{ $message }}
@enderror
Brand requirements
@error('caption_instructions')
{{ $message }}
@enderror
Type a hashtag and press Enter or Space to add. Click × to remove.
@error('required_hashtags')
{{ $message }}
@enderror
{{-- Tags rendered by JS --}}
Type a keyword or phrase and press Enter to add. Click × to remove.
@error('mandatory_keywords')
{{ $message }}
@enderror
@error('mandatory_cta')
{{ $message }}
@enderror
@error('promo_code')
{{ $message }}
@enderror
@error('landing_page_url')
{{ $message }}
@enderror
Mandatory product shots required
Video must include a close-up or featured shot of the product
Creative direction
@foreach (['Professional', 'Funny / Humorous', 'Educational', 'Lifestyle', 'Inspirational', 'Casual', 'Dramatic', 'ASMR / Soothing'] as $tone) @endforeach
@error('content_tone')
{{ $message }}
@enderror
@error('script_guidance')
{{ $message }}
@enderror
@error('content_dos')
{{ $message }}
@enderror
@error('content_donts')
{{ $message }}
@enderror
@error('reference_videos')
{{ $message }}
@enderror
@error('brand_assets')
{{ $message }}
@enderror
{{-- ── COMPLIANCE ── --}}
Disclosure requirements
This exact text or label must appear in every post caption or video.
@error('disclosure_text')
{{ $message }}
@enderror
@error('platform_disclosure_instructions')
{{ $message }}
@enderror
YouTube paid promotion checkbox required
Creator must tick "Contains paid promotion" in YouTube video settings
⚖️
FTC Disclosure Reminder
Under FTC guidelines, any material connection between an influencer and a brand — including free products, payments, or discounts — must be clearly and conspicuously disclosed. The disclosure must be placed so consumers see it before engaging with the content, not hidden in a cluster of hashtags or below the fold. Ensure all influencers in this campaign comply.
@error('compliance_notes')
{{ $message }}
@enderror
{{-- ── APPROVAL RULES ── --}}
Rejection criteria — video will be rejected if
@foreach ([ 'reject_missing_hashtag_cta' => 'Missing mandatory hashtag or CTA', 'reject_wrong_product' => 'Wrong product or service shown', 'reject_misleading_claim' => 'False or misleading claim made', 'reject_poor_quality' => 'Poor audio or video quality', 'reject_competitor_visible' => 'Competitor brand visible in video', 'reject_offensive_content' => 'Offensive or inappropriate content', 'reject_no_disclosure' => 'No disclosure or sponsored label present', 'reject_wrong_language' => 'Video in wrong language', 'reject_after_deadline' => 'Uploaded after submission deadline', 'reject_fake_engagement' => 'AI-generated or fake engagement suspected', ] as $field => $label) @endforeach
Uncheck any rule that does not apply to this campaign.
Approval criteria — video will only be approved if
@foreach ([ 'approve_mandatory_included' => 'All mandatory items are included', 'approve_brand_message' => 'Brand message is clearly communicated', 'approve_quality_standard' => 'Video quality meets minimum standard', 'approve_disclosure_visible' => 'Disclosure label is clearly visible', 'approve_cta_included' => 'CTA, link, and/or promo code is included', 'approve_platform_format' => 'Correct platform format and aspect ratio used', 'approve_manager_sign_off' => 'Campaign manager has given final approval', ] as $field => $label) @endforeach
Approval flow
Recommended submission flow
    @foreach (['Influencer applies or accepts campaign terms', 'Manager approves the influencer for this campaign', 'Influencer uploads video draft for review', 'Manager approves, rejects, or requests revision', 'Influencer posts approved video and submits live URL', 'Views are tracked and payment is calculated'] as $i => $step)
  1. {{ $step }}
  2. @endforeach
{{-- ── SIDEBAR ── --}}
@endsection @push('scripts') @endpush