skills/data-viz-commercials/SKILL.md
Expert in turning data visualizations into compelling video and animation content for social media and marketing. Activate on: data commercial, animated chart, data storytelling video, chart animation, Remotion data video, Motion Canvas, Flourish animation, D3 animation, data viz social media, dashboard recording, data narrative video. NOT for: static data visualization (use data-viz-2025), general video editing (use video-processing-editing), full video production pipeline (use ai-video-production-master).
npx skillsauth add curiositech/windags-skills data-viz-commercialsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Expert in turning data stories into compelling video and animation content — the intersection of data visualization, motion design, and narrative storytelling that makes data shareable on social media.
IF need 100+ personalized videos from dataset
→ Use Remotion (React-based, data-driven)
ELSE IF need explainer with voice-over sync
→ Use Motion Canvas (TypeScript generators)
ELSE IF need bar chart race for social media quickly
→ Use Flourish (no-code, built-in templates)
ELSE IF recording existing dashboard
→ Use OBS Studio + screen capture
ELSE IF custom web interactive
→ Use D3 + GSAP
IF audience = social media (Twitter/LinkedIn)
→ Hook (0-3s) → Insight (3-15s) → Proof (15-25s) → CTA (25-30s)
ELSE IF audience = presentation/explainer
→ Context (0-10s) → Problem (10-20s) → Data reveal (20-45s) → Solution (45-60s)
ELSE IF audience = educational
→ Question (0-5s) → Setup (5-15s) → Step-by-step reveal (15-50s) → Summary (50-60s)
IF showing magnitude/comparison
→ Grow bars from zero (1-2s per group)
ELSE IF showing trend over time
→ Line drawing left-to-right (2-3s total path)
ELSE IF showing transformation
→ Morph transition (1-1.5s between states)
ELSE IF showing multiple categories
→ Cascade reveal (0.2s stagger between items)
IF target = Instagram/TikTok/YouTube Shorts
→ 9:16 aspect, <60s duration, mobile-first text sizing
ELSE IF target = Twitter/LinkedIn
→ 16:9 or 1:1 aspect, 30-90s duration, high contrast colors
ELSE IF target = presentations
→ 16:9 aspect, 60-300s duration, detailed annotations
| Anti-Pattern | Detection Rule | Diagnosis | Fix |
|--------------|----------------|-----------|-----|
| Over-Animation Chaos | If every element bounces/spins/zooms simultaneously | Too much motion competing for attention | Remove decorative animations; animate only to reveal data insights |
| Unclear Data Arc | If viewer asks "what am I supposed to see?" after 15 seconds | No narrative thread connecting charts | Apply Hook→Context→Insight→Proof→CTA structure; one insight per video |
| Long Render Blocks | If Remotion render takes >10min for 60s video | Inefficient frame calculations or complex animations | Profile with npx remotion studio; simplify interpolations; cache expensive computations |
| Mobile Text Illegibility | If text <24pt or thin fonts used | Optimized for desktop, fails on phone | Test on actual phone at 480p; use bold fonts; minimum 24pt size |
| Audio-Visual Desync | If narration doesn't match chart reveals | Timeline not planned with audio script | Storyboard frame-by-frame; use waitFor() in Motion Canvas; sync points every 5-10s |
Scenario: Client needs 500 personalized "Year in Review" videos for enterprise customers, each showing their specific usage data.
Decision Process:
Remotion Implementation:
export const CustomerReview: React.FC<{data: CustomerData}> = ({data}) => {
return (
<AbsoluteFill style={{backgroundColor: '#0f172a'}}>
<Sequence from={0} durationInFrames={90}>
<Txt fill="white" fontSize={60}>
{data.companyName}'s 2025 Growth
</Txt>
</Sequence>
<Sequence from={90} durationInFrames={120}>
<AnimatedCounter
from={0}
to={data.totalUsers}
suffix=" users added"
/>
</Sequence>
</AbsoluteFill>
);
};
Batch Render:
npx remotion render src/index.ts CustomerReview \
--props-from-file=customers.json \
--concurrency=4 \
out/
Result: 500 videos rendered overnight vs. weeks of manual work. Engagement increased 340% vs. static PDFs.
Scenario: Complex financial dashboard with 12 charts showing quarterly performance.
Novice Approach: Animate all 12 charts in sequence (3+ minute video) Expert Decision: Too much cognitive load; attention will drop after 30 seconds
Solution:
Animation Strategy:
Result: 45-second focused video + static comprehensive report drove 85% more click-throughs than 3-minute version.
[ ] Audio-text sync verified (narration matches chart reveals within 0.5s)
[ ] Color contrast meets WCAG AA (4.5:1 ratio minimum for text)
[ ] Call-to-action text is legible at 480p on mobile device
[ ] Each scene duration is <3 seconds (maintains social media attention)
[ ] Data trends are visible when viewed at phone screen size
[ ] Animation serves comprehension (every motion reveals data insight)
[ ] Single clear narrative thread connects all charts
[ ] Data source, units, and timeframe are labeled
[ ] Background music does not overpower narration (≤-12dB relative)
[ ] Video file under 100MB for social media upload limits
[ ] Thumbnail frame compelling without playing video
[ ] Exported in platform-native aspect ratio (no black bars)
This skill should NOT be used for:
data-viz-2025 insteadvideo-processing-editing insteadai-video-production-master insteaddata-viz-2025 with D3 interactivityai-video-production-master for multi-chapter structureDelegate when:
data-ai
license: Apache-2.0 NOT for unrelated tasks outside this domain.
development
Use when designing caching strategies (cache-aside, write-through, write-behind), implementing distributed locks, building rate limiters, leaderboards, real-time streams (XADD/consumer groups), pub/sub, or tuning eviction policies. Triggers: thundering-herd on cache miss, dogpile on key expiry, Redlock vs SET-NX-PX choice, sliding-window rate limiter, hot-key on a single cluster slot, big-key blowup, MULTI/EXEC across slots, KEYS in production. NOT for Redis Cluster operations/admin (different domain), embedded KV (SQLite, leveldb), in-process LRU caches, or Memcached.
tools
Drawing the `'use client'` boundary correctly in React Server Components apps (Next.js App Router, RSC frameworks) — leaf-pushing, slot composition, serialization rules, and environment poisoning prevention. Grounded in react.dev and Next.js 16 docs.
development
Use when designing rate limiting for an API, choosing between token bucket / sliding window / leaky bucket / fixed window, implementing it in Redis, deciding edge (Cloudflare/Upstash) vs origin enforcement, sizing per-user vs per-IP vs per-endpoint quotas, returning the right 429 response with Retry-After, or fixing the boundary-burst bug in fixed-window limiters. Triggers: 429 too many requests, INCR + EXPIRE, ZADD + ZREMRANGEBYSCORE + ZCARD, X-RateLimit-Remaining header, Cloudflare WAF rate limiting rules, Upstash @upstash/ratelimit, leaky bucket shaping vs policing, distributed rate limiter consistency. NOT for DDoS mitigation specifically (different scale), CAPTCHA / bot management, full WAF design, or per-user quota billing.