@aivorynet/slaide 1.0.1 → 1.0.3

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,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` (omit bundled `aurora`).
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
- ![Routing diagram](assets/diagram.svg)
24
-
25
- ---
26
- layout: team
27
- chrome: header
28
- ---
29
- :: title ::
30
- [Hi!]{.teal} We are
31
-
32
- :: lname ::
33
- ![Alex Rivera](assets/avatar-a.svg){.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
- ![Sam Chen](assets/avatar-b.svg){.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** &nbsp;&nbsp; ![Acme](assets/clients/acme.svg){.logo height=30px} &nbsp; ![Globex](assets/clients/globex.svg){.logo height=30px} &nbsp; ![Hooli](assets/clients/hooli.svg){.logo height=30px} &nbsp; ![Initech](assets/clients/initech.svg){.logo height=30px} &nbsp; ![Umbra](assets/clients/umbra.svg){.logo height=30px} &nbsp; ![Vandel](assets/clients/vandel.svg){.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
- ![Rows of servers in a data center](assets/datacenter.jpg)
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
- ![Pipeline diagram](./assets/pipeline.svg){#hero}
69
-
70
- ---
71
- layout: image-left
72
- transition: morph
73
- ---
74
- :: title ::
75
- ## One IR, many renderers
76
-
77
- :: image ::
78
- ![Pipeline diagram](./assets/pipeline.svg){#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.