agentsclimarketplace

Slides

Skill ceoimperiumprojects/imperium-brain/skills/slides

CEO, CTO, CMO, CFO, sales, product & legal advisors — all in one Claude Code plugin. 250+ skills from 10 distilled startup books. Install once, run your startup smarter.

Install
npx -y skills add ceoimperiumprojects/imperium-brain --skill slides

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

HTML presentation slide creator with 12 style presets. Generates self-contained HTML files that work as presentations in any browser. Zero dependencies — no npm, no framework, just open the file. Supports speaker notes, keyboard navigation, and print-to-PDF. Triggers on: HTML slides, web presentation, browser slides, HTML presentation, reveal.js alternative, simple slides, quick presentation, keynote alternative.

SKILL.md

19.6 KB, as published. Nobody here has run it

HTML Presentation Slides

Create self-contained HTML presentations that run in any browser with zero dependencies. One file, no build step, no internet required.

Keywords

HTML slides, web presentation, browser slides, HTML presentation, reveal.js alternative, simple slides, quick presentation, keynote alternative, slide deck, presentation, slides, powerpoint alternative, google slides alternative, speaker notes, fullscreen presentation

What This Creates

A single .html file that:

  • Opens in any browser as a full-screen presentation
  • Arrow keys and spacebar navigate between slides
  • Escape key shows slide overview grid
  • F key toggles fullscreen mode
  • P key shows/hides presenter notes
  • Ctrl+P prints to PDF (use Chrome for best results)
  • Responsive — adapts to any screen size
  • No internet required — all styles and scripts are inline
  • Works offline, works on any OS, works forever (no dependencies to break)

Base HTML Template

Every presentation uses this template. Style presets override the CSS variables.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{TITLE}}</title>
<style>
  /* ===== RESET ===== */
  * { margin: 0; padding: 0; box-sizing: border-box; }
  html, body { width: 100%; height: 100%; overflow: hidden; }

  /* ===== THEME VARIABLES ===== */
  :root {
    --bg: {{BG_COLOR}};
    --text: {{TEXT_COLOR}};
    --accent: {{ACCENT_COLOR}};
    --heading-font: {{HEADING_FONT}};
    --body-font: {{BODY_FONT}};
    --code-font: 'Fira Code', 'Cascadia Code', 'JetBrains Mono', 'Consolas', monospace;
  }

  /* ===== SLIDE CONTAINER ===== */
  .slide {
    width: 100vw;
    height: 100vh;
    display: none;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    padding: 5vw;
    font-family: var(--body-font);
    background: var(--bg);
    color: var(--text);
    position: relative;
  }
  .slide.active { display: flex; }

  /* ===== TYPOGRAPHY ===== */
  h1 {
    font-size: clamp(2rem, 4vw, 5rem);
    font-family: var(--heading-font);
    margin-bottom: 2vh;
    line-height: 1.2;
    text-align: center;
  }
  h2 {
    font-size: clamp(1.5rem, 3vw, 3.5rem);
    font-family: var(--heading-font);
    margin-bottom: 2vh;
    line-height: 1.3;
  }
  h3 {
    font-size: clamp(1.2rem, 2.2vw, 2.5rem);
    font-family: var(--heading-font);
    margin-bottom: 1.5vh;
  }
  p {
    font-size: clamp(1rem, 2vw, 2rem);
    line-height: 1.6;
    max-width: 80%;
    text-align: center;
  }
  ul, ol {
    font-size: clamp(0.9rem, 1.8vw, 1.8rem);
    line-height: 2;
    text-align: left;
    max-width: 75%;
  }
  li { margin-bottom: 0.5vh; }
  strong { color: var(--accent); }
  code {
    font-family: var(--code-font);
    background: rgba(0,0,0,0.15);
    padding: 0.2em 0.5em;
    border-radius: 4px;
    font-size: 0.9em;
  }
  pre {
    font-family: var(--code-font);
    background: rgba(0,0,0,0.3);
    padding: 2vw;
    border-radius: 8px;
    font-size: clamp(0.7rem, 1.4vw, 1.2rem);
    line-height: 1.6;
    text-align: left;
    max-width: 85%;
    overflow-x: auto;
    white-space: pre-wrap;
  }
  blockquote {
    font-size: clamp(1.2rem, 2.5vw, 2.5rem);
    font-style: italic;
    border-left: 4px solid var(--accent);
    padding-left: 2vw;
    max-width: 75%;
    line-height: 1.5;
  }
  blockquote cite {
    display: block;
    font-size: 0.6em;
    font-style: normal;
    margin-top: 1vh;
    opacity: 0.7;
  }

  /* ===== LAYOUT HELPERS ===== */
  .slide-title {
    text-align: center;
  }
  .slide-title h1 {
    font-size: clamp(2.5rem, 5vw, 6rem);
    margin-bottom: 3vh;
  }
  .slide-title p {
    font-size: clamp(1rem, 2vw, 2rem);
    opacity: 0.8;
  }
  .two-columns {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 4vw;
    width: 85%;
    align-items: start;
    text-align: left;
  }
  .two-columns h2 {
    grid-column: 1 / -1;
    text-align: center;
  }
  .stats-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 3vw;
    width: 80%;
    text-align: center;
  }
  .stat-number {
    font-size: clamp(2rem, 4vw, 5rem);
    font-weight: 800;
    color: var(--accent);
    font-family: var(--heading-font);
  }
  .stat-label {
    font-size: clamp(0.8rem, 1.4vw, 1.2rem);
    opacity: 0.7;
    margin-top: 0.5vh;
  }
  .image-full {
    width: 100vw;
    height: 100vh;
    object-fit: cover;
    position: absolute;
    top: 0;
    left: 0;
  }
  .image-side {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 4vw;
    width: 90%;
    align-items: center;
  }
  .image-side img {
    width: 100%;
    border-radius: 8px;
  }

  /* ===== SPEAKER NOTES ===== */
  .notes { display: none; }
  .show-notes .notes {
    display: block;
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    background: rgba(0,0,0,0.92);
    color: #e2e8f0;
    padding: 2vh 3vw;
    font-size: clamp(0.8rem, 1.5vw, 1.1rem);
    line-height: 1.6;
    font-family: var(--body-font);
    z-index: 100;
    max-height: 25vh;
    overflow-y: auto;
    border-top: 2px solid var(--accent);
  }

  /* ===== SLIDE COUNTER ===== */
  .counter {
    position: fixed;
    bottom: 1.5vh;
    right: 2vw;
    font-size: clamp(0.7rem, 1.2vw, 1rem);
    opacity: 0.4;
    font-family: var(--body-font);
    z-index: 50;
  }

  /* ===== PROGRESS BAR ===== */
  .progress {
    position: fixed;
    top: 0;
    left: 0;
    height: 3px;
    background: var(--accent);
    transition: width 0.3s ease;
    z-index: 50;
  }

  /* ===== OVERVIEW MODE ===== */
  .overview .slide {
    display: flex !important;
    width: 23vw;
    height: 23vh;
    font-size: 0.25em;
    border: 2px solid transparent;
    cursor: pointer;
    border-radius: 8px;
    transition: border-color 0.2s;
  }
  .overview .slide:hover { border-color: var(--accent); }
  .overview .slide.active { border-color: var(--accent); }
  body.overview-mode {
    overflow: auto;
    display: flex;
    flex-wrap: wrap;
    gap: 1vw;
    padding: 2vw;
    background: #111;
  }
  body.overview-mode .progress,
  body.overview-mode .counter { display: none; }

  /* ===== PRINT STYLES ===== */
  @media print {
    .slide {
      display: flex !important;
      page-break-after: always;
      height: 100vh;
    }
    .progress, .counter { display: none; }
    .notes { display: none; }
  }

  /* ===== TRANSITIONS ===== */
  .slide {
    animation: fadeIn 0.3s ease;
  }
  @keyframes fadeIn {
    from { opacity: 0; transform: translateY(10px); }
    to { opacity: 1; transform: translateY(0); }
  }
</style>
</head>
<body>

<div class="progress" id="progress"></div>
<div class="counter" id="counter"></div>

<!-- ===== SLIDES START ===== -->

<!-- Title Slide -->
<div class="slide slide-title">
  <h1>{{PRESENTATION_TITLE}}</h1>
  <p>{{SUBTITLE}}</p>
  <div class="notes">Speaker notes go here. Press P to show/hide.</div>
</div>

<!-- Content Slide Example -->
<div class="slide">
  <h2>{{Slide Title}}</h2>
  <ul>
    <li>Point one</li>
    <li>Point two</li>
    <li>Point three</li>
  </ul>
  <div class="notes">Additional context for the speaker.</div>
</div>

<!-- Quote Slide Example -->
<div class="slide">
  <blockquote>
    "The best way to predict the future is to create it."
    <cite>— Peter Drucker</cite>
  </blockquote>
</div>

<!-- Stats Slide Example -->
<div class="slide">
  <h2>Key Numbers</h2>
  <div class="stats-grid">
    <div>
      <div class="stat-number">10K+</div>
      <div class="stat-label">Active Users</div>
    </div>
    <div>
      <div class="stat-number">99.9%</div>
      <div class="stat-label">Uptime</div>
    </div>
    <div>
      <div class="stat-number">4.8★</div>
      <div class="stat-label">Rating</div>
    </div>
  </div>
</div>

<!-- Two-Column Slide Example -->
<div class="slide">
  <div class="two-columns">
    <h2>Comparison</h2>
    <div>
      <h3>Before</h3>
      <ul>
        <li>Manual process</li>
        <li>Hours of work</li>
        <li>Error-prone</li>
      </ul>
    </div>
    <div>
      <h3>After</h3>
      <ul>
        <li>Automated</li>
        <li>Minutes</li>
        <li>Reliable</li>
      </ul>
    </div>
  </div>
</div>

<!-- Code Slide Example -->
<div class="slide">
  <h2>How It Works</h2>
  <pre><code>// Example code block
const result = await imperium.analyze({
  target: 'competitors',
  depth: 'full'
});
console.log(result.insights);</code></pre>
</div>

<!-- CTA/Closing Slide -->
<div class="slide slide-title">
  <h1>Thank You</h1>
  <p>{{CTA — website, email, or next step}}</p>
</div>

<!-- ===== SLIDES END ===== -->

<script>
(function() {
  const slides = document.querySelectorAll('.slide');
  let current = 0;
  let overviewMode = false;

  function show(n) {
    if (overviewMode) return;
    slides[current].classList.remove('active');
    current = Math.max(0, Math.min(n, slides.length - 1));
    slides[current].classList.add('active');
    updateUI();
  }

  function updateUI() {
    document.getElementById('counter').textContent = (current + 1) + ' / ' + slides.length;
    document.getElementById('progress').style.width = ((current + 1) / slides.length * 100) + '%';
  }

  function toggleOverview() {
    overviewMode = !overviewMode;
    document.body.classList.toggle('overview-mode', overviewMode);
    if (!overviewMode) {
      show(current);
    }
  }

  // Keyboard navigation
  document.addEventListener('keydown', function(e) {
    if (overviewMode && e.key === 'Escape') {
      toggleOverview();
      return;
    }
    if (overviewMode) return;

    switch(e.key) {
      case 'ArrowRight':
      case ' ':
      case 'ArrowDown':
        e.preventDefault();
        show(current + 1);
        break;
      case 'ArrowLeft':
      case 'ArrowUp':
        e.preventDefault();
        show(current - 1);
        break;
      case 'Home':
        e.preventDefault();
        show(0);
        break;
      case 'End':
        e.preventDefault();
        show(slides.length - 1);
        break;
      case 'f':
        if (document.fullscreenElement) {
          document.exitFullscreen();
        } else {
          document.documentElement.requestFullscreen().catch(function(){});
        }
        break;
      case 'p':
        document.body.classList.toggle('show-notes');
        break;
      case 'Escape':
        toggleOverview();
        break;
    }
  });

  // Click navigation in overview mode
  slides.forEach(function(slide, index) {
    slide.addEventListener('click', function() {
      if (overviewMode) {
        current = index;
        toggleOverview();
      }
    });
  });

  // Touch support for mobile
  let touchStartX = 0;
  let touchStartY = 0;
  document.addEventListener('touchstart', function(e) {
    touchStartX = e.changedTouches[0].screenX;
    touchStartY = e.changedTouches[0].screenY;
  });
  document.addEventListener('touchend', function(e) {
    const dx = e.changedTouches[0].screenX - touchStartX;
    const dy = e.changedTouches[0].screenY - touchStartY;
    if (Math.abs(dx) > Math.abs(dy) && Math.abs(dx) > 50) {
      if (dx < 0) show(current + 1);
      else show(current - 1);
    }
  });

  // Hash-based navigation (allows linking to specific slides)
  function checkHash() {
    const hash = window.location.hash;
    if (hash && hash.startsWith('#slide-')) {
      const n = parseInt(hash.replace('#slide-', '')) - 1;
      if (!isNaN(n) && n >= 0 && n < slides.length) {
        show(n);
      }
    }
  }
  window.addEventListener('hashchange', checkHash);

  // Initialize
  checkHash();
  show(current);
})();
</script>
</body>
</html>

Style Presets

12 visual themes available. Each preset overrides the CSS :root variables.

1. Midnight

Dark navy background with white text and electric blue accents. Professional, modern, great for tech presentations.

:root {
  --bg: #0f172a;
  --text: #f1f5f9;
  --accent: #3b82f6;
  --heading-font: 'Segoe UI', system-ui, sans-serif;
  --body-font: 'Segoe UI', system-ui, sans-serif;
}

2. Clean

White background with dark text. Minimal, distraction-free. Works for any context.

:root {
  --bg: #ffffff;
  --text: #1e293b;
  --accent: #2563eb;
  --heading-font: 'Segoe UI', system-ui, sans-serif;
  --body-font: 'Segoe UI', system-ui, sans-serif;
}

3. Startup

Dark background with gradient accent elements. Modern startup aesthetic.

:root {
  --bg: #0a0a0a;
  --text: #fafafa;
  --accent: #a855f7;
  --heading-font: 'Segoe UI', system-ui, sans-serif;
  --body-font: 'Segoe UI', system-ui, sans-serif;
}

Additional: accent gradient from #a855f7 to #ec4899 on headings.

4. Corporate

Light gray background, navy text. Professional and boardroom-ready.

:root {
  --bg: #f8fafc;
  --text: #1e3a5f;
  --accent: #1e40af;
  --heading-font: 'Georgia', 'Times New Roman', serif;
  --body-font: 'Segoe UI', system-ui, sans-serif;
}

5. Creative

Bold colors, oversized typography. For pitches that need to stand out.

:root {
  --bg: #fef3c7;
  --text: #1c1917;
  --accent: #dc2626;
  --heading-font: 'Georgia', 'Times New Roman', serif;
  --body-font: 'Segoe UI', system-ui, sans-serif;
}

6. Developer

Terminal aesthetic. Dark background, monospace font, green accents.

:root {
  --bg: #0d1117;
  --text: #c9d1d9;
  --accent: #58a6ff;
  --heading-font: 'Fira Code', 'Cascadia Code', 'Consolas', monospace;
  --body-font: 'Fira Code', 'Cascadia Code', 'Consolas', monospace;
}

Additional: green (#3fb950) for code highlights, subtle grid background.

7. Warm

Cream background with warm brown text. Friendly, approachable, human.

:root {
  --bg: #fdf6e3;
  --text: #3c2415;
  --accent: #c2410c;
  --heading-font: 'Georgia', 'Times New Roman', serif;
  --body-font: 'Segoe UI', system-ui, sans-serif;
}

8. Neon

Black background with neon gradient text. High-energy, attention-grabbing.

:root {
  --bg: #000000;
  --text: #ffffff;
  --accent: #00ff88;
  --heading-font: 'Segoe UI', system-ui, sans-serif;
  --body-font: 'Segoe UI', system-ui, sans-serif;
}

Additional: headings use gradient linear-gradient(135deg, #00ff88, #00d4ff) with -webkit-background-clip: text.

9. Nature

Forest green palette. Organic, grounded, eco-friendly feel.

:root {
  --bg: #1a2e1a;
  --text: #e8f5e9;
  --accent: #66bb6a;
  --heading-font: 'Georgia', 'Times New Roman', serif;
  --body-font: 'Segoe UI', system-ui, sans-serif;
}

10. Minimal

Pure black and white. Maximum whitespace, maximum clarity.

:root {
  --bg: #ffffff;
  --text: #000000;
  --accent: #000000;
  --heading-font: 'Segoe UI', system-ui, sans-serif;
  --body-font: 'Segoe UI', system-ui, sans-serif;
}

Additional: headings use letter-spacing: 0.05em, lighter font-weight.

11. Retro

Vintage color palette with serif fonts. Nostalgic, distinctive.

:root {
  --bg: #2d1b14;
  --text: #f5e6d3;
  --accent: #e07a3a;
  --heading-font: 'Georgia', 'Palatino Linotype', serif;
  --body-font: 'Georgia', 'Palatino Linotype', serif;
}

12. Gradient

Smooth gradient backgrounds that shift per slide. Dynamic, modern.

:root {
  --bg: linear-gradient(135deg, #667eea, #764ba2);
  --text: #ffffff;
  --accent: #fbbf24;
  --heading-font: 'Segoe UI', system-ui, sans-serif;
  --body-font: 'Segoe UI', system-ui, sans-serif;
}

Additional: each slide uses a different gradient from a curated palette:

  • Slide 1: #667eea → #764ba2
  • Slide 2: #f093fb → #f5576c
  • Slide 3: #4facfe → #00f2fe
  • Slide 4: #43e97b → #38f9d7
  • Slide 5: #fa709a → #fee140
  • Slide 6+: cycle through the palette

Brand Integration

Before generating slides, check if brand/brand.json exists.

If brand files exist:

  • Override any preset with brand colors:
    • brand.colors.primary--accent
    • brand.colors.background--bg (or use a preset and just override accent)
    • brand.colors.text--text
  • Use brand fonts:
    • brand.fonts.heading--heading-font
    • brand.fonts.body--body-font
  • Add brand logo to title slide if brand/assets/logo.svg or brand/assets/logo.png exists
  • Apply tone-of-voice to slide content

If no brand files exist:

  • Use the selected preset as-is
  • Default to "Midnight" preset if no preference given

Slide Types

When generating presentations, use these slide patterns:

Title Slide

Centered layout. Large heading, subtitle, optional logo. Used for opening and section breaks.

<div class="slide slide-title">
  <h1>Presentation Title</h1>
  <p>Subtitle or tagline</p>
</div>

Content Slide

Title with bullet points. The workhorse slide for most content.

<div class="slide">
  <h2>Section Title</h2>
  <ul>
    <li><strong>Key point</strong> — supporting detail</li>
    <li><strong>Key point</strong> — supporting detail</li>
    <li><strong>Key point</strong> — supporting detail</li>
  </ul>
</div>

Quote Slide

Large quote with attribution. Use for customer testimonials, founding principles, or impactful statements.

<div class="slide">
  <blockquote>
    "The quote goes here."
    <cite>— Attribution</cite>
  </blockquote>
</div>

Code Slide

Syntax-displayed code block. For technical presentations, API demos, architecture explanations.

<div class="slide">
  <h2>Implementation</h2>
  <pre><code>const example = 'code here';</code></pre>
</div>

Stats/Numbers Slide

Grid of key metrics. For traction, impact, or comparison data.

<div class="slide">
  <h2>By The Numbers</h2>
  <div class="stats-grid">
    <div>
      <div class="stat-number">{{NUMBER}}</div>
      <div class="stat-label">{{LABEL}}</div>
    </div>
  </div>
</div>

Two-Column Slide

Side-by-side content. For comparisons, before/after, pros/cons.

<div class="slide">
  <div class="two-columns">
    <h2>Title</h2>
    <div><!-- Left column --></div>
    <div><!-- Right column --></div>
  </div>
</div>

Image Slide

Full-bleed image or side-by-side image with text.

<!-- Full bleed -->
<div class="slide" style="padding: 0;">
  <img class="image-full" src="{{IMAGE_URL}}" alt="{{ALT}}">
</div>

<!-- Side by side -->
<div class="slide">
  <div class="image-side">
    <img src="{{IMAGE_URL}}" alt="{{ALT}}">
    <div>
      <h2>Title</h2>
      <p>Description alongside the image.</p>
    </div>
  </div>
</div>

CTA/Closing Slide

Final slide with clear call to action.

<div class="slide slide-title">
  <h1>Get Started</h1>
  <p>website.com | [email protected]</p>
</div>

Best Practices

Content Rules

  • Maximum 6 bullet points per slide — less is more
  • One idea per slide — if it needs two ideas, make two slides
  • Use <strong> for key terms — they render in the accent color
  • Keep headlines under 8 words
  • Speaker notes can be verbose — slides should not be

Design Rules

  • Default padding (5vw) keeps content away from edges — don't override unless full-bleed
  • Use clamp() for font sizes — already built into the template for responsiveness
  • Stats grid auto-fits: 2 stats = 2 columns, 3 = 3 columns, 4 = 2x2 grid
  • Code blocks have overflow-x auto — long lines won't break the layout

Presentation Tips

  • F for fullscreen before presenting
  • Test with Ctrl+P to verify PDF output looks correct
  • Speaker notes (P key) only show on presenter's screen in browser
  • Share the .html file directly — recipients just double-click to view
  • Works in Chrome, Firefox, Safari, Edge — no compatibility issues

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.