people, this is a no-javascript client (+ hypermedia server).
nostr:nevent1qvzqqqqqqypzpk4yr0kmdpv3xcalgsrldp7tj7yuc4p76qjtka7z95kgfky02s2nqy88wumn8ghj7mn0wvhxcmmv9uq32amnwvaz7tmjv4kxz7fwv3sk6atn9e5k7tcqyqpt5egpfxluh8my8v3a2lpkgm3weqhac77a9ck200jeavzqsmamvzf5gkr
vinney...axkl
vcavallo@vinneycavallo.com
npub19ma2...axkl
Engineer at https://opennode.com
---
Working on https://catallax.network - decentralized labor/bounty protocol
and: https://attestr.app/ - mutual agreements signed on nostr
Do you like sharing paywalled content to nostr? Install this extension: https://chromewebstore.google.com/detail/readtorelay/gfncdikmbmefjjbahjhgkodnhepikecj - https://github.com/vcavallo/ReadToRelay
Order print books with bitcoin! https://whitepaperbooks.com
Notes (12)
Feels like actual magic.
- A plain english request lands with a AI bot who responds with a specification for a chunk of interface **as a nostr note (Kind 6666)**
- The client knows how to render and handle actions in said nostr notes such that they become live applications
- Save these components to nostr lists to be reloaded later (or better yet, composed together with other components... the user's listed components are sent to the bot in subsequent requests so it may reference them in composed interfaces)
https://v.nostr.build/2j8XX38Joisbe2u2.mp4
#hypermedia
still works
For real?
Jeepers!
Hello world
You mean crazy shit like this?
```
{"type": "eval", "expr": "new Date().getMinutes()", "as": "minute", "display": false},
{"type": "data", "bind": "$.minute", "label": "Current minute: "},
{"type": "hr"},
{
"type": "if",
"condition": "$.minute % 2 == 1",
"then": [
{"type": "text", "value": "Minute is ODD - querying notes..."},
{"type": "query", "filter": {"kinds": [1], "limit": 3}, "as": "notes", "children": [
{"type": "foreach", "items": "$.notes", "as": "note", "template": {
"type": "container", "children": [
{"type": "text", "bind": "$.note.content"}
]
}}
]}
],
"else": [
{"type": "text", "value": "Minute is EVEN - showing different content"},
{"type": "text", "value": "Refresh on an odd minute to see notes!"}
]
}
```
nostr:nevent1qvzqqqqqqypzqnyqqft6tz9g9pyaqjvp0s4a4tvcfvj6gkke7mddvmj86w68uwe0qyt8wumn8ghj7mn0wd68yetvd96x2uewdaexwtcqyr603zu9rmj0f5g20mzjkh0d6r5m0r2lwztvykpm0un8c6hlssamvs630vx
i'm going to have to record a video of this in progress..
- write request
- wait a bit
- bot responds with a note whose content is the ui
- ui is immediately rendered and usable from your connected npub
nostr:nevent1qqs9qdlq22pjztlweh760v9xpqs4c6y0jy85nwxl5ptem24yenhpzzgpzemhxue69uhkummnw3ex2mrfw3jhxtn0wfnj7q3q9ma2w9dmk3kat0nt0k5dwuqzvmg3va9ezwup0zkakhpwv0vcwvcsxpqqqqqqzk994ms
nostr:nevent1qqs9qdlq22pjztlweh760v9xpqs4c6y0jy85nwxl5ptem24yenhpzzgpzemhxue69uhkummnw3ex2mrfw3jhxtn0wfnj7q3q9ma2w9dmk3kat0nt0k5dwuqzvmg3va9ezwup0zkakhpwv0vcwvcsxpqqqqqqzk994msCreate a feedback form that lets people explain how they feel about this HATE-bot (Hypertext as the Engine) approach
now the bot is in the client :)
a client that re-builds itself live.
nostr:nevent1qvzqqqqqqypzpw77dg8gs3lpeket5hkqy8xff84nemcjtwpsff6glcguqsrejrhvqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qy2hwumn8ghj7un9d3shjtnyv9kh2uewd9hj7qpq9kkv9glcf2j9mn89j52udejn6nq87hypf22w3jp0wac23v7pesks7j07ff
nostr:nevent1qvzqqqqqqypzpw77dg8gs3lpeket5hkqy8xff84nemcjtwpsff6glcguqsrejrhvqythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qy2hwumn8ghj7un9d3shjtnyv9kh2uewd9hj7qpq9kkv9glcf2j9mn89j52udejn6nq87hypf22w3jp0wac23v7pesks7j07ffCreate a poll asking what people's favorite pizza topping is with options for pepperoni, mushrooms, pineapple, and plain cheese
Check out what this screenshot note is replying to. I'm both excited and scared.
Next steps:
- host the malleable UI "client" (it's just a static html file)
- make it easier to load a given note in the client
- upgrade the "client" so that it can at least do these:
1. query + foreach - enables feeds/lists
2. embed - Enables composition
3. if/else - Conditional UIs
4. local state (??) - Interactive apps without publishing
5. computed - Derived values
6. pagination - Scale to large datasets
X. ...eventually rewrite the client to be more of a "bootstrap/BIOS" so that the bot response actually _includes the "client code" html/js that it needs to run itself_. and the client replaces itself with that "OS". so essentially notes become "executable" apps. 👹
(also the bot is offline so don't bother talking to it)
nostr:nevent1qvzqqqqqqypzqth65u2mhdrd6klxkldg6acqyek3ze6tjyacz79dmdwzuc7esue3qy2hwumn8ghj7un9d3shjtnyv9kh2uewd9hj7qghwaehxw309aex2mrp0yh8qunfd4skctnwv46z7qpq6ejq3qw4e895u50c364mnkwrcel7fw7djwrqs76qmevysftf8fqsf0mylr
https://github.com/vcavallo/nostr-hypermedia/blob/hatebot/hateoas-js-readme.md