From 3819694bbff1abadce322233e82bcbb1875d8610 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Sat, 23 Nov 2024 17:55:35 -0500 Subject: [PATCH 1/9] Build your own posts. --- 63.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 63.md diff --git a/63.md b/63.md new file mode 100644 index 000000000..aae04e52d --- /dev/null +++ b/63.md @@ -0,0 +1,35 @@ +NIP-64 +====== + +Build Your Own Story +-------------------- + +`draft` `optional` + +This NIP defines `kind:296` as a text note with options to navigate to the next text notes and continue reading. + +The idea is to replicate the dynamism of build your own adventure books, where each reader makes their own version of the story. + +## Story Section Events + +Story Section events contain a `title` tag and `option` tags for the next sections. + +Clients SHOULD render options in a way that users can select and move to that post. + +The story ends when there are no `option`s available. + +```jsonc +{ + "kind": 296, + "content": "", + "tags": [ + ["title", ""], + + ["option", "", "", ""], + ["option", "", "", ""], + // ... + ] +} +``` + +`.content` SHOULD use the same formatting rules as `kind:1` \ No newline at end of file From 4a020dc25aa40247a4cd00e13c00b11d6088d7dc Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Sat, 23 Nov 2024 19:25:36 -0500 Subject: [PATCH 2/9] separating root from other nodes. --- 63.md | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/63.md b/63.md index aae04e52d..6f61d65d7 100644 --- a/63.md +++ b/63.md @@ -6,22 +6,18 @@ Build Your Own Story `draft` `optional` -This NIP defines `kind:296` as a text note with options to navigate to the next text notes and continue reading. +This NIP defines `kind:296` and `kind:297` as text notes with options to navigate to the next text notes and continue reading. Kind `296` serves as the root story and `297` for the sections of that story. -The idea is to replicate the dynamism of build your own adventure books, where each reader makes their own version of the story. +The idea is to replicate the dynamism of build your own adventure books, where each reader takes their own journey in the story. -## Story Section Events - -Story Section events contain a `title` tag and `option` tags for the next sections. +Story Section events contain an optional `title` tag and `option` tags for the next sections. Clients SHOULD render options in a way that users can select and move to that post. -The story ends when there are no `option`s available. - ```jsonc { "kind": 296, - "content": "", + "content": "", "tags": [ ["title", ""], @@ -32,4 +28,21 @@ The story ends when there are no `option`s available. } ``` +```jsonc +{ + "kind": 297, + "content": "", + "tags": [ + ["title", ""], + + ["e", "", "" ] // root event. + ["option", "", "", ""], + ["option", "", "", ""], + // ... + ] +} +``` + +The story ends when there are no `option`s available. + `.content` SHOULD use the same formatting rules as `kind:1` \ No newline at end of file From 83df1e6b405ba06e5deaf9d97de4ecaf6da31b00 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Sat, 23 Nov 2024 19:28:52 -0500 Subject: [PATCH 3/9] Fixes nip number --- 63.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/63.md b/63.md index 6f61d65d7..62047b759 100644 --- a/63.md +++ b/63.md @@ -1,4 +1,4 @@ -NIP-64 +NIP-63 ====== Build Your Own Story From d7be8afa2483704aff1f5c0116be958c32153139 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Mon, 25 Nov 2024 15:57:56 -0500 Subject: [PATCH 4/9] Improves text, removes reference loop --- 63.md | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/63.md b/63.md index 62047b759..8d145c0c0 100644 --- a/63.md +++ b/63.md @@ -1,18 +1,20 @@ NIP-63 ====== -Build Your Own Story --------------------- +Build Your Own Adventure +------------------------ `draft` `optional` -This NIP defines `kind:296` and `kind:297` as text notes with options to navigate to the next text notes and continue reading. Kind `296` serves as the root story and `297` for the sections of that story. +This NIP introduces `kind:296` and `kind:297` as text-based notes designed to create interactive stories. These notes include options for navigating to subsequent notes, allowing readers to continue exploring the story. `Kind:296` serves as the root event for the story, while `kind:297` represents individual scenes within the narrative. -The idea is to replicate the dynamism of build your own adventure books, where each reader takes their own journey in the story. +The idea is to emulate "choose your own adventure" books, where each reader's journey through the story is unique. -Story Section events contain an optional `title` tag and `option` tags for the next sections. +Story events can include an optional `title` tag and multiple `option` tags that point to the next possible scenes. -Clients SHOULD render options in a way that users can select and move to that post. +Clients SHOULD render the options in a way that allows users to select and seamlessly navigate to the corresponding posts. + +### Example for kind:296 (Root Scene) ```jsonc { @@ -28,6 +30,8 @@ Clients SHOULD render options in a way that users can select and move to that po } ``` +### Example for kind:297 (Scene) + ```jsonc { "kind": 297, @@ -35,7 +39,6 @@ Clients SHOULD render options in a way that users can select and move to that po "tags": [ ["title", ""], - ["e", "", "" ] // root event. ["option", "", "", ""], ["option", "", "", ""], // ... @@ -43,6 +46,6 @@ Clients SHOULD render options in a way that users can select and move to that po } ``` -The story ends when there are no `option`s available. +The story concludes when no `option` tags are present. -`.content` SHOULD use the same formatting rules as `kind:1` \ No newline at end of file +The `.content` field SHOULD follow the same formatting rules as `kind:1`. \ No newline at end of file From e87baf2651a3330b152999383a484702db9c85e2 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Mon, 25 Nov 2024 16:34:15 -0500 Subject: [PATCH 5/9] Adds reading state --- 63.md | 53 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 46 insertions(+), 7 deletions(-) diff --git a/63.md b/63.md index 8d145c0c0..c6e192b0f 100644 --- a/63.md +++ b/63.md @@ -6,22 +6,28 @@ Build Your Own Adventure `draft` `optional` -This NIP introduces `kind:296` and `kind:297` as text-based notes designed to create interactive stories. These notes include options for navigating to subsequent notes, allowing readers to continue exploring the story. `Kind:296` serves as the root event for the story, while `kind:297` represents individual scenes within the narrative. +This NIP introduces `kind:296` and `kind:297` as text-based notes designed to create interactive stories. These notes include options for navigating to subsequent notes, allowing readers to continue exploring the story. `Kind:296` serves as starting events for the reader, while `kind:297` represents individual scenes within the narrative. The idea is to emulate "choose your own adventure" books, where each reader's journey through the story is unique. -Story events can include an optional `title` tag and multiple `option` tags that point to the next possible scenes. +Scene events MAY include an optional `title` tag and multiple `option` tags that point to the next possible scenes. Clients SHOULD render the options in a way that allows users to select and seamlessly navigate to the corresponding posts. -### Example for kind:296 (Root Scene) +### Example for kind:296 (Prologue) + +Prologue events are entry points in the story. + +They SHOULD contain `title`, `summary` and `image` to help clients render a preview of the story. ```jsonc { "kind": 296, "content": "", "tags": [ - ["title", ""], + ["title", ""], + ["summary", ""], + ["image", ""], ["option", "", "", ""], ["option", "", "", ""], @@ -32,12 +38,14 @@ Clients SHOULD render the options in a way that allows users to select and seaml ### Example for kind:297 (Scene) +Scenes describe a given point in a story with potential options. + ```jsonc { "kind": 297, - "content": "", + "content": "", "tags": [ - ["title", ""], + ["title", ""], ["option", "", "", ""], ["option", "", "", ""], @@ -48,4 +56,35 @@ Clients SHOULD render the options in a way that allows users to select and seaml The story concludes when no `option` tags are present. -The `.content` field SHOULD follow the same formatting rules as `kind:1`. \ No newline at end of file +The `.content` field SHOULD follow the same formatting rules as `kind:1`. + +## Reading State + +Kind `30296` 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": 30296, + "tags": [ + ["d", ""], + + // cached to simplify preview purposes + ["title", ""], + ["summary", ""], + ["image", ""], + + // root with relay hint + ["E", "", ""], + + // current scene with relay hint + ["e", "", ""], + + // reading status + ["status", ""] + ] +} +``` \ No newline at end of file From eea63b11c10d290971bc4eef2aa24b191519726d Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Mon, 25 Nov 2024 17:37:33 -0500 Subject: [PATCH 6/9] Removes trademark issues and makes all content modifiable to make it easier to integrate multiple worlds --- 63.md | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/63.md b/63.md index c6e192b0f..0e82e2282 100644 --- a/63.md +++ b/63.md @@ -1,54 +1,54 @@ NIP-63 ====== -Build Your Own Adventure ------------------------- +Interactive Stories +------------------- `draft` `optional` -This NIP introduces `kind:296` and `kind:297` as text-based notes designed to create interactive stories. These notes include options for navigating to subsequent notes, allowing readers to continue exploring the story. `Kind:296` serves as starting events for the reader, while `kind:297` represents individual scenes within the narrative. +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 idea is to emulate "choose your own adventure" books, where each reader's journey through the story is unique. +The modularity of this approach allows Scenes from multiple authors to be combined into bigger stories. -Scene events MAY include an optional `title` tag and multiple `option` tags that point to the next possible scenes. - -Clients SHOULD render the options in a way that allows users to select and seamlessly navigate to the corresponding posts. - -### Example for kind:296 (Prologue) +### 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": 296, + "kind": 30296, "content": "", "tags": [ + ["d", ""], ["title", ""], ["summary", ""], ["image", ""], - ["option", "", "", ""], - ["option", "", "", ""], + ["option", "", "", ""], + ["option", "", "", ""], // ... ] } ``` -### Example for kind:297 (Scene) +### Scene (kind:30297) -Scenes describe a given point in a story with potential options. +Scenes describe a given point in a story with potential options and SHOULD include an optional `title` tag. ```jsonc { - "kind": 297, + "kind": 30297, "content": "", "tags": [ + ["d", ""], ["title", ""], - ["option", "", "", ""], - ["option", "", "", ""], + ["option", "", "", ""], + ["option", "", "", ""], // ... ] } @@ -56,11 +56,11 @@ Scenes describe a given point in a story with potential options. The story concludes when no `option` tags are present. -The `.content` field SHOULD follow the same formatting rules as `kind:1`. +The `.content` field does not accept markdown. ## Reading State -Kind `30296` stores the latest state of the story. +Kind `30298` stores the latest state of the story. The `d` tag of the replaceable event MUST match the root event's id. @@ -68,7 +68,7 @@ The `e` tag points to the latest scene the user has read. ```jsonc { - "kind": 30296, + "kind": 30298, "tags": [ ["d", ""], From 7c6aff49f4ab706e34d17a70d5bacfee6ba878fa Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Tue, 26 Nov 2024 18:51:30 -0500 Subject: [PATCH 7/9] Fixing missing migration from e to a tags on the reading state. --- 63.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/63.md b/63.md index 0e82e2282..2832fc787 100644 --- a/63.md +++ b/63.md @@ -70,7 +70,8 @@ The `e` tag points to the latest scene the user has read. { "kind": 30298, "tags": [ - ["d", ""], + // 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", ""], @@ -78,10 +79,10 @@ The `e` tag points to the latest scene the user has read. ["image", ""], // root with relay hint - ["E", "", ""], + ["A", "", ""], // current scene with relay hint - ["e", "", ""], + ["a", "", ""], // reading status ["status", ""] From 04fec8c96d56911fe1840153a97dbf8fe958f3cc Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Tue, 26 Nov 2024 23:23:30 -0500 Subject: [PATCH 8/9] Update 63.md Co-authored-by: Asai Toshiya --- 63.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/63.md b/63.md index 2832fc787..c9cc731bc 100644 --- a/63.md +++ b/63.md @@ -64,7 +64,7 @@ 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. +The `a` tag points to the latest scene the user has read. ```jsonc { From 773984d7a837b03d800f83169645f3558a37787e Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Wed, 27 Nov 2024 11:44:26 -0500 Subject: [PATCH 9/9] Clarifies that replies should use NIP-22 --- 63.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/63.md b/63.md index c9cc731bc..8912f7147 100644 --- a/63.md +++ b/63.md @@ -88,4 +88,8 @@ The `a` tag points to the latest scene the user has read. ["status", ""] ] } -``` \ No newline at end of file +``` + +## Replies + +Replies to all kinds here should use [NIP-22](22.md).