Manifest Schema
The manifest.json file is an auto-generated index of a built deck. It is located at .slide-builder/deck/{deck-name}/output/{deck-id}/manifest.json and is created or updated each time slides are built using /pitchsmith:build-one or /pitchsmith:build-all.
The manifest is consumed by the slide viewer, presenter mode, and export functions. You typically do not edit this file directly.
Manifest Structure
{
"deckId": "product-launch",
"deckName": "Product Launch",
"slideCount": 8,
"plannedSlideCount": 10,
"slides": [
{
"number": 1,
"fileName": "slide-1.html",
"title": "Title Slide",
"template": "title",
"slideId": "a1b2c3d4",
"animations": {
"groups": [["el-1", "el-2"], ["el-3"]],
"transition": "fade"
},
"skipped": false,
"notes": "Welcome the audience and set expectations."
}
],
"generatedAt": "2026-03-01T10:30:00Z"
}
Manifest Fields
| Field | Type | Required | Description |
|---|---|---|---|
deckId | string | Yes | Unique deck identifier (kebab-case) |
deckName | string | Yes | Human-readable deck name |
slideCount | number | Yes | Number of built slides in the deck |
plannedSlideCount | number | No | Total slides defined in plan.yaml (used for build progress badges) |
slides | array | Yes | Array of slide entries |
generatedAt | string | Yes | ISO 8601 timestamp of last generation |
Slide Entry Fields
Each entry in the slides array describes one built slide.
| Field | Type | Required | Description |
|---|---|---|---|
number | number | Yes | Slide position (1-indexed) |
fileName | string | Yes | HTML filename for the slide (e.g., "slide-1.html") |
title | string | Yes | Slide title or description |
template | string | No | Template ID used to generate this slide |
slideId | string | No | Unique slide identifier |
animations | object | No | Animation build group configuration |
skipped | boolean | No | When true, slide is excluded from presenter mode and PDF export |
notes | string | No | Speaker notes for the slide |
Animations Object
The animations field controls progressive reveal behavior in presentation mode.
| Field | Type | Description |
|---|---|---|
animations.groups | string[][] | Array of element ID arrays — each group is revealed on a click / keypress |
animations.transition | string | Transition style between groups |
Deprecated Fields
| Field | Replacement | Notes |
|---|---|---|
buildGroups | animations.groups | Legacy format for animation groups. Use animations.groups instead. |
Example Manifest
{
"deckId": "q1-sales-review",
"deckName": "Q1 Sales Review",
"slideCount": 5,
"plannedSlideCount": 8,
"slides": [
{
"number": 1,
"fileName": "slide-1.html",
"title": "Q1 Sales Review",
"template": "title",
"slideId": "f7e8d9c0",
"skipped": false
},
{
"number": 2,
"fileName": "slide-2.html",
"title": "Revenue Overview",
"template": "data",
"slideId": "a1b2c3d4",
"animations": {
"groups": [["chart-container"], ["callout-1", "callout-2"]],
"transition": "fade"
},
"notes": "Highlight the 23% growth figure before showing breakdowns."
},
{
"number": 3,
"fileName": "slide-3.html",
"title": "Regional Breakdown",
"template": "split",
"slideId": "e5f6a7b8"
},
{
"number": 4,
"fileName": "slide-4.html",
"title": "Competitive Wins",
"template": "content",
"slideId": "c9d0e1f2",
"skipped": true,
"notes": "Skip this slide for the short version of the presentation."
},
{
"number": 5,
"fileName": "slide-5.html",
"title": "Next Steps",
"template": "cta",
"slideId": "b3c4d5e6"
}
],
"generatedAt": "2026-03-01T14:22:00Z"
}
How the Manifest Is Used
| Consumer | Usage |
|---|---|
| Slide viewer | Reads slides array to display the deck, respecting skipped status |
| Presenter mode | Uses animations.groups for progressive reveal; filters out skipped slides |
| PDF export | Iterates slides in order, excluding entries where skipped is true |
| Build progress | Compares slideCount vs. plannedSlideCount to show build completion |
| Slide navigation | Uses number and title for thumbnail strips and jump-to-slide menus |
The manifest is regenerated automatically when you build slides or run /pitchsmith:refresh.