Skip to content
Public template

Repository files navigation

shadcn/deck

A modern, component-based presentation deck system built with Next.js and shadcn UI components.

CleanShot 2025-04-29 at 11  34 01@2x

Overview

shadcn/deck is a flexible presentation framework that allows you to create beautiful slide decks using React components. Perfect for:

  • Technical presentations
  • Product demos
  • Conference talks
  • Educational content

Features

  • 🧩 Component-based slides - Build presentations with reusable React components
  • 🎨 Multiple slide types - Title, Code, Image, Grid, Quote, and more
  • 📝 Presenter notes - Keep track of talking points for each slide
  • 📱 Responsive design - Presentations look great on any device
  • 🌙 Dark mode support - Presentations that work in any lighting condition
  • ⌨️ Keyboard navigation - Easily move between slides
  • 🖼️ Fullscreen mode - Immersive presentation experience

Getting Started

Requires Node.js 22.12 or later and pnpm 12.4.2 (pinned in package.json).

  1. Clone the repository:
git clone https://github.com/inthhq/shadcn-deck.git
cd shadcn-deck
  1. Install dependencies:
corepack enable
pnpm install --frozen-lockfile
  1. Start the development server:
pnpm dev
  1. Open http://localhost:3000 to see your presentation.

To verify changes, run pnpm lint, pnpm type-check, and pnpm build.

PDF export

Open Print view from the slide controls, then choose Print / save as PDF. The preview preserves the deck's theme and exports one 16:9 slide per page. The button waits for fonts, image decoding (including Slide.backgroundImage) and components marked aria-busy="true". Offscreen images load eagerly. Failed images are reported so you can check the preview before printing.

For custom asynchronous slide content, keep aria-busy="true" on its wrapper until its content or error fallback is rendered. Use the browser's background graphics option if your PDF print settings omit slide colours.

Creating Slides

Slides are defined in src/presentation/router.ts. Each slide has:

  • A unique ID
  • A path for routing
  • A component reference
  • Presenter notes
  • A title

Example slide definition:

{
  id: '1',
  path: '/1',
  component: TitleSlide,
  notes: 'Welcome to the presentation!',
  title: 'My Awesome Presentation',
}

Available Slide Components

  • TitleSlide - Main title slide for your presentation
  • ComponentOverviewSlide - Show component architecture
  • GridSlide - Display content in a responsive grid
  • CodeSlide - Share and highlight code examples
  • QuoteSlide - Feature important quotes
  • ImageSlide - Display images with captions
  • KeyFeaturesSlide - Highlight key features or points
  • FullscreenSlide - Create immersive full-screen content
  • ThankYouSlide - End your presentation professionally

Customization

You can create your own slide components by adding them to the src/presentation/slides directory and importing them in the router.

Author

Christopher Burns

License

MIT

Releases

Packages

Used by

Contributors

Languages