franklee16/academic-research-skills/academic-slides

Claude Code and agent skill by franklee16/academic-research-skills

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Create Beamer-inspired academic HTML presentations from scratch or by converting PowerPoint files. Use when the user wants to build slides for a conference talk, lecture, seminar, or thesis defense. Supports theorem environments, KaTeX equations, algorithm pseudocode, and citations. Helps academics discover their preferred visual theme through Beamer-style previews rather than abstract choices.

Install

npx vskill@latest install franklee16/academic-research-skills/academic-slides

SKILL.md

Academic Slides Skill

Create zero-dependency, Beamer-inspired HTML presentations that run entirely in the browser. This skill helps academics and researchers build professional presentations with proper theorem environments, equation rendering via KaTeX, and structured frame navigation. Users discover their preferred theme through visual exploration ("show, don't tell"), then the skill generates production-quality frame decks.

Core Philosophy

  1. Zero Build Dependencies -- Single HTML files with inline CSS/JS. KaTeX loaded via CDN for equations. No npm, no build tools.
  2. Show, Don't Tell -- People don't know what they want until they see it. Generate visual theme previews for academic users.
  3. Academic Authenticity -- Beamer-inspired structure, Computer Modern typography, proper theorem environments. Not PowerPoint-with-serif-fonts.
  4. Production Quality -- Accessible, responsive, well-commented code.
  5. Viewport Fitting (CRITICAL) -- Every frame MUST fit exactly within the viewport. No scrolling within frames, ever. This is non-negotiable.

CRITICAL: Viewport Fitting Requirements

This section is mandatory for ALL presentations. Every frame must be fully visible without scrolling on any screen size.

The Golden Rule
text
Each frame = exactly one viewport height (100vh/100dvh)
Content overflows? -> Split into multiple frames or reduce content
Never scroll within a frame.
Content Density Limits

To guarantee viewport fitting, enforce these limits per frame:

Frame TypeMaximum Content
Title Frame1 title + 1 subtitle + author/institute/date block
Content Frame1 heading + 4-5 bullet points OR 1 heading + 2 short paragraphs
Theorem/Proof Frame1 theorem box (max 4 lines) + 1 proof sketch (max 5 lines)
Equation Frame1 heading + 1-3 display equations with optional annotation
Algorithm Frame1 heading + max 12 lines of pseudocode
Definition Frame1 heading + 1-2 definition boxes (max 3 lines each)
Citation/References Frame1 heading + max 8 reference entries
Section Divider Frame1 section number + 1 section title + optional outline

If content exceeds these limits -> Split into multiple frames

Required CSS Architecture

Every presentation MUST include this base CSS for viewport fitting:

css
/* ===========================================
VIEWPORT FITTING: MANDATORY BASE STYLES
These styles MUST be included in every presentation.
They ensure frames fit exactly in the viewport.
=========================================== */
/* 1. Lock html/body to viewport */
html, body {
height: 100%;
overflow-x: hidden;
}
html {
scroll-snap-type: y mandatory;
scroll-behavior: smooth;
}
/* 2. Each frame = exact viewport height */
.frame {
width: 100vw;
height: 100vh;
height: 100dvh; /* Dynamic viewport height for mobile browsers */
overflow: hidden; /* CRITICAL: Prevent ANY overflow */
scroll-snap-align: start;
display: flex;
flex-direction: column;
position: relative;
}
/* 3. Content container with flex for centering */
.frame-content {
flex: 1;
display: flex;
flex-direction: column;
justify-content: center;
max-height: 100%;
overflow: hidden; /* Double-protection against overflow */
padding: var(--frame-padding);
}
/* 4. ALL typography uses clamp() for responsive scaling */
:root {
/* Titles scale from mobile to desktop */
--title-size: clamp(1.5rem, 5vw, 3.5rem);
--h2-size: clamp(1.25rem, 3.5vw, 2.25rem);
--h3-size: clamp(1rem, 2.5vw, 1.75rem);
/* Body text */
--body-size: clamp(0.75rem, 1.5vw, 1.125rem);
--small-size: clamp(0.65rem, 1vw, 0.875rem);
/* Spacing scales with viewport */
--frame-padding: clamp(1rem, 4vw, 4rem);
--content-gap: clamp(0.5rem, 2vw, 2rem);
--element-gap: clamp(0.25rem, 1vw, 1rem);
/* Frame chrome */
--chrome-height-top: clamp(2.5rem, 5vh, 3.5rem);
--chrome-height-bottom: clamp(1.5rem, 3vh, 2.5rem);
}
/* 5. Theorem/definition/proof boxes use viewport-relative max sizes */
.theorem-box, .definition-box, .example-box, .lemma-box, .corollary-box {
border-left: 4px solid var(--theorem-border);
background: var(--theorem-bg);
padding: clamp(0.5rem, 1.5vw, 1rem) clamp(0.75rem, 2vw, 1.5rem);
margin: clamp(0.25rem, 0.5vw, 0.5rem) 0;
max-height: min(40vh, 350px);
overflow: hidden;
}
.theorem-box .env-title, .definition-box .env-title {
font-weight: 700;
font-size: var(--body-size);
color: var(--theorem-border);
margin-bottom: clamp(0.2rem, 0.5vw, 0.5rem);
}
.proof-box {
border-left: 2px solid var(--proof-border);
background: var(--proof-bg);
padding: clamp(0.4rem, 1vw, 0.75rem) clamp(0.75rem, 2vw, 1.5rem);
font-style: italic;
}
.proof-box::after {
content: '\25A1'; /* QED square */
float: right;
font-style: normal;
}
.algorithm-box {
border: 1px solid var(--theorem-border);
background: var(--proof-bg);
padding: clamp(0.5rem, 1.5vw, 1rem);
font-family: var(--font-mono);
font-size: var(--small-size);
line-height: 1.6;
}
/* 6. Lists auto-scale with viewport */
.item-list, .enum-list {
gap: clamp(0.4rem, 1vh, 1rem);
}
.item-list li, .enum-list li {
font-size: var(--body-size);
line-height: 1.4;
}
/* 7. Columns adapt to available space */
.columns {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(min(100%, 250px), 1fr));
gap: clamp(0.5rem, 1.5vw, 1rem);
}
/* 8. Images constrained to viewport */
img, .image-container {
max-width: 100%;
max-height: min(50vh, 400px);
object-fit: contain;
}
/* ===========================================
RESPONSIVE BREAKPOINTS
Aggressive scaling for smaller viewports
=========================================== */
/* Short viewports (< 700px height) */
@media (max-height: 700px) {
:root {
--frame-padding: clamp(0.75rem, 3vw, 2rem);
--content-gap: clamp(0.4rem, 1.5vw, 1rem);
--title-size: clamp(1.25rem, 4.5vw, 2.5rem);
--h2-size: clamp(1rem, 3vw, 1.75rem);
}
}
/* Very short viewports (< 600px height) */
@media (max-height: 600px) {
:root {
--frame-padding: clamp(0.5rem, 2.5vw, 1.5rem);
--content-gap: clamp(0.3rem, 1vw, 0.75rem);
--title-size: clamp(1.1rem, 4vw, 2rem);
--body-size: clamp(0.7rem, 1.2vw, 0.95rem);
}
/* Hide non-essential elements */
.frame-nav, .keyboard-hint, .decorative {
display: none;
}
}
/* Extremely short (landscape phones, < 500px height) */
@media (max-height: 500px) {
:root {
--frame-padding: clamp(0.4rem, 2vw, 1rem);
--title-size: clamp(1rem, 3.5vw, 1.5rem);
--h2-size: clamp(0.9rem, 2.5vw, 1.25rem);
--body-size: clamp(0.65rem, 1vw, 0.85rem);
}
}
/* Narrow viewports (< 600px width) */
@media (max-width: 600px) {
:root {
--title-size: clamp(1.25rem, 7vw, 2.5rem);
}
/* Stack columns vertically */
.columns {
grid-template-columns: 1fr;
}
}
/* ===========================================
REDUCED MOTION
Respect user preferences
=========================================== */
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
transition-duration: 0.2s !important;
}
html {
scroll-behavior: auto;
}
}
Overflow Prevention Checklist

Before generating any presentation, mentally verify:

  1. Every .frame has height: 100vh; height: 100dvh; overflow: hidden;
  2. All font sizes use clamp(min, preferred, max)
  3. All spacing uses clamp() or viewport units
  4. Content containers have max-height constraints
  5. Images have max-height: min(50vh, 400px) or similar
  6. Columns use auto-fit with minmax() for responsive layout
  7. Breakpoints exist for heights: 700px, 600px, 500px
  8. No fixed pixel heights on content elements
  9. Content per frame respects density limits
  10. Theorem/proof boxes have max-height constraints
When Content Does Not Fit

If you find yourself with too much content:

DO:

  • Split into multiple frames
  • Reduce bullet points (max 4-5 per frame)
  • Shorten text (aim for 1-2 lines per bullet)
  • Break long proofs across "Proof (cont.)" frames
  • Create a "continued" frame

DO NOT:

  • Reduce font size below readable limits
  • Remove padding/spacing entirely
  • Allow any scrolling
  • Cram content to fit
Testing Viewport Fit

After generating, recommend the user test at these sizes:

  • Desktop: 1920x1080, 1440x900, 1280x720
  • Tablet: 1024x768, 768x1024 (portrait)
  • Mobile: 375x667, 414x896
  • Landscape phone: 667x375, 896x414

Phase 0: Detect Mode

First, determine what the user wants:

Mode A: New Academic Presentation

  • User wants to create slides from scratch for a talk, lecture, or defense
  • Proceed to Phase 0.5 (Essential Content Questions), then Phase 1 (Content Discovery)

Mode B: PPT/PDF/Paper Conversion

  • User has an existing PowerPoint, PDF, or paper URL to convert to web slides
  • Proceed to Phase 4 (Content Extraction), then Phase 0.5, then Phase 1P (Paper Focus Discovery)

Mode C: Existing Presentation Enhancement

  • User has an HTML presentation and wants to improve it
  • Read the existing file, understand the structure, then enhance
Fast-Path Detection

If the user's initial message specifies enough to skip format questions (e.g., topic, approximate length, and/or theme name are all present), you MAY skip the format-mechanical questions in Phase 1 (purpose, length, content types, field). However, you MUST still run Phase 0.5 (Essential Content Questions) before generating. No presentation should ever be generated without asking the Phase 0.5 questions.

Examples of fast-path triggers:

  • "/academic-slides 10-slide lecture on dynamic programming using Metropolis"
  • "/academic-slides conference talk on our ICML paper, Berlin theme"
  • "Make 15 slides about transformer attention for my lab meeting"

In all of these cases, format is clear from context but content quality questions have not been answered. Proceed to Phase 0.5.


Phase 0.5: Essential Content Questions (MANDATORY)

These questions MUST be asked before generating any presentation, regardless of mode or how much information the user provided in their initial message. They cannot be inferred from topic or theme -- they require the user's judgment. Ask all 3 in a single AskUserQuestion call.

Why These Questions Matter

A presentation on "transformer attention" for a room of NLP researchers looks completely different from one for undergraduate CS students. A talk where the takeaway is "our method is 3x faster" structures differently from one where the takeaway is "this theoretical framework unifies prior work." These questions determine content strategy, not just format.

The Questions (Single AskUserQuestion Call)

Question 1: Audience

  • Header: "Audience"
  • Question: "Who is your audience?"
  • Options:
  • "Domain experts" -- They know the field well; skip basics, focus on contributions and technical details
  • "Technical but not specialist" -- They have technical background but are not in your exact subfield
  • "Students / newcomers" -- They need context, definitions, and motivation before results
  • "Mixed / general academic" -- Varies widely; balance accessibility with depth

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 95 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
219
Repository forks
33
7-day trend score
27

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/franklee16/academic-research-skills/academic-slides/badge)](https://verified-skill.com/skills/franklee16/academic-research-skills/academic-slides)

Something wrong with this skill or its page? Tell us.