Show Me How

Create interactive HTML widgets, charts, dashboards, and visual explainers rendered inline in chat. Use when user needs interactive visualizations, data exploration tools, calculators, or visual explanations. Triggers include "show me how", "visualize", "interactive chart", "make a widget", "show me how X works", "build a calculator", "create a dashboard", "interactive explainer", "explore this data", "chart this", "graph", "plot".

Published by rebyteai

Featured Slash Menu Development

Cloud-native skill

Runs in the cloud

No local installation

Dependencies pre-installed

Ready to run instantly

Secure VM environment

Isolated per task

Works on any device

Desktop, tablet, or phone

Documentation

Show Me How — Interactive Widget Skill

Aesthetic system and design patterns adapted from nicobailon/visual-explainer.

Generate interactive HTML widgets that render inline in chat as sandboxed iframes.

Output Format

Wrap HTML in a fenced code block with widget language tag:

```widget
<html data-aesthetic="editorial" data-font="crimson-pro">...</html>
```

Do NOT save widgets as files. Output them directly in your response.

Size Limit

Total widget size must be under 5 MB. For larger assets (images, audio), use the embed-assets skill to compress and base64-encode them first.

Aesthetic Direction (MANDATORY)

Before generating, pick ONE aesthetic. Set it as data-aesthetic="name" on the <html> element. The frontend resolves this to actual colors — never hardcode hex colors.

Aesthetic Feel Best for
editorial Serif headlines, generous whitespace, earth tones + gold Reports, narratives, overviews
blueprint Technical drawing, grid feel, slate/blue palette Architecture, system diagrams, specs
paper-ink Warm cream, terracotta/sage, informal warmth Tutorials, explainers, creative
mono-terminal Green/amber on dark, CRT feel, monospace CLI tools, logs, technical demos
data-dense Tight spacing, small type, maximum information Dashboards, tables, data-heavy
warm Peach/cream palette, friendly, approachable General purpose
dracula Purple-heavy, Dracula IDE color scheme Developer tools, code-focused
nord Cool arctic blues, Nord color scheme Clean, minimalist

Constrained aesthetics (editorial, blueprint, paper-ink, mono-terminal) produce more distinctive results. Flexible aesthetics (data-dense, dracula, nord, warm) are safer but less unique.

If unsure, pick one. The frontend randomizes when omitted.

Font Pairing (MANDATORY)

Pick ONE font pair. Set it as data-font="name" on the <html> element. The frontend loads the actual Google Fonts — do not add <link> tags for fonts yourself.

Name Body font Code font Voice
dm-sans DM Sans Fira Code Clean, modern sans
instrument-serif Instrument Serif JetBrains Mono Literary, editorial
ibm-plex IBM Plex Sans IBM Plex Mono Technical, precise
bricolage Bricolage Grotesque Fragment Mono Bold, contemporary
jakarta Plus Jakarta Sans Azeret Mono Friendly, rounded
outfit Outfit Space Mono Geometric, clean
sora Sora IBM Plex Mono Modern, geometric
crimson-pro Crimson Pro Noto Sans Mono Classic serif
fraunces Fraunces Source Code Pro Warm, ornamental
red-hat Red Hat Display Red Hat Mono Distinctive, branded
libre-franklin Libre Franklin Inconsolata Neutral, versatile
playfair Playfair Display Roboto Mono Elegant, high-contrast

Recommended pairings with aesthetics:

  • editorial → instrument-serif, crimson-pro, playfair, fraunces
  • blueprint → ibm-plex, dm-sans, sora
  • paper-ink → crimson-pro, fraunces, libre-franklin
  • mono-terminal → ibm-plex (use var(--widget-font-mono) for body text too)
  • data-dense → ibm-plex, dm-sans, libre-franklin

NEVER use Inter, Roboto, or Arial — they produce the generic AI-generated look.

If unsure, pick one. The frontend randomizes when omitted.

CSS Variable Contract

The iframe injects these automatically based on your data-aesthetic choice. ALWAYS use them. NEVER hardcode colors.

Variable Purpose
--widget-bg-primary Page background
--widget-bg-secondary Card background
--widget-bg-tertiary Input fields, code blocks
--widget-text-primary Headings, body text
--widget-text-secondary Descriptions
--widget-text-muted Captions, axis labels
--widget-accent Buttons, highlights
--widget-accent-hover Hover state
--widget-accent-text Text on accent bg
--widget-border Borders, grid lines
--widget-border-radius Border radius (12px)
--widget-shadow-sm Subtle shadow
--widget-shadow-md Card shadow
--widget-font-sans Body font (set by data-font)
--widget-font-mono Data values, code (set by data-font)
--widget-chart-1--widget-chart-8 Chart data series colors

Reading Colors in JS

const s = getComputedStyle(document.documentElement);
const colors = [1,2,3,4,5,6,7,8].map(i => s.getPropertyValue('--widget-chart-'+i).trim());

For D3/SVG, explicitly set fill and stroke — SVG elements don't inherit CSS color.

For p5.js, parse hex to RGB:

function hexToRgb(hex) {
  hex = hex.replace('#','');
  return [parseInt(hex.slice(0,2),16), parseInt(hex.slice(2,4),16), parseInt(hex.slice(4,6),16)];
}

Library Selection

If multiple libraries could handle the request, pick one.

CDN Libraries

Library CDN URL Use for
Chart.js 4 https://cdn.jsdelivr.net/npm/chart.js@4.4.1 Default for charts. Bar, line, pie, doughnut, scatter, radar, polar.
D3 v7 https://cdn.jsdelivr.net/npm/d3@7 Custom/complex visualizations, force graphs, treemaps
ECharts 5 https://cdn.jsdelivr.net/npm/echarts@5.5.0/dist/echarts.min.js Animated charts, heatmaps, geographic maps
Three.js https://cdn.jsdelivr.net/npm/three@0.160.0/build/three.module.js 3D visualizations
Mermaid https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.min.js Flowcharts, sequence diagrams
GSAP 3 https://cdn.jsdelivr.net/npm/gsap@3.12.5/dist/gsap.min.js Animated explainers, step-by-step walkthroughs
p5.js https://cdn.jsdelivr.net/npm/p5@1.9.0/lib/p5.min.js Physics simulations, generative visuals
anime.js https://cdn.jsdelivr.net/npm/animejs@3.2.2/lib/anime.min.js Staggered reveals, count-up, path drawing

Chart.js is the default for any chart. Only use D3/ECharts when Chart.js can't handle the visualization type.

For full API references, use the context7 MCP tool to look up each library's docs.

Widget HTML Boilerplate

<!DOCTYPE html>
<html lang="en" data-aesthetic="editorial" data-font="instrument-serif">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <!-- CDN scripts here. Do NOT add Google Font links — the frontend handles fonts. -->
  <style>
    * { margin: 0; padding: 0; box-sizing: border-box; }
    body {
      font-family: var(--widget-font-sans);
      background: var(--widget-bg-primary);
      color: var(--widget-text-primary);
      padding: 24px;
    }
    h1 { font-size: 1.5rem; font-weight: 700; margin-bottom: 4px; }
    .subtitle { color: var(--widget-text-secondary); font-size: 0.875rem; margin-bottom: 20px; }
    .card {
      background: var(--widget-bg-secondary);
      border: 1px solid var(--widget-border);
      border-radius: var(--widget-border-radius);
      padding: 20px;
      box-shadow: var(--widget-shadow-sm);
    }
    .card--hero {
      background: var(--widget-bg-secondary);
      box-shadow: var(--widget-shadow-md);
      border-left: 3px solid var(--widget-accent);
    }
    .card--recessed {
      background: var(--widget-bg-tertiary);
      box-shadow: inset 0 1px 2px rgba(0,0,0,0.06);
    }
  </style>
</head>
<body>
  <h1>Title</h1>
  <p class="subtitle">Description</p>
  <div class="card"><!-- content --></div>
</body>
</html>

Rules

  1. NEVER hardcode colors — always var(--widget-*). Dark/light mode works automatically.
  2. Self-contained — all CSS and JS inline or from allowed CDNs.
  3. Responsivewidth: 100%, flexbox/grid. No fixed pixel widths.
  4. Vanilla only — HTML + CSS + JS. No React, no bundlers.
  5. Explain after — add brief text explanation below the widget.
  6. No font <link> tags — the frontend injects fonts from data-font. Do not load fonts yourself.

Depth Tiers

Use depth to create visual hierarchy:

Tier Use for CSS
hero Key metric, main chart, summary Accent border-left + shadow-md
elevated Cards, sections bg-secondary + shadow-sm
default Flat content, body text bg-primary, no shadow
recessed Inputs, metadata, footnotes bg-tertiary + inset shadow

Overflow Prevention (MANDATORY)

Always apply these — widgets break silently without them:

/* On ALL grid/flex children */
.grid > *, .flex > * { min-width: 0; }

/* On text containers */
p, td, li, span { overflow-wrap: break-word; }

/* NEVER display:flex on <li> — breaks list markers. Use absolute positioning for custom markers. */

/* Images/embeds */
img, canvas, svg { max-width: 100%; height: auto; }

Mermaid Zoom Controls (MANDATORY for Mermaid diagrams)

Every Mermaid diagram MUST have interactive zoom. Wrap the diagram in a container with controls:

<div class="diagram-shell">
  <div class="diagram-toolbar">
    <button onclick="zoomIn()">+</button>
    <button onclick="zoomOut()">−</button>
    <button onclick="zoomFit()">Fit</button>
  </div>
  <div class="diagram-viewport" style="overflow:hidden;cursor:grab;">
    <div class="diagram-canvas" style="transform-origin:0 0;">
      <pre class="mermaid">graph TD; A-->B;</pre>
    </div>
  </div>
</div>

Implement scroll-to-zoom, click-drag pan, and button controls. See css-patterns.md for the full implementation.

Animation Patterns

Staggered Entrance (anime.js)

anime({ targets: '.card', opacity: [0, 1], translateY: [20, 0], delay: anime.stagger(80), easing: 'easeOutCubic', duration: 500 });

Count-Up Numbers

anime({ targets: '.kpi-value', innerHTML: [0, el => +el.dataset.target], round: 1, easing: 'easeOutExpo', duration: 1200 });

Respect Motion Preferences

if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
  document.querySelectorAll('.card').forEach(el => el.style.opacity = 1);
} else { /* run animations */ }

Quality Gates

Before delivering, verify:

  1. Squint test — visual hierarchy is clear when you mentally blur the widget
  2. Swap test — the output has distinctive character, not a generic template
  3. Overflow check — no horizontal scroll, text doesn't overflow containers
  4. Content complete — the widget visualizes exactly what was asked

Anti-Patterns (NEVER do these)

These produce the "AI-generated" look. Avoid them:

  • Emoji section headers — no 📊 Data, 🔧 Tools, 🎯 Goals
  • Uniform 3-column card grids with identical styling
  • Three-dot macOS window chrome on cards (the ● ● ● dots)
  • Gradient text headingsbackground: linear-gradient(...); -webkit-background-clip: text
  • Glowing box-shadowsbox-shadow with spread > 10px and saturated color
  • Generic placeholder imagesvia.placeholder.com or stock photo URLs

Chart Type Guide

Data scenario Chart type Notes
Compare categories bar Horizontal: indexAxis: 'y'
Trend over time line tension: 0.3 for smooth curves
Parts of a whole doughnut or pie Doughnut preferred
Distribution scatter Use pointRadius for emphasis
Multi-variable comparison radar Comparing profiles
Stacked comparison bar with stacked: true Set on both x and y scales

GSAP Animated Explainers

For step-by-step visual explanations. Always include play/pause/restart controls.

const tl = gsap.timeline({ paused: true });
tl.to('#step1', { opacity: 1, y: 0, duration: 0.5 })
  .to('#step2', { opacity: 1, x: 100, duration: 0.6 }, '+=0.3')  // delay after prev
  .to('#arrow', { scaleX: 1, duration: 0.4 }, '<')                // same start as prev
  .to('.items', { opacity: 1, stagger: 0.15, duration: 0.3 });    // stagger children

tl.play(); tl.pause(); tl.restart(); tl.progress(); // 0-1 for scrubber

Design Guidelines

  1. KPI row at top — 2-4 key numbers above charts, use var(--widget-font-mono) for values
  2. Depth tiers — hero for primary content, elevated for cards, recessed for metadata
  3. Generous spacing — 20-24px padding, 12-20px gaps
  4. Compositional variety — alternate centered, left-heavy, right-heavy layouts. Avoid uniform grids.
  5. Card-based layout — wrap sections in cards with --widget-bg-secondary

Skill as a Service

Everyone else asks you to install skills locally. On Rebyte, just click Run. Works from any device — even your phone. No CLI, no terminal, no configuration.

  • Zero setup required
  • Run from any device, including mobile
  • Results streamed in real-time
  • Runs while you sleep

Compatible agents

Claude Code

Gemini CLI

Codex

Cursor, Windsurf, Amp

Related Skills

rebyte-app-builder

Deploy web applications to Rebyte Cloud — a managed deployment platform (like Vercel). Supports Node.js SSR frameworks (auto-detect), static sites, Python, Go, and Rust backends. Deploys via `rebyte deploy` with zero configuration for Node.js, or via `rebyte.json` for other languages.

FeaturedSlash MenuDevelopment

deep-research

Conduct enterprise-grade research with multi-source synthesis, citation tracking, and verification. Use when user needs comprehensive analysis requiring 10+ sources, verified claims, or comparison of approaches. Triggers include "deep research", "comprehensive analysis", "research report", "compare X vs Y", or "analyze trends". Do NOT use for simple lookups, debugging, or questions answerable with 1-2 searches.

FeaturedSlash MenuResearch

nano-banana

Generate images from text prompts or edit existing images using Google Nano Banana 2 (Gemini 3.1 Flash image generation) via Rebyte data API. Supports multi-size output (512px–4K), improved text rendering, and multi-image input. Use for text-to-image generation or image-to-image editing/enhancement. Triggers include "generate image", "create image", "make a picture", "draw", "illustrate", "image of", "picture of", "edit image", "modify image", "enhance image", "style transfer", "nano banana".

FeaturedSlash MenuDesign

skill-creator

Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.

FeaturedDevelopment

rebyte.ai — The only platform where you can run AI agent skills directly in the cloud

No downloads. No configuration. Just sign in and start using AI skills immediately.

Use this skill in Agent Computer — your shared cloud desktop with all skills pre-installed. Join Moltbook to connect with other teams.