batch-report-generator
Generate GenuVerity fact-check reports from structured input (Gemini research output). Use /batch-report to process research into HTML reports. Optimized for token efficiency - expects pre-researched sources.
When & Why to Use This Skill
The Batch Report Generator is a high-efficiency Claude skill designed to transform structured research data into professional, SEO-optimized HTML fact-check reports. It streamlines the transition from raw research to published content by automating HTML generation, source validation, and interactive data visualization using Chart.js. Optimized for token efficiency, it allows users to process multiple claims simultaneously, ensuring a consistent and rigorous standard for media verification and journalistic integrity.
Use Cases
- Automated Journalism: Rapidly converting bulk research data from AI models like Gemini into standardized, web-ready fact-check reports.
- Misinformation Combat: Generating high-volume verification reports with clear verdicts (False, Misleading, etc.) to address trending claims in real-time.
- Data-Driven Reporting: Creating interactive charts and visual evidence automatically from structured JSON data to enhance reader engagement and transparency.
- Content Pipeline Optimization: Streamlining the workflow for media platforms by automating source validation, sitemap updates, and technical SEO tasks for new reports.
| name | batch-report-generator |
|---|---|
| description | Generate GenuVerity fact-check reports from structured input (Gemini research output). Use /batch-report to process research into HTML reports. Optimized for token efficiency - expects pre-researched sources. |
| allowed-tools | Read, Write, Edit, Bash, Glob, Grep, WebFetch |
Batch Report Generator
Generate fact-check reports from pre-researched input (e.g., Gemini Deep Research output).
Quick Start
/batch-report
Then paste your structured input (see format below).
Structured Input Format
Paste this JSON format with your Gemini research:
{
"reports": [
{
"slug": "claim-name-2025",
"title": "The Full Claim Title",
"verdict": "FALSE",
"claim": "One sentence: what was claimed",
"claimant": "Who made the claim",
"date": "Jan 2025",
"category": "Health & Medical",
"sources": [
{
"title": "Primary Source Name",
"url": "https://example.com/article",
"quote": "Key quote that supports/refutes the claim..."
}
],
"context": "2-3 sentences explaining why this verdict was reached. From Gemini research."
}
]
}
Gemini Prompt Template
Copy this to Gemini for Deep Research:
Research these fact-check topics. For EACH topic, provide:
1. VERDICT: FALSE / MISLEADING / MIXED / CONTEXT NEEDED
2. CLAIM: One sentence summary of what was claimed
3. CLAIMANT: Who made the claim (person/organization)
4. DATE: When the claim was made
5. SOURCES: 10-15 primary sources (NO Wikipedia), each with:
- Title
- URL
- Key quote (verbatim)
6. CONTEXT: 3 sentences explaining the verdict
TOPICS:
1. [Topic 1]
2. [Topic 2]
3. [Topic 3]
...
Format your response as JSON matching this structure:
{
"reports": [
{
"slug": "topic-name-2025",
"title": "Full Title",
"verdict": "FALSE",
"claim": "...",
"claimant": "...",
"date": "...",
"category": "...",
"sources": [{"title": "...", "url": "...", "quote": "..."}],
"context": "..."
}
]
}
Categories
Use one of these category values:
U.S. Politics & PolicyHealth & MedicalAI & DeepfakesImmigration & BorderInternational AffairsEconomic ClaimsConspiracy & HoaxesPlatform & TechMedia & Journalism
Verdicts
| Verdict | When to Use |
|---|---|
FALSE |
Claim is demonstrably untrue |
MISLEADING |
Contains truth but distorts context |
MIXED |
Partially true, partially false |
CONTEXT |
Needs additional context to evaluate |
What This Skill Does
- Parses your structured JSON input
- Validates all source URLs exist (via WebFetch)
- Generates HTML from
docs/report-template-2025.html - Creates Chart.js visualization based on data
- Adds entry to
js/reports-data.js - REQUIRES MANUAL RUN:
node tools/sync-chart-configs.js(see warning below) - Runs
./validate-report.shto verify - Commits to feature branch
WARNING: CHART SYNC IS NOT AUTOMATIC
After generating reports, you MUST manually run:
node tools/sync-chart-configs.jsWithout this, carousel thumbnails will show wrong/placeholder data. This step extracts chart data from HTML and updates reports-data.js.
CRITICAL: Chart Height Constraint
ALWAYS wrap canvas in height-constrained div. NEVER use height attribute on canvas:
<!-- ❌ WRONG - Chart expands to 20,000+ pixels -->
<canvas id="myChart" height="220"></canvas>
<!-- ✅ CORRECT - Height constrained by wrapper -->
<div style="height: 280px; position: relative;">
<canvas id="myChart"></canvas>
</div>
CRITICAL: Float-Figure Placement (Text Wrap)
ALWAYS place float-figures BEFORE the text that should wrap around them:
<!-- ✅ CORRECT - Text wraps beside chart -->
<section>
<h2>Section Title</h2>
<figure class="float-figure">...chart...</figure>
<p>This paragraph wraps beside the chart.</p>
<p>More text continues wrapping.</p>
</section>
<!-- ❌ WRONG - Chart at end, no text to wrap -->
<section>
<h2>Section Title</h2>
<p>This text appears ABOVE the chart.</p>
<figure class="float-figure">...chart...</figure>
</section> <!-- Nothing after figure! -->
Key rules:
- Place figure IMMEDIATELY AFTER
<h2>or BEFORE paragraphs - Ensure 2-3 paragraphs of text FOLLOW the figure
- NEVER place a figure as the last element in a section
Token Optimization
This skill is designed for minimal token usage:
- Expects pre-researched sources (no web search needed)
- Uses template-based generation (no creative writing)
- Batch processes multiple reports
- Caches verified URLs
Output
For each report:
localreports/{slug}.html- The report HTML- Entry in
js/reports-data.jswith chart config - Updated sitemaps via
node tools/generate-sitemaps.js - Synced chart thumbnails via
node tools/sync-chart-configs.js
CRITICAL: Chart Thumbnail Sync (MANDATORY)
After creating ANY new reports, ALWAYS run:
node tools/sync-chart-configs.js
This syncs the chart configs in js/reports-data.js to match the actual charts in each HTML report. Without this step, carousel cards show wrong/blank chart previews.
Post-generation checklist:
- ✅ Create HTML reports in
localreports/ - ✅ Add entries to
js/reports-data.js - ✅ Run:
node tools/generate-sitemaps.js - ✅ Run:
node tools/sync-chart-configs.js← MANDATORY - ✅ Run:
./validate-report.shon each report - ✅ Commit and push
Example Workflow
- You: Ask Gemini to research 5 topics (20 min)
- You: Paste Gemini's JSON output here
- Claude: Generates 5 HTML reports (~5 min)
- Claude: Commits to feature branch
- You: Review on Vercel preview
References
- REPORTS.md - Full report guidelines
- VISUAL_STANDARDS.md - Colors & charts
- report-template-2025.html - HTML template
REMINDER: Option B Automation
After testing this workflow, build full automation:
- Agent SDK batch processor script
- Playwright MCP for source verification
- Research cache system
- Queue-based processing