SuperDeck Presentations
Overview
Use this skill to build accurate SuperDeck presentations: Markdown slide content, Flutter runtime wiring, assets, custom widgets, styling, templates, and verification.
Reference Routing
Load only the reference needed for the task:
- Read
references/authoring.mdwhen creating or reviewingslides.md, block syntax, layouts, slide notes, built-in widgets, Markdown images, alerts, code, or hero markers. - Read
references/runtime-customization.mdwhen wiring a Flutter app, registering custom widgets, configuringDeckOptions, slide parts, styles, templates, assets, or plugins. - Read
references/verification.mdbefore claiming a deck/app works, when choosing commands, or when diagnosing build/render issues.
Workflow
- Inspect the existing
slides.md,lib/main.dart,pubspec.yaml, and any registered widgets/parts/templates before editing. - Decide whether the task is authoring-only, runtime customization, plugin/build setup, or verification/debugging; load the matching reference.
- Prefer the repository's documented syntax and implementation behavior over generic presentation assumptions.
- Keep slides readable in Markdown: use frontmatter for metadata,
@sectionfor vertical rows, child blocks/widgets for horizontal columns, andflexratios for sizing. - Verify with a real SuperDeck build or targeted tests before reporting success.
Ground Truths
- SuperDeck renders a 1280x720 logical slide into a 16:9 scaled viewport.
- A slide contains vertical sections. Each
@sectionstarts a new vertical row; blocks inside that section are laid out horizontally. @blockrenders Markdown.@widgetand any unrecognized@namerender aWidgetBlock.- Images have two authoring paths. Prefer standalone Markdown
when the image belongs in the Markdown content flow; use@image { src: ... }when the image needs block-level layout control such asfit, fixed size,flex,align,scrollable, ordata:source support. - Markdown class markers such as
{.heading}or{.title}drive Hero transitions for supported Markdown elements; the class does not need ahero-prefix. Use the same tag on matching elements across adjacent slides, and do not duplicate the same tag on one slide. @columnis intentionally unsupported; use@block.- Effective content alignment is
block align → section align → centerLeft. Use section alignment as a shared default and child alignment for exceptions. flexis a positive integer. Section flex controls vertical height; child block flex controls horizontal width.- Section
spacingcreates finite, non-negative gaps only between sibling blocks and affects horizontal space allocation. Blockmarginis consumed inside that block's allocated frame, outside its decoration/border — it reduces only that block's own usable area, never creates a shared gutter, and never changes flex ratios (unlike CSS margins; use sectionspacingfor gutters). Blockpaddingis consumed inside the decorated container, between the border and the content. Both accept scalar, symmetric, or physical-edge forms. Omitted object edges normalize to zero; explicitnulledges are invalid. An absent override inherits the resolved style value for that inset; an explicit0removes it. A present override replaces only the matching inset after variants resolve while preserving other style data (decoration, clipping, animation). SlideStyler.blockContaineracceptsBlockStyler, a constrained Mix styler supporting onlypadding,margin,decoration,foregroundDecoration,clipBehavior, context/BlockVariantvariants, and animation. It cannot express widget modifiers, width/height/constraints, transforms, or box alignment; useBoxStylerfor other style slots (slideContainer, code block containers, alert containers).scrollableis valid on@blockand widget blocks, not on@section.layout: fullscreenremoves resolved header/footer chrome while retaining the slide's resolved background and style.normalis the default.- Built-ins
image,dartpad,webview, andqrcodeare always registered and can be overridden by user widgets with the same name. @image scaleis a finite number greater than zero. It changes painting, not layout, and clips using the effective alignment and image/content frame.@dartpadand@webviewuse the same deck-scoped WebView controller cache. AcacheKeyenables sequential reuse across remounts, never concurrent sharing by two live blocks.- Custom widgets must be registered in
DeckOptions.widgets; use shorthand@widgetName { ... }inslides.mdfor registered widget names. BlockVariant('name')is a Dart/Mix stylesheet selector for allWidgetBlocks with that exact, case-sensitive name. It affects the matching container and its widget subtree, not@blockcontent.- Styles, templates, widgets, slide parts, and plugins are configured in Dart through
DeckOptions/SuperDeckApp, not through a separatestyles.yaml. - The CLI reads
slides.md, writes.superdeck/superdeck.json, and ensures.superdeck/is listed in Flutter assets unless--skip-pubspecis used. DeckOptions(debug: true)diagnoses non-scrollable Markdown and custom widget overflow without changing Markdown wrapping or rebuilding content; static capture omits diagnostics.
Source Map
Use these files to resolve disputes or update this skill:
docs/guides/markdown-authoring.mdxdocs/reference/markdown-syntax.mdxdocs/reference/block-types.mdxdocs/reference/deck-options.mdxdocs/guides/custom-widgets.mdxdocs/guides/slide-parts.mdxdocs/guides/cli-reference.mdxpackages/builder/lib/src/parsers/markdown_parser.dartpackages/builder/lib/src/parsers/section_parser.dartpackages/core/lib/src/deck/block_model.dartpackages/superdeck/lib/src/rendering/slides/slide_view.dartpackages/superdeck/lib/src/rendering/blocks/block_widget.dartpackages/superdeck/lib/src/styling/block_variant.dartpackages/superdeck/lib/src/builtins/packages/superdeck/lib/src/ui/widgets/webview_wrapper.dartpackages/playground/lib/features/ai/quick_agent/core/engine/schemas/deck_schemas.dart