How it works
A slide that knows what it is
Most tools treat a slide as a canvas: a rectangle you drop boxes onto, wherever they look right. Deckyard treats it as a record with a type. It sounds like a technical detail. It is the reason everything else on this site is possible.
- 34
- slide types, each with its own fields
- 1
- published schema, generated from the code
- 0
- colours or fonts stored in your content
Where a deck actually starts
Nobody starts a presentation in a presentation tool. They start with a report somebody else wrote, a spreadsheet holding the real numbers, a note on a phone from a conversation last Tuesday, and a folder of photos nobody has named properly.
That is the raw material, and it has three awkward properties: it is scattered across four places, it is in four different formats, and the interesting parts are buried inside sentences. Every deck begins with somebody quietly doing the work of getting it out.
1What you start with
Q3 Operational Review - Sunnyside Lemonade Stand
1. Background. The Stand was constituted by resolution of the household in 2021. In 2022 it entered its first strategic partnership, with the adjacent bake sale. Operations were suspended for reasons of weather throughout 2024. Trading resumed under revised governance in 2025.
2. Performance. In the period under review the Stand dispensed 412 cups, an increase of 18 per cent on the comparable quarter.
| 1 | Month | Cups |
|---|---|---|
| 2 | June | 96 |
| 3 | July | 141 |
| 4 | August | 175 |
for the annual review, do not forget
mrs albers from no. 14 said on saturday it is on balance, quite good lemonade
nice line?? put it on a slide
Pick a slide type below and the source it draws on comes forward. Different material, different slide, same pile.
Somebody has to turn that into slides
Traditionally that somebody is you, at eleven at night, copying figures out of a spreadsheet and into text boxes. The figures now live in two places, and one of them started going out of date the moment you pasted it.
The alternative is not "let a robot do it". It is that the slide has a declared shape, so whatever fills it - you, a script, an agent - is checked against that shape first.
2Turning it into structure
This is the step everyone skips over. It can happen three ways, and the point is not which one you pick: it is that all three end up with a slide that is stored as data, and all three are checked against the same slide type.
Pick a type
- Title
- Timeline
- Chart
- Quote
- Image
Fill in the moment
- date 2025
- title Trading resumed
- text Under revised governance.
+ add moment
And this is the slide
Stored as
{ "date": "2025", "title": "Trading resumed" } You can type that moment straight onto the slide or into the fields, whichever you prefer. The difference with a drawing tool is not where you type: it is what is kept. A drawing tool keeps a text box that happens to read 2025. This keeps a moment that has a date. And because the type knows how a timeline should look, it is laid out for you.
The automation somebody built
- Trigger Every first Monday, 06:00 "firedAt": "2025-09-01T06:00"
- Tool call Figures register · get last month { "month": "September", "cups": 188 }
- Only if That month is not on the slide yet otherwise · stop, nothing to update
- Action Deckyard · update the slide in the team library The request it sends is on the right.
What it sent last time
PUT /api/v1/presentations/{id}/slides/{slideId} { "type": "chart-slide", "content": { "chartType": "bar", "data": "month,cups\n…\nAugust,175\nSeptember,188" } }
200 OK · slide updated, four months on the chart
And this is the slide
Stored as
"data": "… August,175\nSeptember,188"
The figures are a column in the record, so an automation can append a month to them. The slide sits in the team library, which means the next deck that pulls it in already has last month in it. And the write goes through the same validation a person does: a chart the editor would refuse, the API refuses too.
What the person asks
Put this on a slide: 2021 constituted, 2022 partnership with the bake sale, 2024 suspended, 2025 resumed.
Added a timeline slide with those four moments, in that order.
What the agent has to ask first
- get_slide_types()
- timeline-slide - for a sequence of moments. items[] of (date, title, text), 2 to 10, order carries meaning.
- add_slide({ type: "timeline-slide", … })
And this is the slide
Stored as
{ "date": "2025", "title": "Trading resumed" } The agent cannot invent a layout, because there is no layout to invent. It asks what exists, gets told what a timeline needs, and fills that in. The result is on style before anyone has looked at it.
All three arrive at the same gate: the record is checked against its slide type. What a person may not save, an integration may not save either, and the other way round. That is where the control lives - not in doing it by hand.
Control does not come from doing it by hand. It comes from the type.
What a slide type actually is
A slide type is a small, opinionated contract. A timeline declares that it holds a sequence of moments, each with a date and a title, at least two and at most ten, and that the order carries meaning. A quote declares that it needs somebody to attribute it to, and refuses to be saved without one.
None of those declarations mention a colour, a font or a position. That is the second half of the idea: the content carries the meaning, the theme carries the appearance, and the two never touch. Which is why the same slide can be correct for a city council and for a design studio without a single word changing.
3The slide itself
What it means
How it looks
The slide as data timeline-slide
- title string max 120
- items items required ordered min 2 max 10 date · title · text
ordered: true - the sequence is the meaning here, not a layout choice. So it projects to a numbered list for screen readers, and nothing downstream is allowed to reshuffle it.
The slide as data chart-slide
- title string required max 120
- chartType enum required bar · line · pie
- data csv required
data: csv (required) - the figures live in the record as data, not as a picture of a chart. That is why this field can stay wired to the spreadsheet instead of being copied out of it.
The slide as data quote-slide
- quote string required max 400
- authorName string required max 80
- authorTitle string required max 120
authorName is required - an unattributed quote is not a valid slide in this format. The type holds a journalistic norm that otherwise depends on whoever happened to be in a hurry.
The slide as data image-slide
- image image
- alt string max 180
- imageRole enum content · decorative
- caption string max 160
imageRole: content | decorative - the format asks what the image is for. Call it decorative and screen readers skip it; call it meaningful and it wants alt text. A canvas cannot ask that question, because there an image is only pixels at coordinates.
Hover a field to light up the material it came from.
What follows from it
The useful thing about this decision is not that it is elegant. It is that four separate promises turn out to be the same promise, stated four times.
-
Because the fields have a type
a slide can be read out loud properly.
A timeline projects to a numbered list, a table keeps its header row, an image says whether it is decorative or meaningful. Accessibility stops being a checklist somebody runs at the end and becomes a property of the format.
-
Because the fields have a type
anything can fill them.
A field with a declared shape is a socket. Your data warehouse, your image library, a script or an agent can all fill it, and all of them are checked the same way. Nobody retypes a table, and the figure on the slide matches the figure at the source.
-
Because the styling lives elsewhere
the organisation owns the look.
Brand lives in theme tokens, not in the deck. A deck cannot drift off-brand, because it is not carrying any brand with it. Lock the background and the logo and even an old deck renders inside the current house style.
-
Because all of it is one schema
the format outlives the application.
The JSON Schema is generated from the same field definitions the editor and the validator read, so it cannot drift from the implementation. Somebody else can write a reader, a converter or a renderer without asking us. That is what open actually means here.
For plenty of the organisations reading this, the first of those four is not a nice-to-have but something they have to account for. So it has a page of its own: what the projection actually produces, field type by field type, and what it does not fix.
What the structure does for accessibilityThe same deck, two ways of storing it
None of this is an argument that canvases are badly made. It is that a drawing cannot answer questions about itself, and a record can.
| Slide as a canvas | Slide as a record | |
|---|---|---|
| What a slide is | Shapes at coordinates | Named fields with a type |
| Read aloud by a screen reader | Guesswork, in drawing order | Real headings, lists and tables |
| Opened on a phone | Shrinks until it is unreadable | Reflows as a document |
| Filled from another system | Place a text box and hope | Fill the fields, get validated |
| Changing the house style | Restyle every slide by hand | Swap the theme, content untouched |
| Ten years from now | Hope the application still opens it | Documented JSON against a public schema |
Easier to see than to read about
The sandbox is the Deckyard editor in your browser, with no install and no account. Make a timeline, switch the theme, look at what you built. AI, uploads and publishing are off there, because it is public and anonymous.