Compact source. Complete deck. Deckseed turns approved Markdown into polished, self-contained Reveal.js presentations through Pandoc. It is a presentation-as-code workflow for AI coding agents, developers, consultants, and technical teams that want portable HTML slide decks without maintaining generated markup.
- Token-efficient authoring: agents edit compact Markdown and CSS, never the generated runtime.
- Self-contained HTML slides: Reveal.js, themes, and media are embedded for offline sharing.
- Presentation themes: nine accessible built-in presets plus installable external theme packages provide dark, light, editorial, and professional starting points.
- Source freshness: SHA-256 validation detects generated decks that no longer match their source.
- Private by default: local presentation content stays ignored by Git.
- Agent workflows included: shared skills enforce content approval, theming, translation, validation, and written proposal generation.
- Proposal companions: an approved deck can also produce a concise, styled PDF decision document with source freshness checks.
Prerequisites: Node.js 20 or newer, Pandoc 3 or newer, and network access while building the embedded Reveal.js runtime. Firefox is a recommended optional dependency for automated 1600×900 headless screenshot validation; Chromium-family browsers are also supported as a fallback. Written proposal PDFs additionally require LibreOffice; Poppler tools are recommended for visual page review.
git clone https://github.com/bartivs/deckseed.git
cd deckseed
npm run new -- architecture-review \
--title "Architecture Review" \
--language en \
--theme atlas
# Replace the starter copy with the approved presentation.
npm run build -- architecture-review
npm run validateOpen or share:
presentations/architecture-review/index.html
The generated file works offline and does not require Deckseed, Pandoc, Node.js, or local assets when viewed.
Most presentation generators optimize the final artifact. Deckseed also optimizes the AI production loop: the maintained source remains small while Pandoc owns the large runtime output.
| Conventional agent-authored deck | Deckseed |
|---|---|
| Copy is repeated across briefs, HTML, and configuration | Approved copy and slide implementation share one content.md |
| The model edits verbose generated markup | Generated index.html is disposable and never model-authored |
| Runtime translation dictionaries expand context | Each localized deck has a focused Markdown source |
| Source/output drift is found manually | A SHA-256 source stamp makes stale output a validation error |
| Sharing may require local assets or dependencies | Pandoc embeds Reveal.js, CSS, and media into one offline HTML file |
The generated HTML may be large because it contains the complete presentation runtime. The efficiency gain is in what humans and agents maintain: a compact, stable source surface with fewer duplicated edits and fewer opportunities for drift.
Chat approval
↓
content.md + theme package + theme.css
↓
Pandoc Reveal.js writer
↓
self-contained index.html
↓
source and portability validation
Deckseed uses:
- Pandoc's
revealjswriter; - Reveal.js 5.2.1, pinned for reproducible output;
- Pandoc
--embed-resourcesfor a single portable HTML file; - semantic CSS variables for reusable presentation themes;
- a SHA-256 build stamp for deterministic freshness checks.
Set PANDOC_BIN=/path/to/pandoc when Pandoc is not available on PATH. See the official Pandoc installation guide.
Before creating files, agree on the audience, goal, core message, narrative, slide outline, language, and visual direction. Deckseed's included Agent Skills treat this approval as a required production gate.
npm run new -- quarterly-strategy \
--title "Quarterly Strategy" \
--language en \
--theme midnightDeckseed creates only maintainable source files:
presentations/quarterly-strategy/
├── content.md Approved metadata, copy, and Pandoc slide structure
└── theme.css Deck-specific theme overrides
content.md is both the approval artifact and the production source:
---
pagetitle: "Quarterly Strategy"
lang: "en"
harness-theme: "midnight"
audience: "Product and engineering leadership"
goal: "Agree on the next-quarter priorities"
core-message: "Fewer priorities create faster delivery"
controls: true
progress: true
slideNumber: true
transition: fade
---
<div class="eyebrow">Strategy</div>
# Quarterly Strategy
Fewer priorities create faster delivery.
---
# Three priorities
- Improve activation
- Reduce operational drag
- Retain high-value customersHorizontal rules separate slides. Use ordinary Markdown by default, fenced divs for layout groups, and trusted local HTML only when a visual treatment requires it.
The shared stylesheet includes dependency-free HTML/CSS primitives for executive and technical diagrams:
.diagram-comparewith.diagram-panel.beforeand.diagram-panel.after;.diagram-flow,.diagram-node, and.diagram-connectorfor process flows;.diagram-convergeand.diagram-sourcesfor many-to-one systems;.diagram-lanesand.diagram-lanefor responsibility swimlanes;.diagram-boundaryfor trust or ownership boundaries;.logo-stripand.tech-logofor local, embedded technology marks.
Node modifiers include .actor, .system, .provider, .gate, .success, and .warning. Build diagram groups with <div> elements rather than nested <section> elements, which Reveal interprets as slides. The primitives stack on narrow screens, retain theme variables, and print without JavaScript. Keep logos as local presentation assets so source hashes and self-contained builds remain reproducible. The generated starter deck contains a before/after example.
npm run build -- quarterly-strategyPandoc produces index.html with the Reveal.js runtime, shared styles, deck theme, and media inline. npm run bundle -- <slug> remains a compatibility alias.
A presentation can have a concise portrait proposal companion for decision-makers who need a printable narrative rather than slides. After approving its audience, continuity, outline, figures, and decision ask, create presentations/<slug>/proposal.md from templates/proposal.md and run:
npm run proposal -- quarterly-strategyDeckseed uses Pandoc and the tracked reference DOCX to build a temporary Word document, then LibreOffice converts it into:
presentations/quarterly-strategy/proposal.pdf
The ignored presentation directory also receives proposal.sha256. Validation hashes the proposal source, associated deck content, reference DOCX, page-break filter, and files under proposal-assets/, so deck/proposal drift is visible. A deck-specific proposal-reference.docx can override the default style. The export-proposal-pdf skill enforces the approval, continuity, privacy, build, and visual-review workflow.
npm test
npm run validate
git diff --check
git status --short --ignoredValidation rejects missing sources, stale generated output, remote theme resources, external scripts or stylesheets, and non-Reveal HTML.
For visual theme checks, Firefox is recommended because it can capture deterministic headless screenshots for image review. If Firefox is unavailable, use Chromium, Chrome, or Edge in headless mode; the default browser remains a manual-review fallback.
Start a local preview only when needed:
npm run open -- quarterly-strategyTheme choice belongs to the presentation source, not to a viewer preference. The generator writes built-in theme CSS or external-theme metadata plus local overrides; generated decks do not expose a theme selector.
The presets are original interpretations of recurring families found in Reveal.js themes, Marp themes, and minimalist or professional presentation templates. Customize the ignored theme.css after scaffolding and rebuild whenever it changes.
Themes can also be maintained in separate repositories and installed as npm packages or used directly from a local directory:
npm install --save-dev deckseed-theme-cobalt
npm run new -- product-review --theme deckseed-theme-cobalt
# Develop against a local theme repository.
npm run new -- product-review --theme ../deckseed-theme-cobalt
npm run themesAn external theme package contains a deckseed-theme.json manifest and a theme.css file. The manifest declares schemaVersion: 1, a stable theme id, a display label, colorScheme, and a relative css path. Deckseed records the package specifier in harness-theme-package; the presentation's theme.css then contains only local overrides. Package CSS is embedded into the generated HTML before those overrides, so the final deck remains self-contained.
External themes are declarative CSS packages. Deckseed never imports or executes package JavaScript. Theme CSS cannot use @import, remote URLs, or non-embedded url(...) resources. Pin installed versions through package.json and its lockfile for reproducible builds. Official theme packages are not published yet; extracting selected built-ins into separate repositories is planned follow-up work.
| Workflow | Authoring source | Output model | Best fit |
|---|---|---|---|
| Deckseed | Approved Pandoc Markdown plus CSS | Self-contained Reveal.js HTML | Agent-assisted, private, presentation-as-code workflows |
| Raw Reveal.js | HTML, JavaScript, or Reveal Markdown | Interactive web presentation | Bespoke browser interactions and plugin-heavy talks |
| Marp | Marp-flavored Markdown | HTML, PDF, PPTX, and images | Concise general-purpose Markdown slides |
| Pandoc alone | General Markdown and CLI options | Multiple slide formats | Users who want direct control without an opinionated workflow |
| Traditional AI slide service | Prompt and proprietary editor | Hosted or exported deck | Fast visual drafting without source-controlled authoring |
Deckseed does not replace Pandoc or Reveal.js. It packages them into a repeatable approval, authoring, theming, validation, and privacy workflow for coding agents.
- Technical presentations: architecture reviews, engineering proposals, incident reviews, and product demonstrations.
- Consulting deliverables: reusable private decks that remain outside Git history.
- Executive communication: strategy updates, investment analyses, and decision briefs.
- Presentation as code: reviewable Markdown sources with generated, disposable output.
- Offline HTML slides: a single file that can be copied, archived, emailed, or opened without a server.
- Agent-generated presentations: bounded workflows for Pi, Codex, Claude Code, and OpenCode.
One source deck has one language. A translated presentation gets a separate Markdown source and generated HTML:
presentations/quarterly-review/
presentations/quarterly-review-es/
This avoids large runtime translation dictionaries and keeps each source readable. Preserve slide structure, translate the complete deck, set the correct lang, and build both outputs independently.
Everything inside presentations/ is ignored except .gitkeep:
presentations/*
!presentations/.gitkeepNever use git add -f for a presentation. Decks may contain internal plans, customer information, financial analysis, or unpublished research.
A Markdown presentation generator converts structured Markdown into slides. Deckseed uses Pandoc to parse the source and Reveal.js to provide browser navigation, scaling, transitions, and presentation controls.
Yes. Deckseed invokes Pandoc's Reveal.js writer with standalone and embedded-resource options, then verifies that the result has no external script, stylesheet, or media dependencies.
Agents maintain content.md and theme.css instead of reading or rewriting the generated Reveal.js runtime. This keeps generated megabytes outside the normal model context and eliminates duplicated copy in configuration and HTML.
Yes. The generated index.html embeds its runtime and presentation assets. Network access is needed during the build so Pandoc can fetch the pinned Reveal.js files, but not while presenting the finished deck.
The primary slide artifact is self-contained HTML. Deckseed also wraps and validates a separate written proposal PDF through npm run proposal -- <slug>; this is a portrait decision document, not a slide export. Reveal.js slides can still be printed to PDF. Pandoc supports PowerPoint output, but Deckseed does not currently wrap or validate that path.
No. Deckseed is a local build and validation pipeline. Agent Skills improve AI-assisted production, but Markdown authoring and Pandoc generation work without an AI provider.
For a deck-specific variation, start from one of the nine presets and edit the ignored theme.css. For a reusable theme, create a separate package with deckseed-theme.json and theme.css, install it as a dependency, and scaffold with --theme <package-name>. Shared structural styles live in src/pandoc.css. Run npm run themes to list built-ins and installed external themes.
npm run new -- <slug> [options] # Create ignored Pandoc sources
npm run build -- <slug> # Generate self-contained Reveal.js HTML
npm run bundle -- <slug> # Compatibility alias for build
npm run proposal -- <slug> # Generate a written proposal PDF companion
npm run serve # Serve local decks on port 4173
npm run open -- <slug> # Start the server and open a deck
npm run themes # List built-in and installed external themes
npm run themes:previews # Regenerate README theme previews
npm run validate # Validate source and generated output
npm test # Run the test suiteGenerator options:
--title "Title"--language en|es|pt-BR|...--theme midnight|paper|ember|atlas|solar|ocean|plum|mono|meadow|<installed-package>|<local-theme-path>--forceto replace an existing local deck
src/pandoc.css Shared Reveal.js presentation styling
src/theme-presets.js Built-in generator theme presets
scripts/theme-package.mjs External theme manifest and CSS resolver
scripts/build-deck.mjs Pandoc build and self-contained-output checks
scripts/build-proposal.mjs Pandoc + LibreOffice proposal PDF build
scripts/new-deck.mjs Source scaffolding
scripts/validate.mjs Freshness, portability, and privacy validation
templates/content.md Tracked Pandoc starter source
templates/proposal.md Written proposal starter
templates/proposal-reference.docx Default proposal document styles
presentations/ Ignored source decks and generated output
docs/theme-previews/ README theme previews
test/ Deckseed tests
See CONTRIBUTING.md for development setup, verification requirements, and the presentation privacy boundary.
Deckseed is available under the MIT License.