You are a senior frontend architect and lead product engineer. I already need to adding a new AI feature layer and related screens/components for an MVP. The MVP includes only these 7 features: 1. AI Campaign Strategist 2. AI Brief Parser 3. AI Creator Finder 4. Creator Match Reasoning 5. Lookalike Creator Discovery 6. AI Outreach Writer 7. Creator CRM Memory Do NOT build forecasting dashboards, autonomous agents, shipping workflows, contracts, or full inbox integrations yet. ================================================== HIGH-LEVEL GOAL ================================================== Build the frontend UX and component architecture for the AI MVP as an extension to the existing product. The UI must: - fit into an existing enterprise SaaS product - reuse current design system/components if possible - consume Laravel APIs cleanly - feel production-ready - support future expansion into more advanced AI modules ================================================== IMPORTANT RULES ================================================== 1. DO NOT rebuild auth, layout, navigation, creator pages, campaign pages, or design system from scratch unless necessary. 2. Extend the current app structure cleanly. 3. Assume there are already existing pages/modules for: - campaigns - creators - lists/shortlists - workspace/team navigation 4. The new AI screens should integrate into the existing product UX, not look like a separate tool. 5. Build components and pages in a scalable way for future phases. ================================================== TARGET STACK ================================================== Use: - Next.js latest stable version compatible with project - TypeScript - App Router if current project uses it, otherwise respect existing router structure - React Query / TanStack Query if not already present, or existing API-fetching pattern - Zod for frontend validation if aligned with project - reusable typed API client - modular components - loading/error/empty states - clean enterprise UI patterns If the current project likely uses a specific UI library, stay aligned. Otherwise create neutral production-grade components that can be adapted. ================================================== PRODUCT UX STRUCTURE ================================================== Add an AI section into the existing product. Suggested navigation entry: - AI Hub Inside AI Hub or campaign/creator context pages, support these subfeatures: - Strategy - Brief Parser - Creator Finder - Match Reasoning - Lookalikes - Outreach Drafts - CRM Memory But also integrate them contextually: - campaign pages should surface strategist, brief parser, creator finder, outreach drafts - creator detail pages should surface match reasoning, lookalikes, CRM memory ================================================== MVP FEATURE UX REQUIREMENTS ================================================== -------------------------------------------------- 1. AI Campaign Strategist -------------------------------------------------- Goal: User can generate and review campaign strategy from form inputs or campaign context. UI requirements: - Strategist form - ability to prefill from existing campaign - generate button - loading state - result page/card sections for: - strategy summary - objective - creator mix - content angles - KPIs - budget split - risks - next steps - regenerate action - edit reviewed version support - version history list Main screens/components: - StrategistPanel - StrategistForm - StrategyResultCard - StrategyVersionList -------------------------------------------------- 2. AI Brief Parser -------------------------------------------------- Goal: User pastes raw brief and gets structured extracted requirements. UI requirements: - large text input / paste area - parse action - parsed output displayed in editable structured sections - confidence score display - missing information questions section - convert-to-search action - save reviewed version Main screens/components: - BriefParserPanel - RawBriefInput - ParsedBriefReview - MissingInfoCard - ParseConfidenceBadge -------------------------------------------------- 3. AI Creator Finder -------------------------------------------------- Goal: User searches creators using campaign context + AI-enhanced ranking. UI requirements: - search/filter panel - results table/grid - creator card row - match score badge - short why-fit explanation - filters drawer/sidebar - shortlist action - pagination - sort options - empty state - loading skeleton Main screens/components: - CreatorFinderPage - CreatorFilterPanel - CreatorResultsTable - CreatorMatchBadge - WhyFitTooltip - ShortlistActionBar -------------------------------------------------- 4. Creator Match Reasoning -------------------------------------------------- Goal: User can open any creator and see structured explanation for campaign fit. UI requirements: - reasoning drawer/modal/card - fit dimensions with scores: - audience - geography - content - platform - budget - top fit reasons - risk flags - regenerate reasoning action Main screens/components: - MatchReasoningCard - FitScoreBars - RiskFlagsList - RegenerateReasoningButton -------------------------------------------------- 5. Lookalike Creator Discovery -------------------------------------------------- Goal: User picks one or more creators and gets similar creators. UI requirements: - select seed creators - choose similarity mode - generate button - results list/grid - similarity score - reason summary - save lookalike list - add to shortlist action Main screens/components: - LookalikeGenerator - SeedCreatorSelector - SimilarityModeTabs - LookalikeResultsGrid - SaveLookalikeListDialog -------------------------------------------------- 6. AI Outreach Writer -------------------------------------------------- Goal: User generates outreach drafts for a creator in campaign context. UI requirements: - select outreach type - select tone - select channel - generate action - show subject line - show full draft - short variant - follow-up variant - copy action - save draft - regenerate - edit before save Main screens/components: - OutreachWriterPanel - OutreachOptionsForm - DraftPreviewCard - VariantTabs - CopyDraftActions -------------------------------------------------- 7. Creator CRM Memory -------------------------------------------------- Goal: User sees creator relationship timeline and can add/update notes. UI requirements: - timeline view - add note form - status tag - next step input - summary card - filter by campaign or status - chronological activity entries Main screens/components: - CreatorCRMPanel - CreatorTimeline - AddCRMEntryForm - CreatorRelationshipSummary - StatusBadge ================================================== INTEGRATION REQUIREMENTS ================================================== The frontend must consume the Laravel APIs for the AI module. Need: - typed API client layer - endpoint wrappers for each feature - React Query hooks or project-equivalent hooks - mutations for generate/save/regenerate/update flows - optimistic updates where reasonable - cache invalidation strategy Suggested hooks: - useGenerateStrategy - useStrategyHistory - useParseBrief - useCreatorFinder - useGenerateMatchReasoning - useGenerateLookalikes - useGenerateOutreachDraft - useCreatorCRM - useCreateCRMEntry - useUpdateCRMEntry ================================================== ROUTING / PAGE INTEGRATION ================================================== Add routes in a way that matches the current app. Possible route ideas: - /ai/strategist - /ai/brief-parser - /campaigns/[id]/ai-strategy - /campaigns/[id]/creator-finder - /campaigns/[id]/outreach - /creators/[id]/match-reasoning?campaignId=... - /creators/[id]/lookalikes - /creators/[id]/crm Do not hardcode these if the current app structure suggests a better route pattern. Align with existing routing conventions. ================================================== STATE / DATA MODEL REQUIREMENTS ================================================== Create TypeScript interfaces/types for: - strategy result - brief parse result - creator finder result item - match reasoning result - lookalike result - outreach draft - CRM timeline entry - CRM summary Use strict typing throughout. ================================================== UI / UX EXPECTATIONS ================================================== The UI should feel like a premium B2B SaaS platform. Need: - clean card layout - filters and result panels - empty states - loading skeletons - inline validation - retry states - helpful error banners - no toy styling - responsive but desktop-first - suitable for agencies and enterprise teams Where relevant: - use tabs - drawers/modals - side panels - sticky action bars - sectioned review cards ================================================== DELIVERABLES I EXPECT FROM YOU ================================================== 1. Analyze how these AI features should fit into an existing Next.js SaaS app 2. Propose the page structure and component tree 3. Build the frontend module structure 4. Create reusable typed API integration layer 5. Create hooks for all major feature flows 6. Build the screens/components for the 7 MVP features 7. Add proper loading/error/empty states 8. Add sample mock data adapters if backend endpoints are not fully ready 9. Keep everything extendable for future phases ================================================== IMPORTANT DEVELOPMENT BEHAVIOR ================================================== - Do not build a fake standalone demo - Do not rebuild the app shell - Extend the current product professionally - Reuse existing creator and campaign UX where appropriate - Make the AI UX feel native to the current system - Be explicit where integration points to the existing system are assumed - Start with architecture, types, API client, hooks, then pages/components Backend documentation Sanad AI Module — Frontend API Documentation Base URL: https://sanad.work/staging/api Auth: All endpoints require Authorization: Bearer {token} header (Sanctum) Content-Type: application/json Response Format All API responses follow this structure: Success: { "status": true, "message": "Success message", "data": { ... } } Error: { "status": false, "message": "Error description", "errors": { "field": ["Validation error"] } } HTTP Status Codes: Code Meaning 200 Success 401 Unauthenticated (token missing/expired) 403 Forbidden (accessing another user's data) 404 Not found 422 Validation error 500 Server error Pagination (on list endpoints): { "data": [...], "links": { "first": "...", "last": "...", "prev": null, "next": "..." }, "meta": { "current_page": 1, "last_page": 5, "per_page": 15, "total": 72 } } 1. Campaign Strategist (/api/ai/strategist) AI-powered campaign strategy generation from brand/campaign inputs. POST /ai/strategist/generate Generate a campaign strategy. Request Body: Field Type Required Description campaign_id integer No Link to existing campaign (auto-fills brand details) brand_name string Yes (if no campaign_id) Brand name brand_description string No Brand description product_name string No Product name product_description string No Product description campaign_goal string No Campaign objective (max 500) target_audience string No Target audience description (max 500) target_countries string[] No Country codes: ["SA", "AE", "KW"] target_platforms string[] No ["instagram", "snapchat", "tiktok", "youtube", "twitter"] budget_range string No e.g. "50000-100000 SAR" timeline string No e.g. "6 weeks" brand_tone string No e.g. "energetic, youthful, premium" notes string No Additional instructions Example Request: { "brand_name": "Nike Saudi Arabia", "campaign_goal": "Drive awareness for Air Max 2026 launch", "target_audience": "18-35 fitness enthusiasts in Saudi Arabia", "target_countries": ["SA", "AE"], "target_platforms": ["instagram", "snapchat"], "budget_range": "50000-100000 SAR", "timeline": "6 weeks", "brand_tone": "energetic, youthful" } Response (data): { "id": 1, "campaign_id": null, "status": "completed", "version": 1, "parent_run_id": null, "inputs": { "brand_name": "Nike Saudi Arabia", "campaign_goal": "...", "target_countries": ["SA", "AE"], "target_platforms": ["instagram", "snapchat"], "budget_range": "50000-100000 SAR", "timeline": "6 weeks", "brand_tone": "energetic, youthful" }, "outputs": { "strategy_summary": "...", "recommended_platforms": [...], "content_pillars": [...], "creator_archetypes": [...], "timeline_phases": [...], "kpi_targets": {...}, "budget_allocation": {...} }, "user_edits": null, "created_by_user_id": 181, "created_at": "2026-04-02T12:00:00+00:00", "updated_at": "2026-04-02T12:00:00+00:00" } GET /ai/strategist List strategy runs (paginated). Query Params: Param Type Default Description per_page integer 15 Items per page campaign_id integer — Filter by campaign GET /ai/strategist/{id} Get single strategy run details. POST /ai/strategist/{id}/regenerate Regenerate strategy using same inputs. Creates a new version with parent_run_id link. PUT /ai/strategist/{id} Save user edits on a strategy. Request Body: { "edits": { "recommended_platforms": ["snapchat"], "custom_notes": "Client prefers Snapchat-first" } } 2. Brief Parser (/api/ai/brief-parser) Parse raw campaign briefs into structured data using AI. POST /ai/brief-parser/parse Request Body: Field Type Required Description raw_brief_text string Yes Raw brief text (min 10 chars) campaign_id integer No Link to existing campaign client_notes string No Additional context Example Request: { "raw_brief_text": "We need 5-10 Saudi lifestyle influencers on Instagram and Snapchat to promote our summer collection. Budget 30-50K SAR, June 1 to July 15. Min 50K followers, female creators in Riyadh/Jeddah.", "client_notes": "Premium fashion brand, elegant aesthetic" } Response (data): { "id": 1, "campaign_id": null, "raw_brief_text": "...", "client_notes": "Premium fashion brand, elegant aesthetic", "parsed_output": { "campaign_name": "Summer Collection Launch", "objective": "Brand awareness and product promotion", "platforms": ["instagram", "snapchat"], "budget": { "range_min": 30000, "range_max": 50000, "currency": "SAR" }, "timeline": { "start_date": "2026-06-01", "end_date": "2026-07-15" }, "geographies": ["SA"], "creator_requirements": { "count": "5-10", "niche": "lifestyle", "min_followers": 50000, "gender": "female", "tier": "mid", "language": null }, "deliverables": [ { "type": "instagram_post", "count": 3 }, { "type": "instagram_story", "count": 5 }, { "type": "snapchat_spotlight", "count": 2 } ], "confidence_score": 0.87 }, "search_filters": null, "user_edits": null, "confidence_score": 0.87, "created_by_user_id": 181, "created_at": "2026-04-02T12:00:00+00:00", "updated_at": "2026-04-02T12:00:00+00:00" } GET /ai/brief-parser List parses (paginated). Query: per_page, campaign_id. GET /ai/brief-parser/{id} Get single parse details. PUT /ai/brief-parser/{id} Save user corrections. Body: { "edits": { ... } } POST /ai/brief-parser/{id}/convert-to-filters Convert parsed output to creator search filters. Returns the parse with search_filters populated: { "search_filters": { "platforms": ["instagram", "snapchat"], "countries": ["SA"], "niche": "lifestyle", "min_followers": 50000, "tier": "mid", "budget_min": 30000, "budget_max": 50000 } } 3. Creator Finder (/api/ai/creator-finder) Search, score, and shortlist creators with deterministic matching. POST /ai/creator-finder/search Request Body: Field Type Required Description platform string No instagram, snapchat, tiktok, youtube, twitter country string No 2-letter code (SA, AE, KW...) niche string No fashion, beauty, fitness, food, tech... language string No Language code min_followers integer No Minimum follower count max_followers integer No Maximum follower count min_engagement decimal No Minimum engagement rate % max_engagement decimal No Maximum engagement rate % tier string No nano, micro, mid, macro, mega per_page integer No 1-100 (default: 20) campaign_id integer No Campaign reference Example Request: { "platform": "instagram", "country": "SA", "niche": "fashion", "min_followers": 50000, "min_engagement": 2.0, "per_page": 20 } Response (data): { "items": [ { "influencer": { "id": 123, "username": "fashion_queen_sa", "social_network": "instagram", "subscribers": 125000, "engagement_rate": 3.5, "country_code": "SA", "category": "Fashion" }, "match_score": 92.0, "scoring_breakdown": { "platform": 100, "geography": 100, "niche": 100, "engagement": 90, "followers": 70, "total": 92.0 }, "why_fit_summary": "fashion_queen_sa on instagram with 92% match score based on deterministic criteria.", "strengths": [ "High engagement rate (3.5%)", "Large audience (125,000 followers)", "Geographic match (SA)" ], "risks": [] } ], "pagination": { "current_page": 1, "last_page": 5, "per_page": 20, "total": 95 } } POST /ai/creator-finder/shortlist Save a curated shortlist from search results. Request Body: Field Type Required Description creators array Yes Min 1 item, each with influencer_id (required) name string No Shortlist name (auto-generated if empty) campaign_id integer No Campaign reference search_filters object No The filters used to find these creators Each creators[] item: Field Type Required influencer_id integer Yes match_score decimal No why_fit_summary string No strengths string[] No risks string[] No scoring_breakdown object No Response (data): { "id": 1, "name": "Nike Summer Campaign - Top Picks", "campaign_id": null, "search_filters": { "platform": "instagram", "country": "SA" }, "items_count": 5, "items": [ { "id": 1, "influencer_id": 123, "influencer": { "id": 123, "username": "...", ... }, "match_score": 92.0, "why_fit_summary": "...", "strengths": ["..."], "risks": [], "scoring_breakdown": { ... } } ], "created_by_user_id": 181, "created_at": "2026-04-02T12:00:00+00:00" } GET /ai/creator-finder/shortlists List shortlists (paginated). Query: per_page. GET /ai/creator-finder/shortlists/{id} Get shortlist with full creator profiles. DELETE /ai/creator-finder/shortlists/{shortlistId}/creators/{influencerId} Remove a creator from a shortlist. 4. Match Reasoning (/api/ai/match-reasoning) AI-generated explanation of creator-campaign fit. POST /ai/match-reasoning/generate Request Body: Field Type Required Description influencer_id integer Yes Creator to evaluate campaign_id integer No Existing campaign (auto-fills context) brief_parse_id integer No Link to a brief parse campaign_context object No Manual campaign details if no campaign_id campaign_context object: { "name": "Summer Fashion Launch", "objective": "Brand awareness", "budget": 50000, "platforms": ["instagram", "snapchat"], "target_audience": "18-35 females in Saudi Arabia" } Response (data): { "id": 1, "influencer_id": 123, "campaign_id": null, "brief_parse_id": null, "reasoning_output": { "overall_verdict": "Strong Match", "match_narrative": "This creator is an excellent fit because...", "audience_fit_score": 85, "geography_fit_score": 95, "content_fit_score": 80, "platform_fit_score": 100, "estimated_budget_fit_score": 70, "strengths": ["Strong GCC audience", "Fashion niche match"], "risks": ["Slightly above budget range"], "recommendations": ["Negotiate bulk deal", "Start with trial campaign"] }, "scoring_breakdown": { "audience_fit": 85, "geography_fit": 95, "content_fit": 80, "platform_fit": 100, "budget_fit": 70 }, "created_by_user_id": 181, "created_at": "2026-04-02T12:00:00+00:00" } GET /ai/match-reasoning/{id} Get reasoning details (includes influencer profile). POST /ai/match-reasoning/{id}/regenerate Regenerate reasoning for same creator+campaign. Creates a new record. 5. Lookalike Discovery (/api/ai/lookalikes) Find creators similar to seed creators using deterministic scoring. POST /ai/lookalikes/generate Request Body: Field Type Required Description seed_creator_ids integer[] Yes Array of influencer IDs (min 1) similarity_mode string No audience, niche, content_style, engagement_profile, mixed (default: mixed) platform string No Filter results to platform country string No Filter results to country tier string No nano, micro, mid, macro, mega limit integer No 1-100 (default: 20) name string No List name Similarity Modes: Mode Weights audience 40% followers + 40% geography + 10% engagement + 10% category niche 60% category + 20% geography + 10% followers + 10% engagement engagement_profile 50% engagement + 20% followers + 20% category + 10% geography mixed 25% each across all four factors Example Request: { "seed_creator_ids": [1, 2, 3], "similarity_mode": "niche", "platform": "instagram", "country": "SA", "limit": 20 } Response (data): { "id": 1, "name": "Lookalike List 2026-04-02 12:00", "seed_creator_ids": [1, 2, 3], "similarity_mode": "niche", "platform": "instagram", "country": "SA", "tier": null, "items_count": 20, "items": [ { "id": 1, "influencer_id": 45, "influencer": { "id": 45, "username": "...", ... }, "similarity_score": 87.5, "similarity_reason": "Same niche/category; Similar audience size", "cluster_label": "mid", "recommendation_notes": null, "scoring_data": { "follower_proximity": 85, "engagement_similarity": 90, "category_similarity": 100, "geography_similarity": 100 } } ], "created_by_user_id": 181, "created_at": "2026-04-02T12:00:00+00:00" } Cluster Labels (tier): Label Followers nano < 1K micro 1K - 10K mid 10K - 100K macro 100K - 1M mega 1M+ GET /ai/lookalikes List lookalike lists (paginated). Query: per_page. GET /ai/lookalikes/{id} Get full list with all candidates and influencer profiles. 6. Outreach Writer (/api/ai/outreach-drafts) AI-generated personalized outreach messages. POST /ai/outreach-drafts/generate Request Body: Field Type Required Description influencer_id integer Yes Target creator outreach_type string Yes paid, gifting, affiliate, ambassador campaign_id integer No Existing campaign tone string No professional, warm, premium, casual (default: professional) channel string No email, dm (default: email) cta_type string No Desired call-to-action text brand_voice_notes string No Brand voice guidance constraints string No Must-include elements campaign_context object No Manual campaign details Example Request: { "influencer_id": 123, "outreach_type": "paid", "tone": "professional", "channel": "email", "cta_type": "schedule a call", "brand_voice_notes": "Premium brand, elegant messaging", "campaign_context": { "name": "Summer Collection Launch", "objective": "Brand awareness" } } Response (data): { "id": 1, "campaign_id": null, "influencer_id": 123, "outreach_type": "paid", "tone": "professional", "channel": "email", "subject_line": "Partnership Opportunity: Summer Collection Launch", "outreach_message": "Dear [Creator Name],\n\nI hope this message finds you well...", "short_variant": "Hi [Creator]! Love your content...", "follow_up_variant": "Hi [Creator], following up on my previous message...", "personalization_points": ["Referenced recent fashion content", "Mentioned Saudi audience alignment"], "user_edits": null, "version": 1, "parent_draft_id": null, "created_by_user_id": 181, "created_at": "2026-04-02T12:00:00+00:00" } POST /ai/outreach-drafts/{id}/regenerate Regenerate with same inputs. New version with parent_draft_id link. GET /ai/outreach-drafts List drafts (paginated). Query: per_page, campaign_id. GET /ai/outreach-drafts/{id} Get draft details. PUT /ai/outreach-drafts/{id} Save user edits. Body: { "edits": { ... } } 7. Creator CRM (/api/creator-crm) Track creator relationships with interaction timeline and status tracking. POST /creator-crm Create a timeline entry. Request Body: Field Type Required Description influencer_id integer Yes Creator ID interaction_type string Yes See types below campaign_id integer No Campaign reference status string No See statuses below (default: prospect) note string No Freeform notes next_step string No Next action (max 500) metadata object No Any structured data Interaction Types (suggested values): outreach_sent, response_received, call_scheduled, call_completed, negotiation, contract_sent, contract_signed, content_review, content_approved, payment, note, status_change Statuses: prospect, shortlisted, contacted, interested, negotiating, no_response, active, archived Response (data): { "id": 1, "influencer_id": 123, "campaign_id": null, "interaction_type": "outreach_sent", "status": "contacted", "note": "Sent initial outreach email", "metadata": { "channel": "email" }, "next_step": "Follow up in 3 days", "created_by": { "id": 181, "name": "Admin User" }, "created_by_user_id": 181, "created_at": "2026-04-02T12:00:00+00:00", "updated_at": "2026-04-02T12:00:00+00:00" } GET /creator-crm/creators/{influencerId}/timeline Get interaction timeline (paginated, newest first). Query: per_page (default 20). GET /creator-crm/creators/{influencerId}/summary Get CRM summary for a creator. Response (data): { "influencer_id": 123, "total_interactions": 8, "current_status": "negotiating", "latest_interaction": { "type": "call_completed", "note": "Discussed rates and deliverables", "date": "2026-04-02T12:00:00+00:00" }, "next_step": "Send contract by Thursday", "interaction_types": { "outreach_sent": 2, "response_received": 1, "call_scheduled": 1, "call_completed": 1, "negotiation": 2, "note": 1 }, "status_history": [ { "from": "interested", "to": "negotiating", "reason": "Rate discussion started", "date": "2026-04-02T10:00:00+00:00" }, { "from": "contacted", "to": "interested", "reason": "Positive response", "date": "2026-04-01T14:00:00+00:00" }, { "from": "prospect", "to": "contacted", "reason": "Initial outreach", "date": "2026-03-30T09:00:00+00:00" } ], "campaigns_involved": [5, 12] } PUT /creator-crm/{id} Update entry. Status changes auto-create history records. Request Body: Field Type Description interaction_type string Update interaction type status string New status (triggers history log) note string Update note next_step string Update next action metadata object Update metadata status_change_reason string Reason for status change (logged in history) DELETE /creator-crm/{id} Delete a CRM entry (only the creator of the entry can delete it). Frontend Integration Flow (Recommended) Campaign Setup Flow Parse Brief → POST /ai/brief-parser/parse Review & Edit → PUT /ai/brief-parser/{id} (if corrections needed) Convert to Filters → POST /ai/brief-parser/{id}/convert-to-filters Generate Strategy → POST /ai/strategist/generate Search Creators → POST /ai/creator-finder/search (using filters from step 3) Save Shortlist → POST /ai/creator-finder/shortlist Creator Evaluation Flow Match Reasoning → POST /ai/match-reasoning/generate (for each shortlisted creator) Find Similar → POST /ai/lookalikes/generate (using top creators as seeds) Generate Outreach → POST /ai/outreach-drafts/generate (for approved creators) Track in CRM → POST /creator-crm (log each interaction) Status Pipeline (CRM) prospect → shortlisted → contacted → interested → negotiating → active ↘ no_response ↘ archived Error Handling for Frontend // Standard error handling pattern try { const response = await api.post('/ai/strategist/generate', data); if (response.data.status) { // Success: response.data.data contains the result const strategy = response.data.data; } } catch (error) { if (error.response?.status === 401) { // Redirect to login } else if (error.response?.status === 422) { // Validation errors: error.response.data.errors const fieldErrors = error.response.data.errors; } else if (error.response?.status === 404) { // Record not found or belongs to another user } else { // Server error } } Postman Collection Import the collection file for testing: postman/Sanad_AI_Module_API.postman_collection.json Setup: Import into Postman Run "Login" request first — token auto-saves Run requests in order — IDs auto-save between requests Collection variables: base_url, auth_token, strategy_run_id, brief_parse_id, shortlist_id, match_reasoning_id, lookalike_list_id, outreach_draft_id, crm_entry_id, influencer_id