πβFirst Deck
What does a working React deck look like, end to end?
This walks through a React deck. If you want the markdown path instead, see Markdown mode β it is shorter.
1. Scaffold
npm create narro@latest my-first-deck -- --template minimal
cd my-first-deck
npm install
2. Write the slides
Open src/App.tsx. Note where each component comes from: the structural pieces
are in @getnarro/core, the content pieces in @getnarro/shared-ui.
import { Notes, Presentation, Slide, SlideContent } from "@getnarro/core";
import { Heading, List, Text } from "@getnarro/shared-ui";
export function App() {
return (
<Presentation aspectRatio="16:9">
<Slide id="title" className="bg-gradient-to-br from-blue-900 to-slate-900">
<SlideContent layout="centered">
<Heading level={1} align="center">
Welcome to Narro
</Heading>
<Text size="xl" align="center" color="muted">
Build presentations with React
</Text>
</SlideContent>
<Notes>Introduce yourself and set up the problem.</Notes>
</Slide>
<Slide id="features" className="bg-slate-900">
<SlideContent>
<Heading level={2}>Why Narro?</Heading>
<List
variant="check"
items={[
"React components as slides",
"Tailwind for styling",
"Export to PowerPoint and PDF",
]}
/>
</SlideContent>
<Notes>Spend the most time on the export story.</Notes>
</Slide>
<Slide id="end" className="bg-gradient-to-br from-purple-900 to-slate-900">
<SlideContent layout="centered">
<Heading level={2} align="center">
Questions?
</Heading>
</SlideContent>
</Slide>
</Presentation>
);
}
3. Run it
npm run dev
Open http://localhost:5173. Arrow keys or space move between slides; F is
fullscreen, O is the overview grid.
Because id is set on each slide, the URL tracks position β #/slide/features
links straight to the second slide.
4. Build
npm run build # β dist/
npm run preview # serve it
dist/ is a static site. Any host will serve it.
Things worth knowing early
<Notes>never renders on the slide. It feeds the presenter view.SlideContenthandles vertical rhythm. Itslayoutprop is "default" | "centered" | "top" | "bottom" | "fill" | "between" β a different set fromSlideβs ownlayoutprop, which is "default" | "center" | "two-column" | "image" | "title".- Tailwind classes work everywhere.
classNameon any Narro component is merged, not replaced.
Next
- Markdown mode β the same deck in one
.mdfile - Component reference β everything you can import
- Animation β fragments and progressive reveals