Back to catalog
SkillDesign & MediaOfficial Verified

Amini Decks

Build brand-compliant Amini decks — native editable .pptx, or a 16:9 HTML deck, from one deck spec.

#presentation#pptx#powerpoint#slides#deck#brand#charts#html

Install

With the Zana CLI
$ zana add amini-decks

The .pptx builder needs python-pptx (plus pyyaml for YAML specs): `uv run --with python-pptx scripts/build_pptx.py deck.json`, or `pip install python-pptx`. Rendering decks for verification uses LibreOffice (`soffice`) + poppler (`pdftoppm`). The HTML path needs nothing installed.

How it runs

A native, editable .pptx that cannot drift off-brand.

  1. 01

    Spine

    Pick the narrative arc for the audience in the room

  2. 02

    Deck spec

    Author content as JSON. Layout is never hand-placed

  3. 03

    Lint

    Headline length, bullet ceiling, one accent per slide

  4. 04

    Build

    python-pptx renders the spec to a real .pptx

  5. 05

    Render

    LibreOffice to PDF to PNG, then read every slide

  6. 06

    Deliver

    Ship the spec beside the deck so revisions are edits

Marked steps are enforced by a script.

Sample work

What this skill actually produced. Not mockups.

Example: an eleven-slide partner-lab briefing

examples/6g-isac-briefing

A falsifiable-claims deck built from a research paper. Spine, layouts, and every visual decision come from the skill; only the content is authored.

11 rendered frames
preview/slide-01.png

preview/slide-01.png · 1/11

deck.json6.1 KB
{
  "title": "Sovereign Cognitive Digital Twins",
  "subtitle": "Reusing the 6G radio interface as a national sensing layer, on infrastructure a country already owns.",
  "mode": "dark",
  "footer": "Amini · Sovereign Cognitive Digital Twins",
  "meta": {
    "audience": "Partner lab briefing",
    "version": "v3",
    "date": "2026-07-30"
  },
  "slides": [
    {
      "layout": "title",
      "title": "Sovereign Cognitive Digital Twins",
      "subtitle": "6G ISAC, AI-RAN, and zero-trust edge grids for national resilience in the Global South.",
      "notes": "Cayetano, Gichuru, Morris. Say up front which parts are built and which are specified. The honesty boundary is slide 9 and it is the reason this briefing gets a second meeting."
    },
    {
scdt-briefing.pptx61 KB
Download scdt-briefing.pptx

36 files. Read them here, or pull the folder without the CLI.

Copy the folder into your skills directory
$ npx degit aminitech/amini-zana/catalog/skills/amini-decks ~/.claude/skills/amini-decks

No clone, no history. Just this folder.

Sparse checkout (private repos, uses your git auth)
$ git clone --depth 1 --filter=blob:none --sparse https://github.com/aminitech/amini-zana.git && cd amini-zana && git sparse-checkout set catalog/skills/amini-decks
Single file (SKILL.md)
$ curl -sL https://raw.githubusercontent.com/aminitech/amini-zana/main/catalog/skills/amini-decks/SKILL.md
SKILL.md
---
name: Amini Decks
description: >-
  Build brand-compliant Amini presentations — native editable .pptx via python-pptx, or a
  16:9 HTML deck for screen. Use for any request like "make a deck", "pitch deck", "board
  deck", "ministry briefing", "investor update", "partner intro", "QBR", "slides for X",
  or "put this in PowerPoint". Enforces the Amini design system: Space Black ground,
  Marble White type, one Sunglow accent per slide, Geist Mono eyebrows, WCAG AA. Narrative
  spine first, slides second. Ships a deck-spec builder with a brand linter.
license: MIT
metadata:
  author: Amini
  version: "1.0.0"
  upstream: "Layout and copywriting patterns adapted from the claudekit `slides` skill (MIT)."
---

# Amini Decks

Produce decks that read as **premium, technical, and forward-looking** — the same three
words the Amini design system is built on. A deck is an argument delivered in sequence,
not a document with bullet points.

Two output paths, one design system:

| Output | When | How |
| --- | --- | --- |
| **`.pptx`** — native, editable | The deck leaves the building: ministries, investors, partners, telcos. Anyone who will edit, re-order, or present it in PowerPoint / Keynote / Google Slides. | `scripts/build_pptx.py` from a deck spec |
| **HTML** — 16:9, keyboard-driven | Screen-presented, internal, or design-forward decks that need charts, motion, or web embeds. Prints to PDF at full fidelity. | `references/html-template.md` |

**Default to `.pptx`** unless the deck is presented from a browser and never edited by
someone else. "Branded PowerPoint" means `.pptx`.

## Read these as needed

Load only what the task requires:

- `references/deck-spines.md` — narrative spines per audience, and Amini's messaging spine.
- `references/layouts.md` — the eleven layouts, what each is for, and the spec fields each takes.
- `references/copywriting.md` — headline and body formulas; the verbal rules.
- `references/html-template.md` — the branded HTML deck (tokens, nav, Chart.js theming).
- `references/brand-qa.md` — the pre-delivery checklist and how to verify rendering.
- `assets/tokens.css` — the design tokens, drop-in.
- `examples/6g-isac-briefing/` — a complete eleven-slide partner-lab briefing built from a
  research paper: spec, built `.pptx`, and rendered slide previews.

## Workflow

### 1. Establish the spine before writing a single slide

Ask — or infer from the brief — three things: **who is in the room**, **what they must do
next**, and **what one sentence they should leave with**. Then pick a spine from
`references/deck-spines.md` (government, investor, telco/commercial, internal review).

If the request is strategic ("what should this deck say", "structure my slides"), stop at
the spine + a one-line-per-slide outline. Do not build. Show the outline and get agreement
— rebuilding a deck is cheap, re-earning a minister's attention is not.

### 2. Write the spec, not the slides

Content goes in a deck spec (JSON or YAML); every visual decision belongs to the builder.
This is what makes a deck impossible to drift off-brand.

```json
{
  "title": "Sovereign AI Infrastructure",
  "subtitle": "The data, connectivity, and compute layer for the next four billion people.",
  "mode": "dark",
  "footer": "Amini · Sovereign AI Infrastructure",
  "meta": { "audience": "Ministry briefing", "version": "v1.0", "date": "2026-07-31" },
  "slides": [
    { "layout": "title", "title": "Sovereign AI Infrastructure", "notes": "Open on agency, not technology." },
    { "layout": "statement", "title": "The problem was never insights — it was infrastructure.", "accent": "infrastructure" },
    { "layout": "metrics", "title": "The gap is structural, not a skills problem.",
      "metrics": [{ "value": "<1%", "label": "of global compute sits in Africa", "accent": true }] }
  ]
}
```

`scripts/deck.example.json` is a complete, working eight-slide deck — start from it.
Full field reference per layout: `references/layouts.md`.

**Rules the spec must respect:**

- The **headline is the point** — a full sentence, not a label. "Telcos lose X to Y" beats "Market".
- **One idea per slide.** If it needs a paragraph, it is two slides or a spoken line.
- **Six bullets is the ceiling**; four is better. Long bullets are speaker notes — put them in `notes`.
- **Exactly one Sunglow accent per slide.** Mark the single metric that carries the argument.
- Everything the presenter says but doesn't show goes in `notes` — it survives into PowerPoint.

### 3. Build

```bash
# lint the spec against the brand rules — writes nothing
uv run --with python-pptx scripts/build_pptx.py deck.json --lint-only

# build
uv run --with python-pptx scripts/build_pptx.py deck.json -o deck.pptx
uv run --with python-pptx scripts/build_pptx.py deck.json --mode light   # light ground
uv run --with python-pptx scripts/build_pptx.py deck.json --strict       # lint findings are fatal
```

Paths are relative to this skill's directory. YAML specs also need `--with pyyaml`.
Without `uv`: `pip install python-pptx` and run with `python3`.

**Fonts.** The builder defaults to Helvetica Now Display + Geist Mono. `.pptx` cannot embed
fonts — a viewer without them gets a silent substitution. For decks that leave the
building, either confirm the recipient has them or pass
`--font-display Arial --font-mono "Courier New"` and accept the trade.

### 4. Verify what you actually produced — always

Never deliver a deck you have not seen rendered. Text overflows, headlines wrap into
content, tables run past the safe area.

```bash
soffice --headless --convert-to pdf deck.pptx --outdir .
pdftoppm -png -r 80 deck.pdf slide
```

Then read every PNG and run `references/brand-qa.md`. Fix by editing the **spec**, never
by hand-editing the .pptx — hand edits are lost on the next build.

### 5. Illustrations

Decks needing editorial imagery pair with the **`amini-illustrations`** skill: plan a shot
list, generate 16:9 images, audit the palette, then reference the files from `image`
slides. Do not let an illustration become decoration — if the slide's idea survives with
the image removed, cut the image.

### 6. Deliver

Save as `decks/<slug>/<slug>.pptx` alongside its spec, so the next revision is a spec
edit. Report: slide count, spine used, mode, what is unverified, and which slides are
load-bearing versus cuttable if time runs short.

## Brand ground rules

Non-negotiable, from `brandkit/DESIGN.md`:

- **Dark is the default.** Space Black `#121212` ground; Marble White `#FFFFFF` type.
- **Sunglow `#FFC83C` is an accent, never a fill.** One accented element per slide.
- **Light mode swaps the accent to Bordeaux `#861D2C`.** Sunglow on white measures ~1.7:1
  and fails WCAG AA even at display sizes; the brand mandates AA, so Bordeaux — the
  designated light-ground accent — carries the role. Slate Grey stays a divider colour,
  never body text on white.
- **Nothing off-palette.** Greyscale plus Sunglow (plus Bordeaux on light). No gradients,
  no glows, no drop shadows, no 3D.
- **Eyebrows in Geist Mono, ALL-CAPS**, 4–6% tracking. Hierarchy is always
  `eyebrow › heading › body › caption`.
- **Generous space.** Empty area is the brand, not wasted room. Never fill a slide because
  it looks empty.

## Output register

Keep the outline terse. Keep delivery factual: what was built, where it is, what was
verified, what wasn't. Don't narrate the design system — the deck carries it.

About

An agentic skill for the deck half of Amini's product surface. It picks a narrative spine for the audience in the room (government, investor, telco, internal review, falsifiable-claims research) before a single slide exists, then renders content from a declarative deck spec — so the argument is authored and every visual decision belongs to the design system. Two outputs, one token set: a native, editable `.pptx` built with python-pptx (eleven layouts, native charts, tables, speaker notes, dark and light grounds), or a self-contained 16:9 HTML deck with keyboard navigation and Chart.js theming for screen-presented decks. Brand rules are enforced in code, not left to discipline: Space Black ground, one Sunglow accent per slide and never as a fill, Bordeaux on light grounds only, Geist Mono eyebrows, WCAG AA. `scripts/build_pptx.py --lint-only` checks a spec before it renders — headline discipline, bullet ceilings, accent count, palette misuse — and `--strict` makes findings fatal for CI. Pairs with amini-illustrations for editorial imagery.

docs
Author

Amini · Manila, Philippines

Related in Design & Media