Date: Dec 9, 2025
Purpose: Compare blog and keyword generation UI/data to identify gaps
interface Keyword {
keyword: string
intent: string
score: number
cluster: string
source: string
volume: number | null
difficulty: number | null
aeo_opportunity: number | null
has_featured_snippet: boolean | null
has_paa: boolean | null
// ENHANCED DATA (newly added)
research_data: {
sources: Array<{
platform: string
url: string
quote: string
title: string
// ... more fields
}>
total_sources_found: number
platforms_searched: string[]
} | null
content_brief: {
content_angle: string
target_questions: string[]
audience_pain_point: string
sources: Array<{ // ← NEW: Source attribution
platform: string
url: string
title: string
}>
} | null
serp_data: {
organic_results: Array<{
position: number
url: string
title: string
description: string
meta_tags: object // ← NEW: Meta tags
}>
featured_snippet: object | null
paa_questions: Array<object>
} | null
trends_data: object | null
autocomplete_data: object | null
citations: Array<object>
}interface BlogResult {
title: string
content: string // Full Markdown content
metadata: {
keyword: string
word_count: number
generation_time: number
company_name: string
company_url: string
aeo_score?: number
job_id?: string
slug?: string
}
}Verdict: Blogs return MUCH LESS data than keywords. Only basic metadata.
Results Table:
- ✅ Basic columns: Keyword, Intent, Score, Cluster, Source, Volume, Difficulty, AEO Opp., Features
- ✅ Expandable rows for enhanced data:
- Research sources with clickable links
- Content brief with sources
- SERP data with meta tags
- Google Trends data
- Citations
- ✅ CSV export with 12+ columns (all enhanced data)
- ✅ Progress bar: 7-stage with substages (simulated, 4-5 min)
Example Enhanced Display:
📊 Research Data (3 sources)
🔎 Reddit: "Users were looking for X" → [clickable URL]
🔎 Quora: "Common pain point Y" → [clickable URL]
📝 Content Brief
Content Angle: "Focus on Z"
Target Questions: Q1, Q2, Q3
Audience Pain Point: "Users struggle with..."
Sources:
🔎 Platform: Title → [clickable URL]
Results Display:
- ✅ Basic info: Keyword, Title, Word Count, AEO Score, Status
- ❌ NO expandable rows
- ❌ NO enhanced data display
- ✅ CSV export but only 5 columns: Keyword, Title, Word Count, AEO Score, Status
- ✅ Progress bar: 6-stage (simulated, similar to keywords)
- ✅ Download individual blog as Markdown
Example Display:
1. AI in healthcare
"How AI is Transforming Healthcare in 2025"
1,234 words • AEO: 78/100
[Download]
Verdict: Blogs UI is MUCH SIMPLER than keywords. No enhanced data display.
Based on openblog pipeline, the following data is generated but NOT displayed in UI:
- Source URLs with validation
- Citation format (APA/MLA/Chicago)
- Keywords show: ✅ Citations in expandable row
- Blogs show: ❌ Not displayed
- Links to other blogs
- Anchor text suggestions
- Keywords show: N/A (not applicable)
- Blogs show: ❌ Not displayed (but generated)
- Section headings
- Jump links
- Keywords show: N/A
- Blogs show: ❌ Not displayed (but in content)
- Meta title
- Meta description
- Open Graph tags
- Keywords show: N/A
- Blogs show: ❌ Not displayed
- Questions extracted
- Answers generated
- Keywords show: ✅ PAA questions in SERP data
- Blogs show: ❌ Not displayed (but in content)
- Featured image URL
- Alt text
- Image prompt used
- Keywords show: N/A
- Blogs show: ❌ Not displayed
- Individual component scores
- Suggestions for improvement
- Keywords show: ✅ AEO opportunity score
- Blogs show:
⚠️ Only total score (78/100)
- Full HTML with proper structure
- Semantic tags
- Keywords show: N/A
- Blogs show: ❌ Not displayed (only Markdown)
Show enhanced data for each blog:
- ✅ Citations (with clickable links)
- ✅ Internal links generated
- ✅ FAQ/PAA questions
- ✅ Meta tags (title, description, OG)
- ✅ Image data (URL, alt text, prompt)
- ✅ AEO score breakdown
Add columns:
citations_countinternal_links_countfaq_countmeta_titlemeta_descriptionimage_urlaeo_score_breakdown
Extend BlogResult interface to include:
interface BlogResult {
title: string
content: string
html?: string // Full HTML output
metadata: {
keyword: string
word_count: number
generation_time: number
company_name: string
company_url: string
aeo_score?: number
job_id?: string
slug?: string
// NEW: Enhanced metadata
meta_title?: string
meta_description?: string
og_image?: string
}
// NEW: Enhanced data
citations?: Array<{
id: number
type: string
source: string
url: string
text: string
}>
internal_links?: Array<{
anchor_text: string
target_slug: string
target_title: string
}>
faq?: Array<{
question: string
answer: string
}>
image?: {
url: string
alt_text: string
prompt: string
}
aeo_breakdown?: {
citations_score: number
structure_score: number
readability_score: number
keyword_optimization_score: number
total_score: number
}
}- ✅ Replace
blog-writerfiles with latestopenblog - ✅ Update
scripts/generate-blog.pyto return enhanced data - ✅ Update
BlogGenerator.tsxto display enhanced data - ✅ Add expandable rows (copy pattern from
KeywordGenerator.tsx)
- ❌ Blog UI is outdated - Missing 2-7 days of
openblogimprovements - ❌ No enhanced data display - Unlike keywords, blogs don't show rich data
- ❌ Limited CSV export - Only 5 columns vs 12+ for keywords
- ❌ No source attribution - Citations exist but not displayed
- ❌ No expandable rows - Can't see detailed blog metadata
- Sync OpenBlog - Replace
blog-writerwith latestopenblog(or convert to submodule) - Update Bridge Script - Modify
scripts/generate-blog.pyto return all enhanced data - Extend TypeScript Interfaces - Add enhanced fields to
BlogResult - Update UI Component - Add expandable rows to
BlogGenerator.tsx(copy from keywords) - Enhance CSV Export - Add 10+ new columns with enhanced data
- Test Integration - Verify all data flows from Python → API → UI
Recommendation: Achieve full parity with keywords UI by displaying all enhanced blog data.