@aivorynet/slaide 1.0.0 → 1.0.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.
- package/CHANGELOG.md +23 -1
- package/README.md +5 -5
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/install/index.js +34 -0
- package/dist/install/index.js.map +1 -1
- package/package.json +9 -1
- package/skills/slaide/SKILL.md +9 -8
- package/skills/slaide/themes.md +45 -1
- package/skills/slaide/examples/branded-deck.slaide +0 -198
- package/skills/slaide/examples/branded-theme.slaide.yaml +0 -187
- package/skills/slaide/examples/sample.slaide +0 -98
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,26 @@ All notable changes to slaide are recorded here. The format follows
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [1.0.2] - 2026-06-29
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- `master: aurora` (any bundled theme name) now resolves to the bundled theme, matching what `slaide themes` and `slaide_list_themes` advertise. Previously only a file path resolved.
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- The agent skill now guides authoring a master from the bundled `themes.md` (with a copy-paste minimal master), prefers a fresh master over copying an example, and checks the project for brand assets (colours, logo, existing theme) before asking the user.
|
|
18
|
+
- `slaide install` notices a missing Playwright Chromium and offers to install it (needed for export and for the `shoot --montage` see-it loop).
|
|
19
|
+
- Example decks are no longer bundled in the package; the skill links to them on GitHub.
|
|
20
|
+
|
|
21
|
+
## [1.0.1] - 2026-06-29
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- README leads with the positioning: slaide is a native presentation file format built for AI.
|
|
26
|
+
- The CLI install uses a global install (`npm install -g @aivorynet/slaide`).
|
|
27
|
+
- Package, skill, and docs use the scoped name `@aivorynet/slaide` (the `slaide` command is unchanged).
|
|
28
|
+
|
|
9
29
|
## [1.0.0] - 2026-06-29
|
|
10
30
|
|
|
11
31
|
First public release.
|
|
@@ -22,5 +42,7 @@ First public release.
|
|
|
22
42
|
- `.slaidec` packing and unpacking, and the `compare` fidelity tool.
|
|
23
43
|
- The bundled `aurora` theme.
|
|
24
44
|
|
|
25
|
-
[Unreleased]: https://github.com/aivorynet/slaide/compare/v1.0.
|
|
45
|
+
[Unreleased]: https://github.com/aivorynet/slaide/compare/v1.0.2...HEAD
|
|
46
|
+
[1.0.2]: https://github.com/aivorynet/slaide/releases/tag/v1.0.2
|
|
47
|
+
[1.0.1]: https://github.com/aivorynet/slaide/releases/tag/v1.0.1
|
|
26
48
|
[1.0.0]: https://github.com/aivorynet/slaide/releases/tag/v1.0.0
|
package/README.md
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# slaide
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A new presentation file format, built for AI.
|
|
4
4
|
|
|
5
5
|

|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
`.slaide` is a native, plain-text format for presentations: Markdown plus a small YAML theme. PowerPoint's `.pptx` is bulky XML that language models get wrong. A `.slaide` file is a few kilobytes of text an AI writes correctly, every time. One file renders to a navigable web deck, a high-fidelity PDF, and editable PowerPoint. A reusable theme carries the design, so nobody hand-places pixels.
|
|
8
8
|
|
|
9
|
-
AI writes it
|
|
9
|
+
AI writes it because it is just text. AI designs it because the theme does the design. You bring the idea.
|
|
10
10
|
|
|
11
11
|
Most of slaide is free and open source. The language, the renderer, the native viewer, export, import, the MCP server, and the agent skill all live in this repo under Apache-2.0. You can use it today, for anything.
|
|
12
12
|
|
|
@@ -18,10 +18,10 @@ Nothing to set up:
|
|
|
18
18
|
npx @aivorynet/slaide new talk.slaide
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
Or
|
|
21
|
+
Or install the command globally:
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
|
-
npm install @aivorynet/slaide
|
|
24
|
+
npm install -g @aivorynet/slaide
|
|
25
25
|
npx playwright install chromium # only for PDF, PPTX, and image export
|
|
26
26
|
```
|
|
27
27
|
|
package/dist/index.js
CHANGED
|
@@ -36,7 +36,16 @@ export function resolveMasterPath(headmatter, deckDir) {
|
|
|
36
36
|
if (!ref)
|
|
37
37
|
return existsSync(DEFAULT_MASTER) ? DEFAULT_MASTER : '';
|
|
38
38
|
const abs = resolve(deckDir, ref);
|
|
39
|
-
|
|
39
|
+
if (existsSync(abs))
|
|
40
|
+
return abs;
|
|
41
|
+
// A bare name (no path or extension) may be a bundled theme, e.g. `master: aurora` — the
|
|
42
|
+
// identifier `slaide themes` / slaide_list_themes advertises. Resolve it against the bundle.
|
|
43
|
+
if (!/[\\/.]/.test(ref)) {
|
|
44
|
+
const bundled = resolve(dirname(DEFAULT_MASTER), `${ref}.slaide.yaml`);
|
|
45
|
+
if (existsSync(bundled))
|
|
46
|
+
return bundled;
|
|
47
|
+
}
|
|
48
|
+
return ref;
|
|
40
49
|
}
|
|
41
50
|
export function compileSource(source, deckDir) {
|
|
42
51
|
const parsed = parseDeck(source);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAsB,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,2FAA2F;AAC3F,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,uEAAuE,CAAC,CAAC;IACtG,CAAC;AACH,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AAY1C,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,EAAE,EAAE,8BAA8B,CAAC,CAAC;AAC5E;+FAC+F;AAC/F,MAAM,CAAC,MAAM,mBAAmB,GAAG,cAAc,CAAC;AAElD,SAAS,SAAS;IAChB,OAAO,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,8BAA8B,CAAC,CAAC;IACnG,OAAO,GAAa,CAAC;AACvB,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,iBAAiB,CAAC,UAAmC,EAAE,OAAe;IACpF,MAAM,GAAG,GAAG,OAAO,UAAU,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7E,IAAI,CAAC,GAAG;QAAE,OAAO,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAClC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAsB,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,2FAA2F;AAC3F,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,uEAAuE,CAAC,CAAC;IACtG,CAAC;AACH,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AAY1C,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,EAAE,EAAE,8BAA8B,CAAC,CAAC;AAC5E;+FAC+F;AAC/F,MAAM,CAAC,MAAM,mBAAmB,GAAG,cAAc,CAAC;AAElD,SAAS,SAAS;IAChB,OAAO,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,8BAA8B,CAAC,CAAC;IACnG,OAAO,GAAa,CAAC;AACvB,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,iBAAiB,CAAC,UAAmC,EAAE,OAAe;IACpF,MAAM,GAAG,GAAG,OAAO,UAAU,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7E,IAAI,CAAC,GAAG;QAAE,OAAO,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAClC,IAAI,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAChC,yFAAyF;IACzF,6FAA6F;IAC7F,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,GAAG,GAAG,cAAc,CAAC,CAAC;QACvE,IAAI,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO,OAAO,CAAC;IAC1C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,OAAe;IAC3D,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACjE,IAAI,MAAc,CAAC;IACnB,IAAI,SAAS,GAAG,OAAO,CAAC;IACxB,IAAI,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACzC,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QAChC,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QAChH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,qBAAqB,UAAU,IAAI,MAAM,4BAA4B,EAAE,CAAC,CAAC;IAC9H,CAAC;IACD,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAChH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9C,OAAO,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC;AAQD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAE3E,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,OAAe;IAC5D,IAAI,QAAQ,GAAc,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,EAAE,EAAE,EAAE,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9C,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC;IACzB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,CAAE,CAAW,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACzH,CAAC;IACD,MAAM,WAAW,GAAiB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrD,GAAG,CAAC;QACJ,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;KACxD,CAAC,CAAC,CAAC;IACJ,OAAO,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;AAC/E,CAAC;AAED,+EAA+E;AAE/E,MAAM,IAAI,GAA2B;IACnC,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,eAAe;IACvB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,oBAAoB,EAAE,8CAA8C;IAC5E,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,WAAW;CACpB,CAAC;AAEF,8EAA8E;AAC9E,+CAA+C;AAC/C,MAAM,gBAAgB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAEzC,SAAS,SAAS,CAAC,CAAS,EAAE,IAAc,EAAE,KAAiC;IAC7E,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC;IACvC,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACpC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,uEAAuE;IAC3F,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,CAAS,EAAE,IAAc;IAC9C,IAAI,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAClD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1B,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,gBAAgB;gBAAE,OAAO,IAAI,CAAC;YACvD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,0BAA0B,CAAC;YACrD,OAAO,QAAQ,IAAI,WAAW,YAAY,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvE,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,IAAc;IACvD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC/C,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC3D,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QACjB,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;IACjE,CAAC,CAAC,CAAC;IACH,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,4BAA4B,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;QAC3D,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACpC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC;AAED,+EAA+E;AAE/E,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,OAAe,EAAE,OAA6C,EAAE;IAI7G,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzD,IAAI,IAAI,GAAG,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAChC,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK;QAAE,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IAC3E,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,OAA6C,EAAE;IAI9F,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9C,OAAO,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAClE,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,iBAAiB,IAAI,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9F,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAEzF,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC5F,2FAA2F;AAC3F,6DAA6D;AAC7D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEpF,mFAAmF;AACnF,oFAAoF;AACpF,iEAAiE;AACjE,8EAA8E;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC9D,iFAAiF;AACjF,+FAA+F;AAC/F,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC5F,yFAAyF;AACzF,gGAAgG;AAChG,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC"}
|
package/dist/install/index.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
// for scripts and CI. No third-party deps: prompts use node:readline/promises.
|
|
7
7
|
import { homedir } from 'node:os';
|
|
8
8
|
import { resolve } from 'node:path';
|
|
9
|
+
import { existsSync } from 'node:fs';
|
|
9
10
|
import { detectClis } from './detect.js';
|
|
10
11
|
import { ADAPTERS, allSpecs, getAdapter } from './registry.js';
|
|
11
12
|
import { skillSourceDir, readSkillName } from './skills.js';
|
|
@@ -52,6 +53,37 @@ async function promptYesNo(question, def) {
|
|
|
52
53
|
return def;
|
|
53
54
|
return /^y/i.test(ans);
|
|
54
55
|
}
|
|
56
|
+
/** Is a Playwright Chromium build present? slaide uses it for export and the shoot/montage see-it loop. */
|
|
57
|
+
async function chromiumPresent() {
|
|
58
|
+
try {
|
|
59
|
+
const pw = await import('playwright');
|
|
60
|
+
const p = pw.chromium.executablePath();
|
|
61
|
+
return !!p && existsSync(p);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/** Chromium powers PDF/PPTX/image export and `shoot --montage` (the image an agent reads to SEE
|
|
68
|
+
* the deck). If it is missing, say why and offer to install it. */
|
|
69
|
+
async function maybeOfferChromium(opts) {
|
|
70
|
+
if (await chromiumPresent())
|
|
71
|
+
return;
|
|
72
|
+
const cmd = 'npx playwright install chromium';
|
|
73
|
+
console.log('');
|
|
74
|
+
console.log('Chromium is not installed. slaide needs it to export PDF / PPTX / images and to run');
|
|
75
|
+
console.log('`slaide shoot --montage` — the contact sheet an agent reads to SEE the rendered deck.');
|
|
76
|
+
const run = opts.yes || (isInteractive(opts) && (await promptYesNo('Install Chromium now?', true)));
|
|
77
|
+
if (!run) {
|
|
78
|
+
console.log(`Install it later with: ${cmd}`);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
console.log(`Running: ${cmd}`);
|
|
82
|
+
const { spawnSync } = await import('node:child_process');
|
|
83
|
+
const r = spawnSync(cmd, { shell: true, stdio: 'inherit' });
|
|
84
|
+
if (r.status !== 0)
|
|
85
|
+
console.log(`Chromium install did not finish. Run it manually: ${cmd}`);
|
|
86
|
+
}
|
|
55
87
|
/** Resolve which adapters to act on, from --cli or an interactive pick. */
|
|
56
88
|
async function chooseClis(opts, detected) {
|
|
57
89
|
if (opts.cli && opts.cli.length) {
|
|
@@ -121,6 +153,8 @@ export async function runInstall(opts) {
|
|
|
121
153
|
console.log(` mcp -> ${row.mcp.registered ? 'registered (' + row.mcp.method + ')' : 'skipped: ' + row.mcp.detail}`);
|
|
122
154
|
}
|
|
123
155
|
}
|
|
156
|
+
if (!opts.json && !opts.dryRun)
|
|
157
|
+
await maybeOfferChromium(opts);
|
|
124
158
|
return 0;
|
|
125
159
|
}
|
|
126
160
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/install/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/install/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aivorynet/slaide",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "An AI-authorable slide language with beautiful web + PDF output",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"author": "Paul Piper",
|
|
8
|
+
"homepage": "https://getslaide.com",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/aivorynet/slaide.git"
|
|
12
|
+
},
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/aivorynet/slaide/issues"
|
|
15
|
+
},
|
|
8
16
|
"keywords": [
|
|
9
17
|
"slides",
|
|
10
18
|
"presentation",
|
package/skills/slaide/SKILL.md
CHANGED
|
@@ -15,16 +15,17 @@ One `.slaide` file (Markdown + a small YAML header) → web deck + PDF + PPTX. Y
|
|
|
15
15
|
Run as `npx @aivorynet/slaide <cmd>` (or `npm run slaide -- <cmd>` where a script exists; at a monorepo root `npm run slaide -w @aivorynet/slaide -- <cmd>`, which shifts cwd to `core/` — pass **absolute** deck paths).
|
|
16
16
|
|
|
17
17
|
## Workflow
|
|
18
|
-
1. **
|
|
19
|
-
2.
|
|
20
|
-
3.
|
|
21
|
-
4.
|
|
22
|
-
5.
|
|
18
|
+
1. **Brand first — check, then ask.** Scan the project/context for brand assets: colours, fonts, a logo, an existing `*.slaide.yaml` master, a brand doc. Found a master → use it. Found brand → build the master around it. Found nothing → **ask** the user: brand colours? logo? an existing theme, or author one from scratch? Prefer authoring a **new master** over copying an example.
|
|
19
|
+
2. **Read** `reference.md` (language) and `themes.md` (the master format + footguns) before authoring a master. Worked example decks: https://github.com/aivorynet/slaide/tree/main/examples
|
|
20
|
+
3. **`slaide slots <deck>`** — prints the master's real layouts, slots, colours, gradients, sizes, transitions. Reference these **by name**. (Run on the deck, not the master.)
|
|
21
|
+
4. **Write** the `.slaide` — and the master, if authoring one.
|
|
22
|
+
5. **`slaide validate <deck> --strict`** — a **gate**: must be clean. Every `unknown-*` / `low-contrast` / `non-embeddable-font` means something renders wrong even when it "looks valid".
|
|
23
|
+
6. **See it.** You can't open a browser, so: **`slaide shoot <deck> --montage out/sheet.jpg`** tiles every slide into one JPEG — **Read that image.** It's the only way to catch the common defects: overlapping / clipped text, hollow cards, weak contrast, overflow. Iterate until it looks genuinely professional — not just until validate passes.
|
|
23
24
|
|
|
24
25
|
## Format in 30 seconds
|
|
25
26
|
```
|
|
26
27
|
---
|
|
27
|
-
master: ./theme.slaide.yaml # omit →
|
|
28
|
+
master: ./theme.slaide.yaml # path, or "aurora" (bundled); omit → aurora
|
|
28
29
|
title: My Talk
|
|
29
30
|
~transition: slide-left # `~` cascades to later slides
|
|
30
31
|
---
|
|
@@ -46,8 +47,8 @@ layout: title-content
|
|
|
46
47
|
- `:: name ::` routes Markdown into a layout slot. `[text]{.class}` = styled span (colour `.accent`, gradient `.grad`, size `.lg`). `>>>` = build. `??? text` = note. Inside ``` fences these sigils are literal.
|
|
47
48
|
- Charts: ` ```echart ` (data viz, ECharts option as JSON) and ` ```mermaid ` (diagrams) → theme-coloured SVG. Put a chart in a slot with height (a `1fr` row).
|
|
48
49
|
|
|
49
|
-
##
|
|
50
|
-
|
|
50
|
+
## The master (theme)
|
|
51
|
+
Use the bundled theme — omit `master:` or set `master: aurora` — or author your own (preferred for branded decks). **Read `themes.md` for the format before writing one**: fonts, a type scale, two-tier colour (palette + roles), gradients, backgrounds, grid layouts, chrome — all data. Reference **roles, not hex**, so a reskin is a palette swap. Past "tidy", give the deck **one signature** (a faint logo-derived motif or a recurring accent panel) and vary composition slide to slide. The load-bearing footguns — dark-on-dark text, hollow `box:` cards, chrome-corner collisions — are flagged in `themes.md`; heed them. A deck about slaide itself: use the shipped brand in the sibling `slaide-hugo` repo, don't invent one.
|
|
51
52
|
|
|
52
53
|
## Commands (prefix `npx @aivorynet/slaide`)
|
|
53
54
|
| Command | Does |
|
package/skills/slaide/themes.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# slaide master / theme authoring
|
|
2
2
|
|
|
3
|
-
A **master** is a YAML file defining the whole visual system as data, so one theme serves many decks and an agent can both *use* and *author* it. Reference it from a deck with `master: ./your-theme.slaide.yaml
|
|
3
|
+
A **master** is a YAML file defining the whole visual system as data, so one theme serves many decks and an agent can both *use* and *author* it. Reference it from a deck with `master: ./your-theme.slaide.yaml`, or use a bundled theme by name (`master: aurora`); omit `master:` and you get `aurora`.
|
|
4
4
|
|
|
5
5
|
## Top-level shape
|
|
6
6
|
|
|
@@ -23,6 +23,50 @@ layouts: { … } # grid templates with typed slots
|
|
|
23
23
|
|
|
24
24
|
Sizes are in canvas px; the runtime scales each slide to fit (letterboxed). Match your source design (e.g. `1920×1080`) so px == design pt.
|
|
25
25
|
|
|
26
|
+
## Minimal master (copy, then customise)
|
|
27
|
+
|
|
28
|
+
A complete, compiling starter. Swap the palette + fonts for the brand, add layouts as needed.
|
|
29
|
+
|
|
30
|
+
```yaml
|
|
31
|
+
schema: slaide/1
|
|
32
|
+
name: my-theme
|
|
33
|
+
canvas: { aspect: "16:9", width: 1280, height: 720 }
|
|
34
|
+
fonts:
|
|
35
|
+
sans: { family: "Inter", provider: google, weights: [400, 600, 700] }
|
|
36
|
+
display: { family: "Fraunces", provider: google, weights: [600, 900] }
|
|
37
|
+
typeScale:
|
|
38
|
+
base: "26px"
|
|
39
|
+
ratio: 1.2
|
|
40
|
+
steps: { h1: 4, h2: 3, h3: 2, body: 0, caption: -1 }
|
|
41
|
+
colors:
|
|
42
|
+
palette: { ink: "#0B1220", paper: "#F8FAFC", brand: "#3B82F6" }
|
|
43
|
+
roles:
|
|
44
|
+
background: "{palette.ink}"
|
|
45
|
+
text: "{palette.paper}"
|
|
46
|
+
heading: "{palette.paper}"
|
|
47
|
+
accent: "{palette.brand}"
|
|
48
|
+
layouts:
|
|
49
|
+
cover:
|
|
50
|
+
align: center
|
|
51
|
+
areas: ["title", "subtitle"]
|
|
52
|
+
rows: "auto auto"
|
|
53
|
+
slots:
|
|
54
|
+
title: { type: title, style: { font: display, size: h1, weight: "900" } }
|
|
55
|
+
subtitle: { type: subtitle, style: { size: h3, color: accent } }
|
|
56
|
+
title-content:
|
|
57
|
+
areas: ["title", "body"]
|
|
58
|
+
rows: "auto 1fr"
|
|
59
|
+
slots:
|
|
60
|
+
title: { type: title, style: { size: h2 } }
|
|
61
|
+
body: { type: body }
|
|
62
|
+
section:
|
|
63
|
+
align: center
|
|
64
|
+
areas: ["title"]
|
|
65
|
+
rows: "1fr"
|
|
66
|
+
slots:
|
|
67
|
+
title: { type: title, style: { font: display, size: h1, align: center } }
|
|
68
|
+
```
|
|
69
|
+
|
|
26
70
|
## fonts / typeScale
|
|
27
71
|
|
|
28
72
|
**Use real Google Fonts only** (`provider: google`) — pick families that actually exist on Google Fonts and embed (avoid **JetBrains Mono**, which doesn't). A `display` (headings) + a `sans` (body) is plenty; add a `mono` role only if the deck shows code. A `provider: system`/`local` font that isn't a common system font (Arial, Calibri, Georgia…) **warns** (`non-embeddable-font`): it won't embed in the `.pptx`, so PowerPoint substitutes it off your machine.
|
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
master: ./vela.slaide.yaml
|
|
3
|
-
title: Vela
|
|
4
|
-
company: Vela, Inc.
|
|
5
|
-
date: "2026"
|
|
6
|
-
author: Vela team
|
|
7
|
-
~transition: fade
|
|
8
|
-
---
|
|
9
|
-
layout: cover
|
|
10
|
-
---
|
|
11
|
-
:: brand ::
|
|
12
|
-
```svg
|
|
13
|
-
<svg width="150" height="42" viewBox="0 0 120 40"><text x="0" y="31" font-family="Open Sans, Inter, sans-serif" font-size="30" font-weight="800" letter-spacing="2" fill="currentColor">VELA</text></svg>
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
:: title ::
|
|
17
|
-
[Smart Route]{.grad}
|
|
18
|
-
|
|
19
|
-
:: sub ::
|
|
20
|
-
The spot market for AI compute
|
|
21
|
-
|
|
22
|
-
:: diagram ::
|
|
23
|
-

|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
layout: team
|
|
27
|
-
chrome: header
|
|
28
|
-
---
|
|
29
|
-
:: title ::
|
|
30
|
-
[Hi!]{.teal} We are
|
|
31
|
-
|
|
32
|
-
:: lname ::
|
|
33
|
-
{.round anchor:"24% 22% 18% 32%"}
|
|
34
|
-
[Alex]{.blue}<br>Rivera
|
|
35
|
-
|
|
36
|
-
:: lbio ::
|
|
37
|
-
Built developer tooling and inference platforms for a decade. Shipped APIs used by thousands of teams.
|
|
38
|
-
|
|
39
|
-
Background across the full stack, from kernels to billing.
|
|
40
|
-
|
|
41
|
-
:: rname ::
|
|
42
|
-
{.round anchor:"73.5% 22% 18% 32%"}
|
|
43
|
-
[Sam]{.teal}<br>Chen
|
|
44
|
-
|
|
45
|
-
:: rbio ::
|
|
46
|
-
Software engineer and product lead. Specializes in user experience and turning messy infra into simple products.
|
|
47
|
-
|
|
48
|
-
M.Sc. in distributed systems.
|
|
49
|
-
|
|
50
|
-
:: logos ::
|
|
51
|
-
**We worked with** {.logo height=30px} {.logo height=30px} {.logo height=30px} {.logo height=30px} {.logo height=30px} {.logo height=30px}
|
|
52
|
-
|
|
53
|
-
---
|
|
54
|
-
layout: content-aside
|
|
55
|
-
footer: "We want to be **the router for compute**"
|
|
56
|
-
---
|
|
57
|
-
:: title ::
|
|
58
|
-
We offer: [Developer Tooling In The Age of AI]{.purple}
|
|
59
|
-
|
|
60
|
-
:: body ::
|
|
61
|
-
| Product | Traction | Status |
|
|
62
|
-
|---|---|---|
|
|
63
|
-
| **Route** — smart inference | [2,000+]{.blue.lg} teams | Paying customers |
|
|
64
|
-
| **Forge** — spot brokering | [300+]{.green.lg} clusters | Paid pilots |
|
|
65
|
-
| **Atlas** — capacity float | [18,000+]{.purple.lg} GPUs | Paying customers |
|
|
66
|
-
|
|
67
|
-
:: aside ::
|
|
68
|
-
We test the market and improve the offering. So far, all organic growth.
|
|
69
|
-
|
|
70
|
-
**Zero ad spend.**
|
|
71
|
-
|
|
72
|
-
---
|
|
73
|
-
layout: statement
|
|
74
|
-
footer: "Everyone is building supply. **Nobody is routing demand.**"
|
|
75
|
-
---
|
|
76
|
-
:: title ::
|
|
77
|
-
$765 billion in GPUs. [½ sit idle.]{.blue}
|
|
78
|
-
|
|
79
|
-
:: s1 ::
|
|
80
|
-
[40-80%]{.grad-purple.huge}
|
|
81
|
-
|
|
82
|
-
### Capacity Idle
|
|
83
|
-
|
|
84
|
-
[Inference workloads dip to 15–30% off-peak. A rack of GPUs costs $4M. At 40% utilization, half that investment earns nothing.]{.sm .muted}
|
|
85
|
-
|
|
86
|
-
:: s2 ::
|
|
87
|
-
[10x]{.grad-teal.huge}
|
|
88
|
-
|
|
89
|
-
### Price Spread
|
|
90
|
-
|
|
91
|
-
[Same GPU, same hour: $1.49 to $10.00. Up to 14.5× on spot.]{.sm .muted}
|
|
92
|
-
|
|
93
|
-
:: s3 ::
|
|
94
|
-
[60+]{.grad-blue.huge}
|
|
95
|
-
|
|
96
|
-
### Providers
|
|
97
|
-
|
|
98
|
-
[Tracked and growing. No aggregated spot market exists yet.]{.sm .muted}
|
|
99
|
-
|
|
100
|
-
---
|
|
101
|
-
layout: two-col
|
|
102
|
-
footer: "We take a cut of the spread. **Everybody wins.**"
|
|
103
|
-
---
|
|
104
|
-
:: title ::
|
|
105
|
-
Route the [tokens.]{.orange} Or rent the [GPU.]{.orange}
|
|
106
|
-
|
|
107
|
-
:: left ::
|
|
108
|
-
**Smart inference routing**
|
|
109
|
-
|
|
110
|
-
Drop-in OpenAI-compatible API. **Change one line of code.** Every request scored and routed to the cheapest healthy provider, with auto-failover.
|
|
111
|
-
|
|
112
|
-
**GPU spot brokering**
|
|
113
|
-
|
|
114
|
-
We find and provision the **cheapest spot GPU** for your model. Same scoring, same reliability layer, automatic migration. Up to **80%+ discount**.
|
|
115
|
-
|
|
116
|
-
:: right ::
|
|
117
|
-
| GPU | Pool | $/hr | Trend |
|
|
118
|
-
|---|---|---|---|
|
|
119
|
-
| **B300** · 2100 GB | bolt | **$2.99** | ▲ 20% |
|
|
120
|
-
| **B200** · 1440 GB | bolt | **$2.44** | ▲ 13% |
|
|
121
|
-
| **H200** · 1128 GB | drift | **$0.60** | ▼ 5% |
|
|
122
|
-
| **A100** · 640 GB | bolt | **$0.71** | ▲ 10% |
|
|
123
|
-
| **H100** · 640 GB | bolt | **$1.30** | ▲ 23% |
|
|
124
|
-
| **L40S** · 384 GB | bolt | **$0.55** | ▲ 37% |
|
|
125
|
-
|
|
126
|
-
---
|
|
127
|
-
layout: two-col
|
|
128
|
-
footer: "One line of code. **Every provider.**"
|
|
129
|
-
---
|
|
130
|
-
:: title ::
|
|
131
|
-
How [Smart Route]{.grad} works
|
|
132
|
-
|
|
133
|
-
:: left ::
|
|
134
|
-
```mermaid
|
|
135
|
-
flowchart TD
|
|
136
|
-
C([Your app]) -->|OpenAI-compatible API| R{Smart Route}
|
|
137
|
-
R -->|cheapest healthy| A[Provider A]
|
|
138
|
-
R -->|auto-failover| B[Provider B]
|
|
139
|
-
R -->|spot broker| S[(Spot GPU pool)]
|
|
140
|
-
A --> O([Cheapest healthy token])
|
|
141
|
-
B --> O
|
|
142
|
-
S --> O
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
:: right ::
|
|
146
|
-
**Drop-in.** Change one line of code. Every request is scored on **price and health**, then routed to the cheapest healthy provider.
|
|
147
|
-
|
|
148
|
-
**Resilient.** Automatic failover and live migration across **60+ providers** — no lock-in, no babysitting.
|
|
149
|
-
|
|
150
|
-
---
|
|
151
|
-
layout: title-content
|
|
152
|
-
footer: "Same GPU, same hour — **up to 10× apart.**"
|
|
153
|
-
---
|
|
154
|
-
:: title ::
|
|
155
|
-
Spot price by GPU [($/hr)]{.muted}
|
|
156
|
-
|
|
157
|
-
:: body ::
|
|
158
|
-
```echart
|
|
159
|
-
{
|
|
160
|
-
"grid": { "left": 64, "right": 28, "top": 28, "bottom": 48 },
|
|
161
|
-
"xAxis": { "type": "category", "data": ["L40S", "H200", "A100", "H100", "B200", "B300"] },
|
|
162
|
-
"yAxis": { "type": "value" },
|
|
163
|
-
"series": [
|
|
164
|
-
{
|
|
165
|
-
"type": "bar",
|
|
166
|
-
"data": [0.55, 0.60, 0.71, 1.30, 2.44, 2.99],
|
|
167
|
-
"barWidth": "52%",
|
|
168
|
-
"itemStyle": { "borderRadius": [10, 10, 0, 0] }
|
|
169
|
-
}
|
|
170
|
-
]
|
|
171
|
-
}
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
---
|
|
175
|
-
layout: media-split
|
|
176
|
-
footer: "Everyone is building supply."
|
|
177
|
-
---
|
|
178
|
-
:: media ::
|
|
179
|
-

|
|
180
|
-
|
|
181
|
-
:: copy ::
|
|
182
|
-
## $765B in racks — [half of it idle.]{.blue}
|
|
183
|
-
|
|
184
|
-
The world is racing to build compute. We make the idle half **earn its keep.**
|
|
185
|
-
|
|
186
|
-
[Photo by Taylor Vick on Unsplash]{.sm .muted}
|
|
187
|
-
|
|
188
|
-
---
|
|
189
|
-
layout: closing
|
|
190
|
-
---
|
|
191
|
-
:: card ::
|
|
192
|
-
```svg
|
|
193
|
-
<svg width="160" height="46" viewBox="0 0 120 40"><text x="0" y="31" font-family="Open Sans, Inter, sans-serif" font-size="30" font-weight="800" letter-spacing="2" fill="currentColor">VELA</text></svg>
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
#### The router for AI compute
|
|
197
|
-
|
|
198
|
-
**Vela, Inc.** · hello@vela.dev · vela.dev
|
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
# yaml-language-server: $schema=https://getslaide.com/schema/v1.json
|
|
2
|
-
schema: slaide/1
|
|
3
|
-
name: vela
|
|
4
|
-
description: A dark pitch-deck theme — Open Sans, navy ground, multi-accent gradient highlights.
|
|
5
|
-
|
|
6
|
-
canvas: { aspect: "16:9", width: 1920, height: 1080 }
|
|
7
|
-
|
|
8
|
-
fonts:
|
|
9
|
-
sans: { family: "Open Sans", provider: google, weights: [300, 400, 600, 700] }
|
|
10
|
-
display: { family: "Open Sans", provider: google, weights: [800] }
|
|
11
|
-
mono: { family: "IBM Plex Mono", provider: google, weights: [400, 600] }
|
|
12
|
-
|
|
13
|
-
typeScale:
|
|
14
|
-
base: "24px"
|
|
15
|
-
ratio: 1.2
|
|
16
|
-
steps:
|
|
17
|
-
stat: "110px"
|
|
18
|
-
hero: "80px"
|
|
19
|
-
h1: "72px"
|
|
20
|
-
h2: "44px"
|
|
21
|
-
h3: "36px"
|
|
22
|
-
h4: "28px"
|
|
23
|
-
body: "24px"
|
|
24
|
-
caption: "22px"
|
|
25
|
-
small: "18px"
|
|
26
|
-
|
|
27
|
-
colors:
|
|
28
|
-
palette:
|
|
29
|
-
navy: "#0B1220"
|
|
30
|
-
panel: "#121A2B"
|
|
31
|
-
ink: "#050810"
|
|
32
|
-
white: "#F8FAFC"
|
|
33
|
-
muted: "#8B93A7"
|
|
34
|
-
blue: "#5B8CFF"
|
|
35
|
-
purple: "#A855F7"
|
|
36
|
-
teal: "#2DD4BF"
|
|
37
|
-
green: "#34D399"
|
|
38
|
-
orange: "#FB923C"
|
|
39
|
-
pink: "#EC4899"
|
|
40
|
-
roles:
|
|
41
|
-
background: "{palette.navy}"
|
|
42
|
-
surface: "{palette.panel}"
|
|
43
|
-
text: "{palette.white}"
|
|
44
|
-
heading: "{palette.white}"
|
|
45
|
-
accent: "{palette.blue}"
|
|
46
|
-
link: "{palette.blue}"
|
|
47
|
-
muted: "{palette.muted}"
|
|
48
|
-
|
|
49
|
-
gradients:
|
|
50
|
-
brand: "linear-gradient(100deg, #5B8CFF 0%, #A855F7 50%, #2DD4BF 100%)"
|
|
51
|
-
purple: "linear-gradient(120deg, #A855F7, #EC4899)"
|
|
52
|
-
teal: "linear-gradient(120deg, #2DD4BF, #5B8CFF)"
|
|
53
|
-
blue: "linear-gradient(120deg, #5B8CFF, #818CF8)"
|
|
54
|
-
|
|
55
|
-
tokens:
|
|
56
|
-
"--slide-padding": "120px"
|
|
57
|
-
"--chrome-pad": "120px"
|
|
58
|
-
"--chrome-top": "44px"
|
|
59
|
-
"--chrome-bottom": "44px"
|
|
60
|
-
"--chrome-size": "22px"
|
|
61
|
-
"--chrome-foot-size": "40px"
|
|
62
|
-
"--chrome-page-size": "22px"
|
|
63
|
-
"--logo-h": "34px"
|
|
64
|
-
# ordered colour cycle for ```echart data series (falls back to a default palette)
|
|
65
|
-
"--chart-colors": "#5B8CFF, #A855F7, #2DD4BF, #34D399, #FB923C, #EC4899"
|
|
66
|
-
|
|
67
|
-
backgrounds:
|
|
68
|
-
navy: { type: solid, color: "{palette.navy}" }
|
|
69
|
-
team: { type: gradient, stops: ["#0B1220 0%", "#0B1220 50%", "#05070D 50%", "#05070D 100%"], angle: 90 }
|
|
70
|
-
paper: { type: solid, color: "#EEEFF1" }
|
|
71
|
-
|
|
72
|
-
variants:
|
|
73
|
-
light:
|
|
74
|
-
roles: { background: "#EEEFF1", surface: "#FFFFFF", text: "#0B1220", heading: "#0B1220", muted: "#5A6072" }
|
|
75
|
-
|
|
76
|
-
transitions: { default: fade, duration: 420 }
|
|
77
|
-
|
|
78
|
-
chrome:
|
|
79
|
-
header: { right: "{{date}} | © {{company}}" }
|
|
80
|
-
footer: { left: "{{footer}}", right: "{{pagePadded}} / {{totalPadded}}" }
|
|
81
|
-
logoPos: top-left
|
|
82
|
-
logo: '<svg viewBox="0 0 120 40"><text x="0" y="31" font-family="Open Sans, Inter, sans-serif" font-size="30" font-weight="800" letter-spacing="2" fill="currentColor">VELA</text></svg>'
|
|
83
|
-
|
|
84
|
-
layouts:
|
|
85
|
-
cover:
|
|
86
|
-
background: navy
|
|
87
|
-
chrome: header
|
|
88
|
-
logo: false
|
|
89
|
-
align: start
|
|
90
|
-
areas: [". diagram", "brand diagram", "title diagram", "sub diagram"]
|
|
91
|
-
rows: "1fr auto auto auto"
|
|
92
|
-
cols: "1.1fr 0.9fr"
|
|
93
|
-
gap: "0.3em 3em"
|
|
94
|
-
slots:
|
|
95
|
-
brand: { type: body, style: { align: left } }
|
|
96
|
-
title: { type: title, style: { font: display, size: hero, weight: "800", leading: "0.98", maxw: "7ch" } }
|
|
97
|
-
sub: { type: subtitle, style: { size: "32px", color: white, weight: "400" } }
|
|
98
|
-
diagram: { type: image, style: { valign: center } }
|
|
99
|
-
|
|
100
|
-
statement:
|
|
101
|
-
background: navy
|
|
102
|
-
align: center
|
|
103
|
-
areas: ["title title title", "s1 s2 s3"]
|
|
104
|
-
rows: "auto 1fr"
|
|
105
|
-
cols: "1fr 1fr 1fr"
|
|
106
|
-
gap: "1.4em"
|
|
107
|
-
slots:
|
|
108
|
-
title: { type: title, style: { size: "80px", weight: "800" } }
|
|
109
|
-
s1: { type: body, style: { align: center, valign: center } }
|
|
110
|
-
s2: { type: body, style: { align: center, valign: center } }
|
|
111
|
-
s3: { type: body, style: { align: center, valign: center } }
|
|
112
|
-
|
|
113
|
-
title-content:
|
|
114
|
-
background: navy
|
|
115
|
-
areas: ["title", "body"]
|
|
116
|
-
rows: "auto 1fr"
|
|
117
|
-
slots:
|
|
118
|
-
title: { type: title, style: { size: h1, weight: "800" } }
|
|
119
|
-
body: { type: body }
|
|
120
|
-
|
|
121
|
-
content-aside:
|
|
122
|
-
background: navy
|
|
123
|
-
areas: ["title title", "body aside"]
|
|
124
|
-
rows: "auto 1fr"
|
|
125
|
-
cols: "1.45fr 1fr"
|
|
126
|
-
gap: "3em"
|
|
127
|
-
slots:
|
|
128
|
-
title: { type: title, style: { size: h1, weight: "800" } }
|
|
129
|
-
body: { type: body }
|
|
130
|
-
aside: { type: body, style: { color: muted, size: caption } }
|
|
131
|
-
|
|
132
|
-
two-col:
|
|
133
|
-
background: navy
|
|
134
|
-
areas: ["title title", "left right"]
|
|
135
|
-
rows: "auto 1fr"
|
|
136
|
-
cols: "1fr 1fr"
|
|
137
|
-
gap: "3em"
|
|
138
|
-
slots:
|
|
139
|
-
title: { type: title, style: { size: h1, weight: "800" } }
|
|
140
|
-
left: { type: body }
|
|
141
|
-
right: { type: body }
|
|
142
|
-
|
|
143
|
-
team:
|
|
144
|
-
background: team
|
|
145
|
-
areas:
|
|
146
|
-
- "title title"
|
|
147
|
-
- "lname rname"
|
|
148
|
-
- "lbio rbio"
|
|
149
|
-
- "logos logos"
|
|
150
|
-
rows: "auto 400px 1fr auto"
|
|
151
|
-
cols: "1fr 1fr"
|
|
152
|
-
gap: "0.2em 2.4em"
|
|
153
|
-
slots:
|
|
154
|
-
title: { type: title, style: { size: "54px", weight: "800" } }
|
|
155
|
-
lname: { type: title, style: { size: "72px", weight: "800", leading: "0.95", valign: center } }
|
|
156
|
-
lbio: { type: body, style: { size: "28px", color: muted, valign: top } }
|
|
157
|
-
rname: { type: title, style: { size: "72px", weight: "800", leading: "0.95", valign: center } }
|
|
158
|
-
rbio: { type: body, style: { size: "28px", color: muted, valign: top } }
|
|
159
|
-
logos: { type: body, style: { valign: bottom } }
|
|
160
|
-
|
|
161
|
-
closing:
|
|
162
|
-
chrome: false
|
|
163
|
-
background: paper
|
|
164
|
-
align: center
|
|
165
|
-
areas: ["card"]
|
|
166
|
-
rows: "1fr"
|
|
167
|
-
cols: "1fr"
|
|
168
|
-
slots:
|
|
169
|
-
card: { type: body, style: { box: ink, color: white, align: center, valign: center, justify: center, maxw: "60%" } }
|
|
170
|
-
|
|
171
|
-
section:
|
|
172
|
-
background: navy
|
|
173
|
-
align: center
|
|
174
|
-
areas: ["title"]
|
|
175
|
-
rows: "1fr"
|
|
176
|
-
slots:
|
|
177
|
-
title: { type: title, style: { size: hero, weight: "800", align: center } }
|
|
178
|
-
|
|
179
|
-
media-split:
|
|
180
|
-
background: navy
|
|
181
|
-
areas: ["media copy"]
|
|
182
|
-
rows: "1fr"
|
|
183
|
-
cols: "1.25fr 1fr"
|
|
184
|
-
gap: "3.4em"
|
|
185
|
-
slots:
|
|
186
|
-
media: { type: media }
|
|
187
|
-
copy: { type: body, style: { valign: center } }
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
master: ../themes/aurora.slaide.yaml
|
|
3
|
-
title: slaide — Q3 Roadmap
|
|
4
|
-
author: The slaide team
|
|
5
|
-
~transition: slide-left
|
|
6
|
-
---
|
|
7
|
-
layout: cover
|
|
8
|
-
transition: fade
|
|
9
|
-
---
|
|
10
|
-
:: title ::
|
|
11
|
-
slaide
|
|
12
|
-
|
|
13
|
-
:: subtitle ::
|
|
14
|
-
slides that AI can actually write — and humans love to watch
|
|
15
|
-
|
|
16
|
-
??? Open warm. The whole pitch: plain text in, beautiful deck out.
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
layout: title-content
|
|
20
|
-
---
|
|
21
|
-
## Why a new language
|
|
22
|
-
|
|
23
|
-
- PowerPoint's `.pptx` is a zip of namespaced XML — **bulky and overloaded** >>>
|
|
24
|
-
- Markdown is what language models write most reliably >>>
|
|
25
|
-
- A forgiving parser means **no broken decks** >>>
|
|
26
|
-
- One small header defines the entire visual system >>>
|
|
27
|
-
|
|
28
|
-
??? Land the contrast: OOXML vs. a single readable file.
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
layout: two-cols
|
|
32
|
-
---
|
|
33
|
-
:: title ::
|
|
34
|
-
## Input vs. output
|
|
35
|
-
|
|
36
|
-
:: left ::
|
|
37
|
-
**You write this**
|
|
38
|
-
|
|
39
|
-
```
|
|
40
|
-
---
|
|
41
|
-
layout: image-right
|
|
42
|
-
---
|
|
43
|
-
## The pipeline
|
|
44
|
-
1. Parse
|
|
45
|
-
2. Compile
|
|
46
|
-
3. Render
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
:: right ::
|
|
50
|
-
**Your audience sees**
|
|
51
|
-
|
|
52
|
-
> A typographic, animated, full-bleed presentation — on the web or as a crisp PDF.
|
|
53
|
-
|
|
54
|
-
---
|
|
55
|
-
layout: image-right
|
|
56
|
-
morph: hero
|
|
57
|
-
---
|
|
58
|
-
:: title ::
|
|
59
|
-
## The pipeline
|
|
60
|
-
|
|
61
|
-
:: body ::
|
|
62
|
-
1. **Parse** the deck + master >>>
|
|
63
|
-
2. **Compile** to a portable IR >>>
|
|
64
|
-
3. **Validate** against the schema >>>
|
|
65
|
-
4. **Render** to web or PDF >>>
|
|
66
|
-
|
|
67
|
-
:: image ::
|
|
68
|
-
{#hero}
|
|
69
|
-
|
|
70
|
-
---
|
|
71
|
-
layout: image-left
|
|
72
|
-
transition: morph
|
|
73
|
-
---
|
|
74
|
-
:: title ::
|
|
75
|
-
## One IR, many renderers
|
|
76
|
-
|
|
77
|
-
:: image ::
|
|
78
|
-
{#hero}
|
|
79
|
-
|
|
80
|
-
:: body ::
|
|
81
|
-
The compiled **deck.ir.json** is the durable asset.
|
|
82
|
-
|
|
83
|
-
Web and PDF are just *consumers* of it — so they can never drift apart.
|
|
84
|
-
|
|
85
|
-
---
|
|
86
|
-
layout: quote
|
|
87
|
-
variant: light
|
|
88
|
-
transition: zoom
|
|
89
|
-
---
|
|
90
|
-
:: quote ::
|
|
91
|
-
> "The best format is the one your tools can write flawlessly **and** your audience never thinks about."
|
|
92
|
-
|
|
93
|
-
---
|
|
94
|
-
layout: section
|
|
95
|
-
transition: zoom
|
|
96
|
-
---
|
|
97
|
-
:: title ::
|
|
98
|
-
Let's build.
|