Write a puzzle
Fill this in, check it, then download the file and drop it into the puzzles folder.
The puzzle
Title
One line that makes them open it
The question, asked before anything is shown
What it all means, after the watch
The guess
Option 1
What it says
Option 2
What it says
Option 3
What it says
The reveal
How to say it out loud
Milestone 1
What it has passed
The animation
Unit name
Where the numbers come from
Source 1
What it says
13 thing(s) to fix
- my-puzzle: title needs non-empty en and bg text
- my-puzzle: hook needs non-empty en and bg text
- my-puzzle: ask needs non-empty en and bg text
- my-puzzle: closing needs non-empty en and bg text
- my-puzzle: sources[0].claim needs non-empty en and bg text
- my-puzzle: sources[0].title is required
- my-puzzle: sources[0].publisher is required
- my-puzzle: predict.choices[0].label needs non-empty en and bg text
- my-puzzle: predict.choices[1].label needs non-empty en and bg text
- my-puzzle: predict.choices[2].label needs non-empty en and bg text
- my-puzzle: stage.unit needs non-empty en and bg text
- my-puzzle: reveal.valueText needs non-empty en and bg text
- my-puzzle: reveal.beats[0].label needs non-empty en and bg text
Save it as src/content/puzzles/my-puzzle.json and it appears by itself.
Show the file
{
"id": "my-puzzle",
"title": {
"en": "",
"bg": ""
},
"hook": {
"en": "",
"bg": ""
},
"ask": {
"en": "",
"bg": ""
},
"closing": {
"en": "",
"bg": ""
},
"predict": {
"kind": "choices",
"choices": [
{
"label": {
"en": "",
"bg": ""
},
"value": 1
},
{
"label": {
"en": "",
"bg": ""
},
"value": 2
},
{
"label": {
"en": "",
"bg": ""
},
"value": 3
}
],
"correct": 1
},
"reveal": {
"value": "1024",
"valueText": {
"en": "",
"bg": ""
},
"beats": [
{
"at": 10,
"label": {
"en": "",
"bg": ""
}
}
]
},
"stage": {
"engine": "stack",
"start": "1",
"ratio": 2,
"steps": 10,
"unit": {
"en": "",
"bg": ""
},
"quantity": "count",
"scaleHints": []
},
"sources": [
{
"key": "source-1",
"claim": {
"en": "",
"bg": ""
},
"title": "",
"publisher": "",
"url": "https://",
"retrieved": "2026-10-31"
}
]
}