diff --git a/aggregates.yaml b/aggregates.yaml index dd3be86..6616a92 100644 --- a/aggregates.yaml +++ b/aggregates.yaml @@ -14,3 +14,10 @@ aggregates: unsubscribed: { event: unsubscribed } transitions: open: [unsubscribed] + - bucket: redoal_watchers + initial: open + states: + open: { event: subscribed } + unsubscribed: { event: unsubscribed } + transitions: + open: [unsubscribed] diff --git a/questions/index.yaml b/questions/index.yaml index ad5dffa..7bdea20 100644 --- a/questions/index.yaml +++ b/questions/index.yaml @@ -13,12 +13,10 @@ alternatives: description: > By associating similar movements while facilitating discourse we discover signal within chaos. Draw a path — the network answers - with the shapes it heard nearby. - action: /shape - # Announced, not yet open: the network answers with echoes today, - # what follows a shape is still being built. - disabled: true - consequence: [Find what follows] + with the shape it heard, and with the places kept nearby. Pick + one of those and it becomes your address. + action: /shape/{curve.key} + consequence: [Go to the place] record_as: redoal_gestures encouragements: - What you don't know — your collaborators will. @@ -36,10 +34,6 @@ alternatives: type: gesture relay: wss://relay.redoal.com optional: true - - name: email - label: Email, if the echoes should reach you later - type: email - optional: true - name: Meet a network you carry in your hand description: > @@ -83,6 +77,15 @@ alternatives: script arrives on the same terms as everyone else — that is the whole entry requirement. icon: lucide:hand + - name: Carried by iroh, through varde + description: > + What is left at a place is kept and mirrored by + [varde](https://prosjekt.klingenbergbygg.no/bl/varde), a small + daemon that moves bytes between consenting machines over + [iroh](https://iroh.computer) — verified, rate-limited, and + legible to the network it runs on. Recordings travel that way, + with no company carrying them. + icon: lucide:waypoints - name: Young, and honest about it description: > A prototype and an artwork before it is a product. The diff --git a/questions/review/index.yaml b/questions/review/index.yaml index be646ae..096be87 100644 --- a/questions/review/index.yaml +++ b/questions/review/index.yaml @@ -38,6 +38,39 @@ alternatives: - to: unsubscribed label: Unsubscribe + - name: Voices + description: > + Recordings left through the web, one answer per upload: the + address, the digest, the length. The audio itself lives in the + relay's node and in varde. + features: + - name: "" + description: "" + resource: + source: + kind: kv + bucket: redoal_voices + requires_group: owners + + - name: Watchers + description: > + Who asked to hear from one exact address. Unsubscribing is + theirs (the link in their receipt); the desk can retire an + address that bounces. + action: /review + consequence: [Confirm] + features: + - name: "" + description: "" + resource: + source: + kind: kv + bucket: redoal_watchers + requires_group: owners + transitions: + - to: unsubscribed + label: Unsubscribe + - name: Announced pages description: > Pages with an `event:` window, kept here by portal itself. When a diff --git a/questions/shape.yaml b/questions/shape.yaml deleted file mode 100644 index 7107b17..0000000 --- a/questions/shape.yaml +++ /dev/null @@ -1,32 +0,0 @@ -id: /shape -route: ^/shape -followup: true -name: Where does the path lead? -description: > - Your shape is in the room now. Echoes of it reach whoever draws - nearby — and theirs reach you, whenever you come back to draw again. -alternatives: - - name: What just happened - description: "" - features: - - name: An address, not an upload - description: > - The stroke became a 20-byte gesture key — a compressed - encoding of its shape. Similar shapes land on nearby keys; - that proximity is the whole network. - - name: Nothing to undo - description: > - A drawn path is a fact, not an account. There is no profile - behind it unless you left an email. - - name: What arrives here next - description: > - In the full network a drawing is a place that holds voices — - recordings left by whoever came before, and live talk with - whoever is standing here now. On this site it holds echoes - today; the voices follow. - - - name: Draw another - description: > - The network gets more interesting with every shape it hears. - action: / - consequence: [Back to the canvas] diff --git a/questions/shape/[key].yaml b/questions/shape/[key].yaml new file mode 100644 index 0000000..4d36942 --- /dev/null +++ b/questions/shape/[key].yaml @@ -0,0 +1,94 @@ +# The place a drawn (or picked) path leads to: /shape/. +# Reached through the landing alternative's templated action +# (/shape/{curve.key}); the key is the URL. What is kept here comes +# from the relay - the first redoal node - over its /place endpoint, +# and a voice left here goes back the same way (ADR-0015 in redoal). +name: Where does the path lead? +description: > + This is a place: the 20-byte address your path became — or the one + you picked from what the network keeps nearby. Voices left here play + here, for whoever draws their way to this shape. +alternatives: + - name: Listen to what was left here + description: "" + features: + - name: "" + description: "" + icon: lucide:ear + resource: + source: + kind: url + url: "https://relay.redoal.com/place/{key}" + public: true + empty: Nothing has been left at this address yet — yours could be the first voice here. + jq: > + .recordings[] | {name: ((.duration_ms / 1000 | round | tostring) + " seconds of voice"), + description: ("sealed by " + .author[0:8] + "…"), + audio: ("https://relay.redoal.com" + .audio)} + + - name: Leave your voice here + description: > + Recorded in your browser, kept at exactly this address by the + relay — the first node of the network — and mirrored on from + there. The relay seals it with its own key on your behalf; a key + of your own comes with the app. + action: /shape/{voice.key} + consequence: [Keep it here] + record_as: redoal_voices + encouragements: + - It stays where you left it. + features: + - name: "" + description: Up to a minute. Say it once; it is sealed as it is. + icon: lucide:mic + requirements: + - name: voice + label: Voice + type: voice + relay: wss://relay.redoal.com + value: "{key}" + optional: true + + - name: Hear from this address + description: > + The fallback for a phone without the app: one note when + something is left at exactly this shape — and nothing about + anywhere else. + action: /subscribed + consequence: [Watch this address] + record_as: redoal_watchers + encouragements: + - Your shape now has a listener. + features: + - name: Where the note goes + description: > + The note is about one exact address, so it needs one exact + place to land. + icon: lucide:mail + requirements: + - name: email + label: Email + type: email + - name: key + label: Address + type: hidden + value: "{key}" + + - name: What just happened + description: "" + features: + - name: An address, not an upload + description: > + The stroke became a 20-byte gesture key — an ordered chain of + headings, drawn back for you under the stroke. Similar shapes + land on nearby keys; picking a kept place makes its key yours. + - name: Nothing to undo + description: > + A drawn path is a fact, not an account. There is no profile + behind it unless you asked to hear from an address. + + - name: Draw another + description: > + The network gets more interesting with every shape it hears. + action: / + consequence: [Back to the canvas] diff --git a/questions/subscribed.yaml b/questions/subscribed.yaml index 7fccb3e..fc80cc1 100644 --- a/questions/subscribed.yaml +++ b/questions/subscribed.yaml @@ -21,3 +21,12 @@ alternatives: bucket: redoal_subscribers to: unsubscribed label: Unsubscribe me + + - name: Stop watching an address + description: > + Using the link from a note about a shape? Confirm below and that + address goes quiet for you. + self_transition: + bucket: redoal_watchers + to: unsubscribed + label: Stop watching