A playbook of what a sales tool would say to you, one card at a time, written as if the tool already existed. Each card names one action and its reason on the front, shows its thinking on the back, and ends with a button. Nothing here is connected to anything; it is a design fiction to argue with.
Behind the cards is library/: the facts the tool would reason from, as markdown, from the
channels you connect at the bottom to the cards at the top.
Double-click playbook/index.html. No server, no install. Works offline: the fonts are bundled,
and Macs and iPhones use their own SF Pro. The Library tab walks the same material from the
bottom up, and any entry can be downloaded as the markdown it came from.
Send the playbook/ folder. Everything it needs is inside it. If the repository's GitHub Pages
is switched on, the same folder is published there on every push to main.
The library is the source of truth. The playbook is generated from it.
- Edit the markdown in
library/. - Run
node build.js. No packages to install; it is plain Node. - It validates every id and writes nothing if one does not resolve, naming the file and the id that broke.
It regenerates playbook/index.html, playbook/cards/*.html and playbook/assets/data.js.
Do not hand-edit those: the next build overwrites them. ask.html and deck.html are
hand-written and are left alone.
- To add a card: copy
library/templates/card.mdintolibrary/cards/, fill it in, give it anorder, and build. The tile on the home and the previous/next links wire themselves. - The world the cards share (goal, cast, councils, documents, today's date) is data, in
library/world/. Add a person there before a card names them. - The card model, the phone and the design decisions are in
playbook/world.md. - The look follows Apple's Human Interface Guidelines.
playbook/assets/style.cssis the playbook's own layer; the twoios-*.cssfiles beside it are Apple's measured values and component recipes, copied in and not edited.
Two rungs are deliberately empty rather than guessed at:
library/counts/— the arithmetic floor. Every entry holds its id and which signals reference it, and saysdefined: false. Nothing has been written about what any of them actually counts.- Each card's
signal:— markedprovisional. It was read off the card, not decided.
Both are named in the interface rather than hidden, which is the same rule the tool itself follows: a gap is a fact, so say it.
_archive/ holds what did not come forward: the blueprint viewer app, the hackathon deck and the
scenario docs. It is kept for inspiration; the library is the source of truth.