skilldrop-cli 0.12.0 → 0.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "deck-builder",
3
- "version": "0.1.0",
4
- "description": "Generate a real PowerPoint (.pptx) file from content, target audience, and a color palette. Produces structurally-appropriate decks (slide count, density, layout choice) tuned for the audience — execs, technical reviewers, sales prospects, investors, internal teams. Use when the user wants an actual editable .pptx, not just an outline.",
3
+ "version": "0.2.0",
4
+ "description": "Generate a real PowerPoint (.pptx) file from content, audience, and either a brand template or a color palette — with charts, tables and images, not only bullets. Slide count, density and layout are tuned to the audience: execs, boards, technical reviewers, sales prospects, investors, internal teams. Use when the user wants an actual editable .pptx rather than an outline, wants their corporate template or brand colours applied, or says \"build the deck\", \"make it a pptx\", \"use our template\".",
5
5
  "entrypoint": "SKILL.md",
6
6
  "deps": {
7
7
  "npm": [],
8
8
  "pip": ["python-pptx==1.0.2"]
9
9
  },
10
10
  "env": { "required": [], "optional": [] },
11
- "related": ["audience-profile", "slide-outliner"],
11
+ "related": ["audience-profile", "slide-outliner", "doc-critique"],
12
12
  "install": {
13
13
  "pip": "python3 -m pip install -r requirements.txt"
14
14
  },
15
- "tags": ["powerpoint", "pptx", "deck", "presentation", "stakeholder-communication"],
16
- "model": { "tier": "standard", "rationale": "Generates pptx content + runs a script. Content shaping, not hard reasoning." }
15
+ "tags": ["powerpoint", "pptx", "deck", "presentation", "template", "charts", "stakeholder-communication"],
16
+ "model": { "tier": "standard", "rationale": "Shapes content, maps a brand template's layouts, and runs a script. Judgment, not hard reasoning." }
17
17
  }
@@ -29,6 +29,8 @@ These are bundled in [`templates/palettes.json`](templates/palettes.json) and se
29
29
  | `vibrant` | Internal / sales / pitch decks — energetic |
30
30
  | `dark-mode` | Engineering audiences who prefer dark, or for live demos |
31
31
  | `editorial` | Long-form / read-ahead decks with lots of text |
32
+ | `forest` | Calm, nature-leaning — sustainability, long-horizon programmes |
33
+ | `sunset` | Warm, narrative-leaning — story-first sales and internal decks |
32
34
 
33
35
  ## Layout → content matching
34
36
 
@@ -40,6 +42,9 @@ The biggest deck-design mistake is "everything is a bulleted content slide". Use
40
42
  | A list of 2–6 related points | `content` | `two_column` (over-engineered) |
41
43
  | A comparison (us vs. them, before vs. after) | `two_column` | `content` with sub-bullets |
42
44
  | A pithy customer / SME quote | `quote` | `content` ("Customer says…") |
45
+ | 3+ comparable figures over time or category | `chart` | `content` with numbers in bullets |
46
+ | Row-and-column data, ≤ 12 rows | `table` | `two_column` faked with aligned bullets |
47
+ | An architecture / flow / screenshot | `image` | describing the diagram in prose |
43
48
  | A topic break / new section | `section` | another title slide |
44
49
  | First slide | `title` | jumping straight into `content` |
45
50
  | Final slide with The Ask | `closing` | `content` titled "Thank you" |
@@ -90,3 +95,86 @@ Speaker notes should be *what's not on the slide*, not a redundant copy.
90
95
  - **Don't use both italic and bold** in the same sentence for emphasis.
91
96
  - **Don't mix serif and sans-serif** unless you really know what you're doing.
92
97
  - **Slide numbers** — include them for decks > 10 slides; omit for short decks.
98
+
99
+ ## Brand templates
100
+
101
+ A template is inherited, not imitated: `template` points the build at a `.pptx` or `.potx`, and
102
+ the deck is generated on that file's masters, theme fonts, theme colours, logos and slide size.
103
+ Sample slides shipped inside the template are dropped; its layouts are kept.
104
+
105
+ ### The layout map
106
+
107
+ `layout_map` binds each logical layout to one of the template's layout names (or its index).
108
+ Discover them with `--list-layouts`. Matching is exact name first, then case-insensitive, then
109
+ substring — so `"content": "Title and Content"` and `"content": "title and content"` both hit.
110
+
111
+ | Logical layout | What to map it to | If unmapped |
112
+ |---|---|---|
113
+ | `title` | The template's title/cover layout | Built-in cover — **loses the brand**, always map it |
114
+ | `section` | Section header / divider | Built-in divider — always map it |
115
+ | `content` | Title and content / title and bullets | Built-in — always map it |
116
+ | `two_column` | Two content / comparison | Built-in two-column; acceptable |
117
+ | `closing` | Closing / thank-you / title-only | Built-in — always map it |
118
+ | `image` | Picture with caption (best), else title-only | Image drawn into the content area |
119
+ | `big_number`, `quote`, `table`, `chart` | Title-only | Drawn into the claimed content area; fine |
120
+
121
+ Placeholders are filled, not replaced — the run keeps the template's font, so the deck inherits
122
+ the brand's typography instead of Calibri. Placeholders left unfilled are deleted, so no
123
+ "Click to add text" ghosts survive. For `big_number`, `quote`, `table`, `chart` and `image`, the
124
+ largest empty body (or picture) placeholder is claimed for its rectangle and removed, so custom
125
+ content lands where the template intended content to go.
126
+
127
+ ### Template gotchas
128
+
129
+ - **Slide size comes from the template.** `aspect` is ignored, with a warning. A 4:3 corporate
130
+ master produces a 4:3 deck — tell the user rather than silently letting it look cramped.
131
+ - **Charts and tables are drawn, not templated.** They take palette colours, not theme colours.
132
+ Supply brand hexes alongside the template so they match.
133
+ - **Slide numbers:** if the template's master already stamps them, the script does not add its
134
+ own.
135
+ - **A template that fails to open** is a hard error, never a silent fall-back to the built-in
136
+ design — a deck that quietly lost its branding is worse than a failed build.
137
+
138
+ ## Charts
139
+
140
+ `chart` types: `column`, `bar`, `line`, `stacked_column`, `stacked_bar`, `pie`, `doughnut`.
141
+
142
+ | Question the slide answers | Type |
143
+ |---|---|
144
+ | How does this compare across categories? | `column` (≤ 7 categories) or `bar` (longer labels) |
145
+ | How has this moved over time? | `line` |
146
+ | What is the mix of a whole? | `pie`, and only with ≤ 5 slices |
147
+ | How does the mix change across categories? | `stacked_column` |
148
+
149
+ ### Hard rules
150
+
151
+ - **Every chart carries a `takeaway`** — the sentence the audience should leave with, above the
152
+ plot. A chart without one makes the audience do the analysis live.
153
+ - **Every chart carries a `source`.** No source means the number is unverifiable, which on a
154
+ board deck means it is indefensible.
155
+ - **Never chart invented numbers.** If the user supplied three figures, chart three figures.
156
+ A forecast is labelled a forecast, in the series name.
157
+ - **`null` is the right value for a gap.** Padding a short series with zeroes draws a cliff that
158
+ didn't happen.
159
+ - **Pie charts cap at 5 slices.** More than that, use `bar` sorted descending.
160
+ - **One chart per slide.** Two charts is two slides, or a `two_column` with the takeaway split.
161
+
162
+ ## Tables
163
+
164
+ - **≤ 12 data rows.** Past that it belongs in the appendix or an attached spreadsheet.
165
+ - **≤ 5 columns** at 16:9, ≤ 4 at 4:3. Wider than that and the font drops below readable.
166
+ - **Put the column the audience cares about last or first**, never buried in the middle.
167
+ - **Cells are values, not sentences.** A table cell running to two lines means the content is
168
+ prose and wants a `content` slide.
169
+ - Font size auto-shrinks past 7 and past 10 rows; header row takes `primary`, body rows zebra
170
+ against `#F2F4F8`.
171
+
172
+ ## Images
173
+
174
+ - **Raster only.** `python-pptx` reads PNG/JPG/GIF/BMP/TIFF. SVG, EMF and PDF raise on import —
175
+ export to PNG at 2× the slide size before building.
176
+ - **Relative paths resolve against the spec file**, not the working directory.
177
+ - `position: "left"` / `"right"` pairs the image with bullets on the other half;
178
+ `"full"` (default) gives it the whole content area.
179
+ - A missing or unreadable image draws a bordered placeholder box naming the file, and warns.
180
+ That box is a build artefact, never a deliverable — resolve it before the deck is presented.