---
name: dashboard-auto-generation
description: Automatically convert uploaded data (CSV, Excel, JSON) into complete interactive dashboards with zero user input required. Detects patterns in PPC reports, sales data, analytics exports, and business metrics - then generates insights, recommendations, and visualizations instantly. Works seamlessly with CURV design system for on-brand outputs with tabs, funnels, filters, and multi-view layouts.
---
# Dashboard Auto-Generation
## Core Principle
**Show first, refine later.** Never ask "what do you want to see?" - analyze the data, detect patterns, and build a professional dashboard immediately.
## When to Activate
Activate this skill when user:
- Uploads a data file (CSV, Excel, JSON, TSV)
- Says "analyze this data"
- Asks for a "dashboard" or "report"
- Wants to "visualize" or "understand" data
- Mentions PPC, sales, analytics, or business metrics
**Do NOT ask questions** - just build the best dashboard you can from the data.
## CURV Design System Integration (CRITICAL - ALWAYS INCLUDE)
**β οΈ MANDATORY REQUIREMENT: Every dashboard MUST include the complete CURV header and footer exactly as shown below.**
**NEVER skip the header or footer. If you generate a dashboard without both, the output is incorrect and must be regenerated.**
### Header (MANDATORY - Copy this exact structure)
```html
```
**Required CSS for Header:**
```css
.curv-header {
text-align: center;
margin-bottom: 40px;
padding: 40px;
background: rgba(3, 12, 27, 0.6);
border-radius: 20px;
backdrop-filter: blur(10px);
border: 1.5px solid rgba(157, 78, 221, 0.5);
position: relative;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
}
/* CRITICAL: Rotating background shape animation */
.header-shape {
position: absolute;
top: 50%;
left: 50%;
width: 600px;
height: 600px;
background: linear-gradient(135deg,
rgba(157, 78, 221, 0.15) 0%,
rgba(157, 78, 221, 0.05) 50%,
transparent 100%);
border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%;
transform: translate(-50%, -50%);
animation: headerRotate 30s linear infinite;
opacity: 0.3;
z-index: 0;
}
@keyframes headerRotate {
from { transform: translate(-50%, -50%) rotate(0deg); }
to { transform: translate(-50%, -50%) rotate(360deg); }
}
.header-content {
display: flex;
flex-direction: column;
align-items: center;
gap: 0.75rem;
position: relative;
z-index: 1;
max-width: 800px;
}
.hero-title {
font-size: 72px;
font-weight: 700;
color: #ffffff;
letter-spacing: -2px;
text-align: center;
text-shadow: 0 0 25px rgba(255, 255, 255, 0.6),
0 0 50px rgba(255, 255, 255, 0.4),
0 0 100px rgba(157, 78, 221, 0.4);
margin: 0;
}
.hero-subtitle {
font-size: 20px;
color: rgba(255, 255, 255, 0.8);
text-align: center;
margin: 0;
max-width: 600px;
}
.powered-by {
font-size: 14px;
color: rgb(157, 78, 221);
letter-spacing: 1px;
text-align: center;
text-transform: uppercase;
font-weight: 500;
margin-top: 0.5rem;
}
/* Responsive header */
@media (max-width: 768px) {
.hero-title { font-size: 48px; }
.hero-subtitle { font-size: 16px; }
}
```
### Footer (MANDATORY - Copy this exact structure)
```html
```
**Required CSS for Footer:**
```css
.curv-footer {
text-align: center;
padding: 2rem;
margin-top: 3rem;
border-top: 1px solid rgba(157, 78, 221, 0.2);
color: rgba(255, 255, 255, 0.5);
}
.footer-title {
font-size: 16px;
color: #ffffff;
margin-bottom: 0.5rem;
}
.footer-subtitle {
font-size: 12px;
opacity: 0.7;
margin-bottom: 1rem;
color: rgba(255, 255, 255, 0.7);
}
.footer-credits {
font-size: 11px;
opacity: 0.5;
color: rgba(255, 255, 255, 0.7);
letter-spacing: 0.5px;
}
```
### Tab Navigation (When Multiple Views)
```html
π OVERVIEW
π EXPLORER
π FUNNEL
π OPPORTUNITIES
```
**Styling:**
- Inactive: Dark background `rgba(255, 255, 255, 0.05)`, white text
- Active: Purple background `rgb(157, 78, 221)`, white text
- Border radius: 12px
- Padding: 12px 24px
### Color System
```css
/* Backgrounds */
--bg-primary: rgb(3, 12, 27); /* Main background */
--bg-header: linear-gradient(180deg, rgb(18, 11, 41) 0%, rgb(13, 18, 41) 40%, rgb(4, 16, 32) 70%, rgb(3, 12, 27) 100%);
--bg-panel: rgba(255, 255, 255, 0.03); /* Glassmorphic panels */
/* Accents */
--accent: rgb(157, 78, 221); /* CURV Purple */
--accent-hover: rgb(177, 98, 241);
--accent-border: rgba(157, 78, 221, 0.5);
/* Status Colors */
--success: rgb(34, 197, 94); /* Green - Top Growing */
--warning: rgb(234, 179, 8); /* Yellow - Hidden Gem */
--danger: rgb(239, 68, 68); /* Red - Drop-off/Critical */
--info: rgb(59, 130, 246); /* Blue - Clicks/CTR */
/* Text */
--text-primary: #ffffff;
--text-muted: rgba(255, 255, 255, 0.7);
--text-dim: rgba(255, 255, 255, 0.5);
```
### Typography
```css
/* Fonts */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
body {
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
background: rgb(3, 12, 27);
color: #ffffff;
}
.hero-title {
font-size: 72px;
font-weight: 700;
letter-spacing: -2px;
text-shadow: 0 0 25px rgba(255, 255, 255, 0.6),
0 0 50px rgba(255, 255, 255, 0.4),
0 0 100px rgba(157, 78, 221, 0.4);
}
.metric-value {
font-size: 48px;
font-weight: 700;
letter-spacing: -1px;
}
.metric-label {
font-size: 14px;
text-transform: uppercase;
letter-spacing: 1px;
color: rgba(255, 255, 255, 0.7);
}
```
### Glassmorphic Panel Template
```css
.panel {
background: linear-gradient(135deg, rgba(18, 11, 41, 0.6), rgba(13, 18, 41, 0.6));
backdrop-filter: blur(10px);
border: 1px solid rgba(157, 78, 221, 0.3);
border-radius: 16px;
padding: 24px;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
}
```
### Button Styles
```css
.btn-primary {
background: linear-gradient(135deg, rgb(157, 78, 221), rgb(177, 98, 241));
color: white;
border: none;
border-radius: 12px;
padding: 12px 32px;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
}
.btn-primary:hover {
transform: translateY(-2px);
box-shadow: 0 8px 24px rgba(157, 78, 221, 0.4);
}
.btn-outline {
background: transparent;
color: rgb(157, 78, 221);
border: 2px solid rgba(157, 78, 221, 0.5);
border-radius: 12px;
padding: 10px 28px;
}
```
## Auto-Detection Patterns
### 1. PPC / Advertising Data
**Detect columns like:**
- Placement, Campaign, Ad Group, Keyword, Search Term
- Impressions, Clicks, Spend, Cost Per Click (CPC)
- Sales, Revenue, ROAS, ACOS, CTR, Conversion Rate
- Orders, Units, Add-to-Cart, Cart Adds
**Auto-generate tabs:**
1. **OVERVIEW** - 6 key metrics + top performers table
2. **EXPLORER** - Searchable/filterable table with all campaigns/keywords
3. **FUNNEL** - Impressions β Clicks β Cart Adds β Purchases (with CVR)
4. **OPPORTUNITIES** - Hidden gems, bottlenecks, drop-offs
### 2. Sales / E-commerce Data
**Detect columns like:**
- Date, Product, SKU, Category, ASIN
- Units, Revenue, Profit, Price
- Orders, Customers, Sessions
- Returns, Refunds
**Auto-generate tabs:**
1. **OVERVIEW** - Revenue, units, AOV, profit metrics
2. **EXPLORER** - Product performance table with filters
3. **FUNNEL** - Sessions β Views β Cart β Purchase (if session data)
4. **OPPORTUNITIES** - Low stock, high return rate, underperformers
### 3. Analytics / Traffic Data
**Detect columns like:**
- Date, Source, Medium, Campaign, Keyword
- Sessions, Users, Pageviews, Bounce Rate
- Conversion Rate, Goal Completions, Events
- Avg Session Duration, Pages per Session
**Auto-generate tabs:**
1. **OVERVIEW** - Sessions, users, CVR, bounce rate
2. **EXPLORER** - Source/medium breakdown with filters
3. **FUNNEL** - Landing β Engagement β Conversion
4. **OPPORTUNITIES** - High bounce sources, conversion opportunities
### 4. Accounting / Financial Data
**Detect columns like:**
- Date, Account, Category, Transaction Type
- Amount, Debit, Credit, Balance
- Vendor, Customer, Invoice
**Auto-generate tabs:**
1. **OVERVIEW** - Total income, expenses, profit, cash flow
2. **EXPLORER** - Transaction table with filters (vendor, category, date)
3. **NO FUNNEL** - Not applicable for accounting
4. **OPPORTUNITIES** - Top expenses, late invoices, cash flow issues
### 5. Support Tickets / CRM Data
**Detect columns like:**
- Ticket ID, Status, Priority, Category
- Created Date, Resolved Date, Response Time
- Agent, Customer, Satisfaction Score
**Auto-generate tabs:**
1. **OVERVIEW** - Total tickets, avg resolution time, satisfaction
2. **EXPLORER** - Ticket table with filters (status, agent, category)
3. **FUNNEL** - New β In Progress β Resolved
4. **OPPORTUNITIES** - Overdue tickets, low satisfaction, bottlenecks
## Tab System (When to Use)
### Use Tabs When:
- Dataset has >100 rows (need explorer for search/filter)
- Data supports funnel visualization (impressionsβclicksβconversions)
- Multiple opportunity types exist (hidden gems, bottlenecks, drop-offs)
### Single Page When:
- Dataset <50 rows (all fits on overview)
- Simple report with few metrics
- No funnel or exploration needed
### Tab Structure
```html
π OVERVIEW
π EXPLORER
π FUNNEL
π OPPORTUNITIES
```
## Overview Tab (Always Required)
### Structure:
1. **Performance Summary Section** (4-6 large metric cards)
2. **Top Performers Table** (top 10 by primary metric)
3. **Insights Section** (3-5 key insights with "What this means" tooltips)
### Metric Cards with Icons:
```html
ποΈ
βΉοΈ What this means
```
**Icon mapping for PPC:**
- Impressions: ποΈ
- Clicks: π±οΈ
- Basket Adds: π
- Purchases: π°
- Spend: π³
- Sales: π
### Tooltip Content:
```html
```
## Explorer Tab (When >100 Rows)
### Structure:
1. **Search Bar** (filter across all text columns)
2. **Performance Score Legend** (color-coded badges)
3. **Sortable Table** (click column headers to sort)
4. **Pagination** (10/20/50 per page dropdown)
### Search Implementation:
```html
10 per page
20 per page
50 per page
3 results
```
### Performance Score Badges:
```html
```
**Badge colors:**
- Excellent (51-100%): Green `rgb(34, 197, 94)`
- Good (26-50%): Yellow `rgb(234, 179, 8)`
- Needs Work (0-25%): Red `rgb(239, 68, 68)`
### Sortable Table:
```html
SEARCH QUERY β¬
SCORE β¬
IMPRESSIONS β¬
CLICKS β¬
CTR % β¬
ROAS β¬
```
### Classification Badges in Table:
```html
β STABLE PERFORMER
β -24%
```
**Badge types:**
- Rising Star: `β RISING STAR` (purple)
- Stable Performer: `β STABLE PERFORMER` (blue)
- Needs Attention: `β οΈ NEEDS ATTENTION` (red)
## Funnel Tab (When Funnel Data Exists)
### When to Create Funnel:
**PPC Data:** Impressions β Clicks β Cart Adds β Purchases
**E-commerce:** Sessions β Views β Cart β Purchase
**Analytics:** Landing β Engagement β Goal Completion
**Support:** New β In Progress β Resolved
### Funnel Visualization:
```html
Customer Journey Funnel
Track your customer journey from first impression to final purchase. Spot bottlenecks instantly and discover growth opportunities.
ποΈ
Impressions
50.9K
9.7% market share
π±οΈ
Clicks
2.6K
5.1% CVR
β οΈ Critical Drop-off
Impressions β Clicks
Critical Stage
π‘ Understanding Your Sales Funnel
ποΈ
Impressions
Shoppers see your product in search results
β
π±οΈ
Clicks
Interested shoppers click to learn more
β
π
Cart Adds
Convinced shoppers add to cart
β
π°
Purchases
Final step: completed sales
```
### Funnel Styling:
```css
.funnel-visual {
display: flex;
flex-direction: column;
align-items: center;
gap: 0;
margin: 40px 0;
}
.funnel-stage {
background: linear-gradient(90deg, rgba(157, 78, 221, 0.3) 0%, rgba(157, 78, 221, 0.1) 100%);
border: 2px solid rgba(157, 78, 221, 0.5);
border-radius: 12px;
padding: 32px;
text-align: center;
position: relative;
transition: all 0.3s ease;
}
.funnel-drop {
display: flex;
flex-direction: column;
align-items: center;
padding: 12px 0;
}
.drop-badge {
background: rgba(239, 68, 68, 0.2);
border: 1px solid rgb(239, 68, 68);
color: rgb(239, 68, 68);
padding: 6px 16px;
border-radius: 20px;
font-size: 14px;
font-weight: 600;
}
.drop-badge.critical {
animation: pulse 2s ease-in-out infinite;
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.6; }
}
.cvr-badge {
background: rgba(34, 197, 94, 0.2);
color: rgb(34, 197, 94);
padding: 4px 12px;
border-radius: 12px;
font-size: 12px;
font-weight: 600;
}
```
### Drop-off Severity:
- **Critical (>80%):** Red badge with pulse animation
- **Warning (50-80%):** Yellow/orange badge
- **Normal (<50%):** Muted display, no badge
## Opportunities Tab (Always Include)
### Structure:
1. **Opportunities Legend** (category badges)
2. **Impact Level Filter Buttons** (High/Medium/Low)
3. **Opportunity Cards** (sorted by impact)
### Opportunities Legend:
```html
Opportunities Legend
π
Hidden Gem
Low market share, high conversion
β οΈ
Funnel Bottleneck
High traffic, poor conversion
π
Share Opportunity
Strong metrics, growth potential
Impact Levels
High Impact
10,000+ impressions
Medium Impact
3,000-10,000 impressions
Low Impact
<3,000 impressions
```
### Impact Filter Buttons:
```html
π‘ Hover over any opportunity card for detailed performance breakdown
β οΈ HIGH IMPACT 4
π― MEDIUM IMPACT 1
β LOW IMPACT 0
```
### Opportunity Cards:
```html
Hidden Gem
wireless headphones
Low market share but high conversion rate - untapped potential
Impressions:
15,420
Clicks:
892
Purchases:
87
CVR:
0.56%
EXPLORE INSIGHTS
```
### Opportunity Detection Logic:
**Hidden Gem:**
- Market share <10% (impressions)
- CVR >0.4% or ROAS >3.0x
- Badge: Purple π
**Funnel Bottleneck:**
- High impressions (>10,000)
- Low CTR (<3%) OR low cart-to-purchase rate (<40%)
- Badge: Red β οΈ
**Share Opportunity:**
- All metrics above average
- Market share potential (CTR >5%, CVR >0.5%)
- Badge: Green π
**Priority Calculation:**
```
Impact Score = (Impressions / 1000) Γ CVR Γ ROAS
High Impact: >10
Medium Impact: 3-10
Low Impact: <3
```
## Search & Filter Implementation
### Search Functionality:
```javascript
const searchInput = document.getElementById('search-input');
const tableBody = document.getElementById('table-body');
searchInput.addEventListener('input', (e) => {
const searchTerm = e.target.value.toLowerCase();
const rows = tableBody.querySelectorAll('tr');
let visibleCount = 0;
rows.forEach(row => {
const text = row.textContent.toLowerCase();
if (text.includes(searchTerm)) {
row.style.display = '';
visibleCount++;
} else {
row.style.display = 'none';
}
});
document.querySelector('.results-count').textContent = `${visibleCount} results`;
});
```
### Sortable Table:
```javascript
document.querySelectorAll('.sortable').forEach(header => {
header.addEventListener('click', () => {
const column = header.getAttribute('data-column');
const rows = Array.from(tableBody.querySelectorAll('tr'));
const isAscending = header.classList.contains('asc');
rows.sort((a, b) => {
const aVal = a.querySelector(`[data-column="${column}"]`).textContent;
const bVal = b.querySelector(`[data-column="${column}"]`).textContent;
// Handle numeric vs text sorting
if (!isNaN(aVal) && !isNaN(bVal)) {
return isAscending ? aVal - bVal : bVal - aVal;
}
return isAscending ? aVal.localeCompare(bVal) : bVal.localeCompare(aVal);
});
// Clear existing order
tableBody.innerHTML = '';
rows.forEach(row => tableBody.appendChild(row));
// Toggle sort direction
document.querySelectorAll('.sortable').forEach(h => h.classList.remove('asc', 'desc'));
header.classList.add(isAscending ? 'desc' : 'asc');
});
});
```
## Insight & Recommendation Cards
### Insight Cards with Tooltips:
```html
π Key Insights
β
Product Pages outperform all placements
5.84x ROAS vs 2.1x average
```
### Recommendation Cards:
```html
π― Actionable Recommendations
1
Reallocate 40% of "Rest of Search" budget to "Product Pages"
Rest of Search shows 33.5% ACOS vs Product Pages at 17.1% ACOS
Expected Impact:
Overall ACOS drops from 25.5% to ~22%
π΄ High Priority
```
## Performance Summary Cards
### Conversion Rate Cards (for Funnel):
```html
```
## File Naming Convention
```
[dashboard-name]-[date].html
Examples:
- ppc-placement-dashboard-2025-10-19.html
- sales-performance-dashboard-2025-10-19.html
- website-analytics-dashboard-2025-10-19.html
```
## Quality Gates
**CRITICAL - Before delivering ANY dashboard, verify:**
**π¨ MANDATORY (Dashboard is INVALID without these):**
- β
CURV header with rotating background animation (`.header-shape` with `@keyframes headerRotate`)
- β
Hero title with white glow effect (`text-shadow: 0 0 25px...`)
- β
"POWERED BY CURV" text in purple (`rgb(157, 78, 221)`)
- β
CURV footer with three lines: title, subtitle, credits
- β
Footer credits: "Produced By Danny McMillan | CURV Tools | A Seller Sessions Production 2025"
**β οΈ OUTPUT FORMAT REQUIREMENT:**
- β
Must be standalone HTML file (NOT React JSX, NOT component code)
- β
Complete `` with `` and ``
- β
All CSS in `
π OVERVIEW
π EXPLORER
π FUNNEL
π OPPORTUNITIES
```
## Success Criteria
This skill works correctly when:
- β
User uploads file β Complete tabbed dashboard generated automatically
- β
Header and footer match CURV production tools exactly
- β
Purple accent color used throughout
- β
Funnel visualization shows drop-offs with CVR
- β
Opportunities categorized by impact level
- β
Search and sort fully functional
- β
All tooltips provide useful context
- β
Dashboard is visually identical to SQPR Analyser style
- β
Zero questions asked before generation
- β
User can make immediate business decisions from output