and now we have additional benefit that the note id and relay url are in clear text, can be configured in url again
249 bytes
data:text/html,
it seems base64 encoding in data uri is not necessary
this is just 257 bytes
data:text/html;nos.lol,
moving all the params from url to code, we can make it to 326 bytes
data:text/html;base64,PHNjcmlwdD5zPW5ldyBXZWJTb2NrZXQoIndzczovL25vcy5sb2wiKSxzLm9ub3Blbj0oKT0+e3Muc2VuZCgnWyJSRVEiLCJxIix7ImlkcyI6WyI4MjA0ZTkyYWRlMTgxYTI0YWIwMjA2MTQ0ZmU1YzBiZjU1MWUxOTQyODEwZjk4YmJiNmMwZjI5NDYyODY5OWZkIl19XScpfSxzLm9ubWVzc2FnZT1lPT57ZG9jdW1lbnQud3JpdGUoSlNPTi5wYXJzZShlLmRhdGEpWzJdLmNvbnRlbnQpfTwvc2NyaXB0Pgo=
this is the code needed to load html page from nostr,
can we make it smaller?
```html
m = location.href.match(/([^;]+)/g)
s = new WebSocket("wss://" + m[1])
s.onopen = () => {
s.send('["REQ","q",{"ids":["'+m[2]+'"]}]')
}
s.onmessage = (e) => {
document.write(JSON.parse(e.data)[2].content)
}
```
we dont need to decodeURIComponents, lets just do is smaller
367 bytes
data:text/html;nos.lol;8204e92ade181a24ab0206144fe5c0bf551e1942810f98bbb6c0f294628699fd;base64,PHNjcmlwdD5tPWxvY2F0aW9uLmhyZWYubWF0Y2goLyhbXjtdKykvZykscz1uZXcgV2ViU29ja2V0KCJ3c3M6Ly8iK21bMV0pLHMub25vcGVuPSgpPT57cy5zZW5kKCdbIlJFUSIsInEiLHsiaWRzIjpbIicrbVsyXSsnIl19XScpfSxzLm9ubWVzc2FnZT1lPT57ZG9jdW1lbnQud3JpdGUoSlNPTi5wYXJzZShlLmRhdGEpWzJdLmNvbnRlbnQpfTwvc2NyaXB0Pgo=
using event id instead of pubkey and #d
415 bytes
data:text/html;nos.lol;8204e92ade181a24ab0206144fe5c0bf551e1942810f98bbb6c0f294628699fd;base64,PHNjcmlwdD5kPWRlY29kZVVSSUNvbXBvbmVudCxtPXdpbmRvdy5tfHxsb2NhdGlvbi5ocmVmLm1hdGNoKC8oW147XSspL2cpLHM9bmV3IFdlYlNvY2tldCgid3NzOi8vIitkKG1bMV0pKSxzLm9ub3Blbj0oKT0+e3Muc2VuZCgnWyJSRVEiLCJxIix7ImlkcyI6WyInK2QobVsyXSkrJyJdfV0nKX0scy5vbm1lc3NhZ2U9ZT0+e2RvY3VtZW50LndyaXRlKEpTT04ucGFyc2UoZS5kYXRhKVsyXS5jb250ZW50KX08L3NjcmlwdD4K
534 bytes
data:text/html;nos.lol;da1d252491143c9d257166331d931311959c0bab2b39d8de8a5868a56b38a6eb;https%3A%2F%2Fimagewnine.net%2Fimages%2F2022%2F07%2F10%2FLily-Rose-08-037.jpg.html;base64,PHNjcmlwdD5kPWRlY29kZVVSSUNvbXBvbmVudCxtPXdpbmRvdy5tfHxsb2NhdGlvbi5ocmVmLm1hdGNoKC8oW147XSspL2cpLHM9bmV3IFdlYlNvY2tldCgid3NzOi8vIitkKG1bMV0pKSxzLm9ub3Blbj0oKT0+e3Muc2VuZCgnWyJSRVEiLCJxIix7ImF1dGhvcnMiOlsiJytkKG1bMl0pKyciXSwiI2QiOlsiJytkKG1bM10pKyciXX1dJyl9LHMub25tZXNzYWdlPWU9Pntkb2N1bWVudC53cml0ZShKU09OLnBhcnNlKGUuZGF0YSlbMl0uY29udGVudCl9PC9zY3JpcHQ+Cg==
547 bytes
data:text/html;relay.nostr.band;0d190bed89c4d95dc0267fa09ed61e1b6633eafb692a754ac5bb02d4820ed0c5;https%3A%2F%2Fimagewnine.net%2Fimages%2F2022%2F07%2F10%2FLily-Rose-08-037.jpg.html;base64,PHNjcmlwdD5kPWRlY29kZVVSSUNvbXBvbmVudCx3PXdpbmRvdyxtPXcubXx8bG9jYXRpb24uaHJlZi5tYXRjaCgvKFteO10rKS9nKSxzPW5ldyBXZWJTb2NrZXQoIndzczovLyIrZChtWzFdKSkscy5vbm9wZW49KCk9PntzLnNlbmQoJ1siUkVRIiwicSIseyJhdXRob3JzIjpbIicrZChtWzJdKSsnIl0sIiNkIjpbIicrZChtWzNdKSsnIl19XScpfSxzLm9ubWVzc2FnZT1lPT57ZG9jdW1lbnQud3JpdGUoSlNPTi5wYXJzZShlLmRhdGEpWzJdLmNvbnRlbnQpfTwvc2NyaXB0Pgo=
with little hacks, its now 599 bytes
data:text/html;relay.nostr.band;0d190bed89c4d95dc0267fa09ed61e1b6633eafb692a754ac5bb02d4820ed0c5;https%3A%2F%2Fimagewnine.net%2Fimages%2F2022%2F07%2F10%2FLily-Rose-08-037.jpg.html;base64,PHNjcmlwdD5kPWRlY29kZVVSSUNvbXBvbmVudCx3PXdpbmRvdyxtPXcubXx8bG9jYXRpb24uaHJlZi5tYXRjaCgvKFteO10rKS9nKSxzPW5ldyBXZWJTb2NrZXQoIndzczovLyIrZChtWzFdKSkscy5vbm9wZW49KCk9PntzLnNlbmQoJ1siUkVRIiwicSIseyJhdXRob3JzIjpbIicrZChtWzJdKSsnIl0sIiNkIjpbIicrZChtWzNdKSsnIl19XScpfSxzLm9ubWVzc2FnZT1lPT57ZG9jdW1lbnQud3JpdGUoSlNPTi5wYXJzZShlLmRhdGEpWzJdLmNvbnRlbnQpLGRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJsb2FkIikpfTwvc2NyaXB0Pgo=
is this the shortest possible code to load note?
currently link length is 715 bytes after this:
s="data:text/html;relay.nostr.band;0d190bed89c4d95dc0267fa09ed61e1b6633eafb692a754ac5bb02d4820ed0c5;https%3A%2F%2Fimagewnine.net%2Fimages%2F2022%2F07%2F10%2FLily-Rose-08-037.jpg.html;base64,"$(minify init.min.html | base64 -w 0); echo ${#s}; echo $s
data:text/html;relay.nostr.band;0d190bed89c4d95dc0267fa09ed61e1b6633eafb692a754ac5bb02d4820ed0c5;https%3A%2F%2Fimagewnine.net%2Fimages%2F2022%2F07%2F10%2FLily-Rose-08-037.jpg.html;base64,PHNjcmlwdD5kPWRlY29kZVVSSUNvbXBvbmVudCx3PXdpbmRvdyxtPWxvY2F0aW9uLmhyZWYubWF0Y2goLyhbXjtdKykvZykscz1uZXcgV2ViU29ja2V0KHcucnx8IndzczovLyIrZChtWzFdKSkscy5vbm9wZW49KCk9PntzLnNlbmQoJ1siUkVRIiwicSIseyJhdXRob3JzIjpbIicrKHcua3x8ZChtWzJdKSkrJyJdLCIjZCI6WyInKyh3LmZ8fGQobVszXSkpKyciXX1dJyl9LHMub25tZXNzYWdlPWFzeW5jIGU9Pntmb3Iocy5jbG9zZSgpLGRvY3VtZW50LndyaXRlKEpTT04ucGFyc2UoZS5kYXRhKVsyXS5jb250ZW50KTshdy5sb2FkZWQ7KWF3YWl0IG5ldyBQcm9taXNlKChlPT5zZXRUaW1lb3V0KGUsMTApKSk7ZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImxvYWQiKSl9PC9zY3JpcHQ+Cg==
(715 bytes)
data:text/html;r=relay.nostr.band;k=0d190bed89c4d95dc0267fa09ed61e1b6633eafb692a754ac5bb02d4820ed0c5;f=https%3A%2F%2Fimagewnine.net%2Fimages%2F2022%2F07%2F10%2FLily-Rose-08-037.jpg.html;base64,PHNjcmlwdD5kPWRlY29kZVVSSUNvbXBvbmVudCx3PXdpbmRvdyx3LnJ8fChtPVsuLi5sb2NhdGlvbi5ocmVmLm1hdGNoQWxsKC8oW3JrZl0pPShbXjtdKykvZyldLHI9IndzczovLyIrZChtWzBdWzJdKSxrPWQobVsxXVsyXSksZj1kKG1bMl1bMl0pKSxzPW5ldyBXZWJTb2NrZXQocikscy5vbm9wZW49KCk9PntzLnNlbmQoJ1siUkVRIiwgInEiLCB7ImF1dGhvcnMiOiBbIicraysnIl0sICIjZCI6IFsiJytmKyciXX1dJyl9LHMub25tZXNzYWdlPWFzeW5jIGU9Pntmb3Iocy5jbG9zZSgpLGRvY3VtZW50LndyaXRlKEpTT04ucGFyc2UoZS5kYXRhKVsyXS5jb250ZW50KTshdy5sb2FkZWQ7KWF3YWl0IG5ldyBQcm9taXNlKChlPT5zZXRUaW1lb3V0KGUsMTApKSk7ZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImxvYWQiKSl9PC9zY3JpcHQ+Cg==
data:text/html;r=nos.lol;p=https%3A%2F%2Fcorsproxy.org;i=https%3A%2F%2Fimagewnine.net%2Fimages%2F2022%2F07%2F10%2FLily-Rose-08-037.jpg;k=c489c2bb22c693fc4bfaf444cc34fb247c2132995683ab659222725270d81635;f=archive-image.html;base64,PHNjcmlwdD4KKCgpID0+IHsKICBpZih0eXBlb2YgciA9PSAidW5kZWZpbmVkIiB8fCB0eXBlb2YgayA9PSAidW5kZWZpbmVkIiB8fCB0eXBlb2YgZiA9PSAidW5kZWZpbmVkIil7CiAgICByID0gIndzczovLyIgKyBkZWNvZGVVUklDb21wb25lbnQobG9jYXRpb24uaHJlZi5tYXRjaCgvZGF0YTpcUys/O3I9KFteO10rKVxTKjtiYXNlNjQsLylbMV0pCiAgICBrID0gZGVjb2RlVVJJQ29tcG9uZW50KGxvY2F0aW9uLmhyZWYubWF0Y2goL2RhdGE6XFMrPztrPShbXjtdKylcUyo7YmFzZTY0LC8pWzFdKQogICAgZiA9IGRlY29kZVVSSUNvbXBvbmVudChsb2NhdGlvbi5ocmVmLm1hdGNoKC9kYXRhOlxTKz87Zj0oW147XSspXFMqO2Jhc2U2NCwvKVsxXSkKICB9CiAgCiAgZG9jdW1lbnQud3JpdGUoIjxwPmNvbm5lY3RpbmcgdG8gIiArIHIgKyAiPC9wPiIpCiAgY29uc3QgcyA9IG5ldyBXZWJTb2NrZXQocikKCiAgcy5vbm9wZW4gPSAoKSA9PiB7CiAgICBzLnNlbmQoJ1siUkVRIiwgInEiLCB7ImF1dGhvcnMiOiBbIicgKyBrICsgJyJdLCAiI2QiOiBbIicgKyBmICsgJyJdfV0nKQogIH0KCiAgcy5vbm1lc3NhZ2UgPSBhc3luYyAoZSkgPT4gewogICAgcy5jbG9zZSgpCiAgICBkb2N1bWVudC53cml0ZShKU09OLnBhcnNlKGUuZGF0YSlbMl0uY29udGVudCkKCiAgICB3aGlsZSghd2luZG93LmxvYWRlZCl7CiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKGMgPT4gc2V0VGltZW91dChjLCAxMCkpCiAgICB9CgogICAgZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImxvYWQiKSkKICB9Cn0pKCkKPC9zY3JpcHQ+Cg==
data:text/html;r=relay.nostr.band;k=78404c7805baab8d40a89a76bcfa051d3603555deef99c19b1eb38a6a397a71e;f=https%3A%2F%2Fimagewnine.net%2Fimages%2F2023%2F11%2F03%2FStasya-telephone-1-009.jpg.html;base64,PHNjcmlwdD4KKCgpID0+IHsKICBjb25zdCByID0gIndzczovLyIgKyBkZWNvZGVVUklDb21wb25lbnQobG9jYXRpb24uaHJlZi5tYXRjaCgvZGF0YTpcUys/O3I9KFteO10rKVxTKjtiYXNlNjQsLylbMV0pCiAgY29uc3QgayA9IGRlY29kZVVSSUNvbXBvbmVudChsb2NhdGlvbi5ocmVmLm1hdGNoKC9kYXRhOlxTKz87az0oW147XSspXFMqO2Jhc2U2NCwvKVsxXSkKICBjb25zdCBmID0gZGVjb2RlVVJJQ29tcG9uZW50KGxvY2F0aW9uLmhyZWYubWF0Y2goL2RhdGE6XFMrPztmPShbXjtdKylcUyo7YmFzZTY0LC8pWzFdKQoKICBkb2N1bWVudC53cml0ZSgiPHA+Y29ubmVjdGluZyB0byAiICsgciArICI8L3A+IikKICBjb25zdCBzID0gbmV3IFdlYlNvY2tldChyKQoKICBzLm9ub3BlbiA9ICgpID0+IHsKICAgIHMuc2VuZCgnWyJSRVEiLCAicSIsIHsiYXV0aG9ycyI6IFsiJyArIGsgKyAnIl0sICIjZCI6IFsiJyArIGYgKyAnIl19XScpCiAgfQoKICBzLm9ubWVzc2FnZSA9IGFzeW5jIChlKSA9PiB7CiAgICBzLmNsb3NlKCkKICAgIGRvY3VtZW50LndyaXRlKEpTT04ucGFyc2UoZS5kYXRhKVsyXS5jb250ZW50KQoKICAgIHdoaWxlKCF3aW5kb3cubG9hZGVkKXsKICAgICAgYXdhaXQgbmV3IFByb21pc2UoYyA9PiBzZXRUaW1lb3V0KGMsIDEwKSkKICAgIH0KCiAgICBkaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgibG9hZCIpKQogIH0KfSkoKQo8L3NjcmlwdD4K
data:text/html;r=relay.nostr.band;k=0d190bed89c4d95dc0267fa09ed61e1b6633eafb692a754ac5bb02d4820ed0c5;f=https%3A%2F%2Fimagewnine.net%2Fimages%2F2022%2F07%2F10%2FLily-Rose-08-037.jpg.html;base64,PHNjcmlwdD4KKCgpID0+IHsKICBjb25zdCByID0gIndzczovLyIgKyBkZWNvZGVVUklDb21wb25lbnQobG9jYXRpb24uaHJlZi5tYXRjaCgvZGF0YTpcUys/O3I9KFteO10rKVxTKjtiYXNlNjQsLylbMV0pCiAgY29uc3QgayA9IGRlY29kZVVSSUNvbXBvbmVudChsb2NhdGlvbi5ocmVmLm1hdGNoKC9kYXRhOlxTKz87az0oW147XSspXFMqO2Jhc2U2NCwvKVsxXSkKICBjb25zdCBmID0gZGVjb2RlVVJJQ29tcG9uZW50KGxvY2F0aW9uLmhyZWYubWF0Y2goL2RhdGE6XFMrPztmPShbXjtdKylcUyo7YmFzZTY0LC8pWzFdKQoKICBkb2N1bWVudC53cml0ZSgiPHA+Y29ubmVjdGluZyB0byAiICsgciArICI8L3A+IikKICBjb25zdCBzID0gbmV3IFdlYlNvY2tldChyKQoKICBzLm9ub3BlbiA9ICgpID0+IHsKICAgIHMuc2VuZCgnWyJSRVEiLCAicSIsIHsiYXV0aG9ycyI6IFsiJyArIGsgKyAnIl0sICIjZCI6IFsiJyArIGYgKyAnIl19XScpCiAgfQoKICBzLm9ubWVzc2FnZSA9IGFzeW5jIChlKSA9PiB7CiAgICBzLmNsb3NlKCkKICAgIGRvY3VtZW50LndyaXRlKEpTT04ucGFyc2UoZS5kYXRhKVsyXS5jb250ZW50KQoKICAgIHdoaWxlKCF3aW5kb3cubG9hZGVkKXsKICAgICAgYXdhaXQgbmV3IFByb21pc2UoYyA9PiBzZXRUaW1lb3V0KGMsIDEwKSkKICAgIH0KCiAgICBkaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgibG9hZCIpKQogIH0KfSkoKQo8L3NjcmlwdD4K
#webarchive
data:text/html;r=nos.lol;k=da1d252491143c9d257166331d931311959c0bab2b39d8de8a5868a56b38a6eb;f=
.html;base64,PHNjcmlwdD4KKCgpID0+IHsKICBjb25zdCByID0gIndzczovLyIgKyBsb2NhdGlvbi5ocmVmLm1hdGNoKC9kYXRhOlxTKz87cj0oW147XSspXFMqO2Jhc2U2NCwvKVsxXQogIGNvbnN0IGsgPSBsb2NhdGlvbi5ocmVmLm1hdGNoKC9kYXRhOlxTKz87az0oW147XSspXFMqO2Jhc2U2NCwvKVsxXQogIGNvbnN0IGYgPSBsb2NhdGlvbi5ocmVmLm1hdGNoKC9kYXRhOlxTKz87Zj0oW147XSspXFMqO2Jhc2U2NCwvKVsxXQoKICBkb2N1bWVudC53cml0ZSgiPHA+Y29ubmVjdGluZyB0byAiICsgciArICI8L3A+IikKICBjb25zdCBzID0gbmV3IFdlYlNvY2tldChyKQoKICBzLm9ub3BlbiA9ICgpID0+IHsKICAgIHMuc2VuZCgnWyJSRVEiLCAicSIsIHsiYXV0aG9ycyI6IFsiJyArIGsgKyAnIl0sICIjZCI6IFsiJyArIGYgKyAnIl19XScpCiAgfQoKICBzLm9ubWVzc2FnZSA9IGFzeW5jIChlKSA9PiB7CiAgICBzLmNsb3NlKCkKICAgIGRvY3VtZW50LndyaXRlKEpTT04ucGFyc2UoZS5kYXRhKVsyXS5jb250ZW50KQoKICAgIHdoaWxlKCF3aW5kb3cubG9hZGVkKXsKICAgICAgYXdhaXQgbmV3IFByb21pc2UoYyA9PiBzZXRUaW1lb3V0KGMsIDEwKSkKICAgIH0KCiAgICBkaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgibG9hZCIpKQogIH0KfSkoKQo8L3NjcmlwdD4K
minimal data link structure to load #hostr web page is like this:
data:text/html;r=
upload web page with hostr
im using this function
function hostrup(){
cp $1 $HOME/tmp/index.html
hostr deploy -r -d "$1" -p $HOME/tmp/
}
hostrup somefile.html
with this kind of data link you can host any #html #js #app very much decentralized permissionless way.
what this url consists of:
r =
k =
f =
( p =
base64 source of bootstrap code to load #hostr content
nostr:note18jt76rsn0h3jsmudndljfckxmwvxnwev4t7yzvzs0dtezdnvl77szh29kc
.html