Restructured the entire analysis pipeline from AI-guessing social handles to deterministic 3-phase discovery + collection + generation. Phase 1 (discover-channels): 3-source channel discovery - Firecrawl scrape: extract social links from HTML - Perplexity search: find handles via web search - URL regex parsing: deterministic link extraction - Handle verification: HEAD requests + YouTube API - DB: creates row with verified_channels + scrape_data Phase 2 (collect-channel-data): 9 parallel data collectors - Instagram (Apify), YouTube (Data API v3), Facebook (Apify) - 강남언니 (Firecrawl), Naver Blog + Place (Naver API) - Google Maps (Apify), Market analysis (Perplexity 4x parallel) - DB: stores ALL raw data in channel_data column Phase 3 (generate-report): AI report from real data - Reads channel_data + analysis_data from DB - Builds channel summary with real metrics - AI generates report using only verified data - V1 backwards compatibility preserved (url-based flow) Supporting changes: - DB migration: status, verified_channels, channel_data columns - _shared/extractSocialLinks.ts: regex-based social link parser - _shared/verifyHandles.ts: multi-platform handle verifier - AnalysisLoadingPage: real 3-phase progress + channel panel - useReport: channel_data column support + V2 enrichment merge - 강남언니 rating: auto-correct 5→10 scale + search fallback - KPIDashboard: navigate() instead of <a href> - Loading text: 20-30초 → 1-2분 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
17 lines
832 B
SQL
17 lines
832 B
SQL
-- Pipeline V2: Add columns for 3-phase analysis pipeline
|
|
-- Phase 1 (discover-channels) → Phase 2 (collect-channel-data) → Phase 3 (generate-report)
|
|
|
|
ALTER TABLE marketing_reports
|
|
ADD COLUMN IF NOT EXISTS status TEXT DEFAULT 'pending',
|
|
ADD COLUMN IF NOT EXISTS verified_channels JSONB DEFAULT '{}',
|
|
ADD COLUMN IF NOT EXISTS channel_data JSONB DEFAULT '{}',
|
|
ADD COLUMN IF NOT EXISTS pipeline_started_at TIMESTAMPTZ,
|
|
ADD COLUMN IF NOT EXISTS pipeline_completed_at TIMESTAMPTZ,
|
|
ADD COLUMN IF NOT EXISTS error_message TEXT;
|
|
|
|
-- Mark all existing rows as complete (they were generated by the old pipeline)
|
|
UPDATE marketing_reports SET status = 'complete' WHERE status IS NULL OR status = 'pending';
|
|
|
|
-- Index for frontend polling
|
|
CREATE INDEX IF NOT EXISTS idx_marketing_reports_status ON marketing_reports(id, status);
|