NIP-63 ====== Interactive Stories ------------------- `draft` `optional` This NIP introduces `kind:30296` and `kind:30297` as living notes designed to create interactive stories. These notes include `option` tags for navigating to subsequent notes, allowing readers to continue exploring the story. `Kind:30296` serves as starting events for the reader, while `kind:30297` represents individual scenes within the narrative. The modularity of this approach allows Scenes from multiple authors to be combined into bigger stories. ### Prologue (kind:30296) Prologue events are entry points in the story. They SHOULD contain `title`, `summary` and `image` to help clients render a preview of the story. `option` tags include a description for the action button, an address and the relay to find the next scene. ```jsonc { "kind": 30296, "content": "", "tags": [ ["d", ""], ["title", ""], ["summary", ""], ["image", ""], ["option", "", "", ""], ["option", "", "", ""], // ... ] } ``` ### Scene (kind:30297) Scenes describe a given point in a story with potential options and SHOULD include an optional `title` tag. ```jsonc { "kind": 30297, "content": "", "tags": [ ["d", ""], ["title", ""], ["option", "", "", ""], ["option", "", "", ""], // ... ] } ``` The story concludes when no `option` tags are present. The `.content` field does not accept markdown. ## Reading State Kind `30298` stores the latest state of the story. The `d` tag of the replaceable event MUST match the root event's id. The `e` tag points to the latest scene the user has read. ```jsonc { "kind": 30298, "tags": [ // d-tag defines the starting point so that if the user sees an interative post again, the client can find it. ["d", ""], // cached to simplify preview purposes ["title", ""], ["summary", ""], ["image", ""], // root with relay hint ["A", "", ""], // current scene with relay hint ["a", "", ""], // reading status ["status", ""] ] } ```