Last Notes
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Yep, hodlbod.coracle.tools
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Blossom support was what pushed me over the edge on haven
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Nope 😞 it's on the very long list. This is what happens when you start a new product when you're only part way done with the first one.
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Best CTA I've ever witnessed
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
Just as I was about to bite into a PB&J sandwich... smh
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
It's a perfect way to save face in any mishap
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
lol this was not intended to be sent
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
https://image.nostr.build/8a2ad03f959938d67408f8ac89c821f44a2cdd257b577a025eb80d5b31214bae.png
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Yep, exactly. Definitely don't use it.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Nice! Decided not to buy the book, but I will listen to this.
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
Timezones are a perennial nerd snipe https://ssoready.com/blog/engineering/truths-programmers-timezones/
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
This is interesting, someone is quoting a translated version of one of my blog posts, and I still get mentioned. Nostr transcends language apparently.
#nevent1q…gvem
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
You're much faster than I am
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Yep, just discovered myself that this is the source of the issue: https://github.com/airbnb/lottie-web/issues/3127
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Replicated it, it's an XSS
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
Something is hijacking all button clicks. I don't know what post it is, but I was able to replicate it.
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
This looks like an XSS attack
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Coracle does also show web of trust information on the relay browse page too
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Best I've come up with: https://github.com/nostr-protocol/nips/pull/1405
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Heck yeah, I put off messing with negentropy for a long time, but when I finally integrated it I was floored at how efficient it was.
https://tenor.com/bSJv9.gif
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
Never got around to it. But it's useful information. There is a relay list on coracle's profile pages, but it doesn't show which list it comes from
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
The difference between malice and humor is 24 zeroes
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Sorry, just saw this. The group posts thing is likely due to relay selections, and is a bug, but unfortunately it's not going to be fixed since I am sunsetting groups pretty soon. They may come back someday, but likely not in Coracle.
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
Using advanced I assume? Validation is pretty light there right now, but try `search` instead of `content`: https://github.com/nostr-protocol/nips/blob/af4329986cae9b0ef625a01c8cefd5e802ca6895/fe.md#search
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
There is a NUD and a PR: https://github.com/nostr-protocol/nips/pull/1554/files
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Where did you build this? `content` isn't specified in the NIP
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Russians have the best sense of humor
#nevent1q…v9j5
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Started teaching my son this yesterday
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Building an onboarding process without touching user keys with the current state of remote signing is like fighting with both hands glued to your face
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Cooperation requires conventions. Sometimes conventions are in conflict with an individual's strengths. My favorite example of the left/right handed thing is that castle staircases were built so that defenders could swing wide with their right hands, while attackers were up against a wall and couldn't swing as hard.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Probably just chose the wrong icon, and the functionality isn't very useful for kind 1 notes, since coracle shows them fine. The idea is that for other kinds you can open the note in a client that supports the kind better. It's a first draft (like most things in coracle) and needs refinement.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
Yep, if there's a necessary server side component then 78 doesn't really make sense.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I personally use NIP 78 to store user preferences, which are signed events on relays. If you're storing them on your server, I wouldn't bother signing them, since they're verified by your server. Unnecessary signatures/encryption creates more requests for user signers, which is UX friction.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I think this is a possibility. Just get rid of ranges entirely and make everything replaceable.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
I agree, but I also think that nostr has adopted mutable state, for better or worse. I'm more concerned now about the complexity that this introduces to nostr's most important event kind. It's one thing for blog posts to support edit, which forces complexity onto only long-form clients, it's another thing to force everyone to support it.
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
Luddism is great. Call it "reverse technological determinism"
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
I've heard the same argument from Christians. As if God didn't invent math
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
Coracle doesn't implement support for either, so showing it as a reply is the worst possible version (which is why annotations were done the way they were — you'll never be missing context). Amethyst also doesn't appear to implement annotations, leading to the same behavior. The difference is that edits overwrite, leading to different note content in different clients, whereas annotations always provide the full context.
TBH I'm fighting a losing battle with this one, nostr has long since embraced mutable state over event-sourcing. Not my preference, but that's ok. I still think edits come at a significant cost, even if everyone decides to agree to use them.
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
This is indescribably awful, but also not very surprising. Definitely need to route around DNS
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
If you used alby, you're safe.
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
Signers need to connect to relays in most cases
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
No such thing as negative press?
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Hey mom, I finally made it
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
Not a good time, but "errare humanum est"
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
The API key is public, because it's client side. So not privileged, however forks of coracle that are not up to date and havenct removed the bugsnag key may still be vulnerable.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
It's not categorically different, but in practical terms there are some benefits. For example, the codebase has fewer trusted dependencies and less code to review. On the other hand, they can become honeypots for attackers.
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
Just found out my Coracle vulnerability made RHR as "breaking news" 🫠
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I have contacted bugsnag, we'll see what they say. And yes, moving towards forcing users to use remote signers.
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
I think we should bite the bullet and figure out how to make it work
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Looks like it didn't go through before, just published again and it's updated now.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Glad to hear they're ok. Scary stuff.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
Here's a quick postmortem on the Coracle vulnerability from this morning. If you haven't heard about it, please see below.
#nevent1q…9r8a
First off, the offending line of code was incredibly stupid. It only took a glance to realize that something was incredibly wrong. I went back and git-blame'd the line, and discovered that it was the result of a refactor, where a local variable named `session` was replaced by an imported variable with the same name. The former was a random string (in keeping with my attempts to anonymize users). The second was a user session object, complete with private key.
This leads me to my first observation, which is that no one is auditing nostr apps (just as no one is auditing most software out there). In many cases, there isn't even a code review step, because many of us are solo devs. Just because something is open source doesn't mean you can trust it. Just because you wrote something doesn't mean you can trust it! My key was leaked right along with those of my users.
Code review aside, there were some mistakes I made that resulted in the incident being worse than it could have been:
1. I used analytics and error reporting.
2. I did not self-host my analytics and error reporting.
Because I was using a hosted error reporting service, their servers were implicated in my mistake. Had I been self-hosting, I could be more confident that the data I have deleted is actually gone (even if my users don't have the same assurance).
Action item number one: analytics and error reporting are important enough to being able to develop Coracle that I'm not planning on getting rid of them, but I am moving immediately to self-hosted options. If you want to opt-out of that data collection, there is a setting for that within Coracle.
Another mistake I made is that I trusted myself to safely handle my users' private keys. This is more than just my mistake; despite the growth in use of remote signers, it's still very common for nostr applications to offer private key login or generation. But after this incident I'm of the opinion that no one should be handling unencrypted private keys, except for signers.
Applications should not generate private keys or allow users to sign in with them. Period. In fact, I propose we sunset the term "nsec" entirely. There's no need to make a friendly encoding for something that users should never see. Instead, users should be asked to export their private keys in the password-protected ncryptsec format only. This prevents clipboard attacks or poor key management from compromising users.
This is action item number two: I've already removed private key login from Coracle, and will shortly be re-working my onboarding process to redirect users to set up a remote signer instead of generating a key.
This will have implications for UX, and might make things more difficult for new users in the short term. But as @nprofile…4qru pointed out, the longer we allow users to treat keys like passwords, the longer they're forming poor habits for keeping their keys safe, because the two are categorically different. Removing support for private keys will cause pain in the short term, but will force us to improve our integrations with remote signers, improving security and UX in the long term.
That's all I've got for now. Thank you to everyone for your graciousness, I appreciate all the support. I'm honestly glad this happened, and I hope it will galvanize all of us into action to continue to improve nostr's security.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
I started that way, but ran into performance issues with my home baked solution. I'll take a look at glitchtip, I would definitely prefer self-hosted.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
Yeah, this is actually a good thing. It will push us to fix these security/UX issues.
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
I've asked them to, we'll see what they say
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
There's no standard way to do it, but lots of people have success with social key rotation. Just make a new key and tell your follows you've moved. I'm sure we'll eventually come up with something more streamlined.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
I agree, nsec.app is the smoothest experience I've seen so far. Thinking about seeing if I can integrate it into the onboarding experience in Coracle, friction notwithstanding.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
It's a good start, but ultimately a custodial honeypot. Self-hosted bunkers are much better, but hard for normies. Multisig could be a great way to solve this, I know it's been worked on some.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
Great points. Web apps also have lots more supply chain attack vectors than single-purpose signers might. I especially like your point about training users. Lowering security to accommodate UX doesn't do anyone any favors.
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
You're probably right. I think we'll get there, we just aren't yet. Bunkers were introduced about a year ago, and have come a long way in adoption, but they're still not quite "easy" (unless they're custodial, and even then, most of those are offline).
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Agreed, it's a profitable conversation
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Neat project! Thinking about removing nsec login.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Keys are simple, external 3rd party dependencies aren't (and, as you note, may not be any more secure). It's all about ease of use for non-technical users. But the days of nsec login are numbered, we just need really solid flows for secure custody. nsec.app comes close.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Normalizing using many keys for different use cases might be an improvement as well.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Unfortunately I don't think you can get simpler than nsec login. It's also the easiest way to create an account. Anything more is very confusing for normal people. You either have server-side custody, a different browser app like nsec.app, or a new app on your phone, all of which can have the same problems. A key rotation scheme would be an improvement worth having, and educating users to reduce key exposure and not use their main key for storing ecash or secret communications or whatnot seems like the way forward in the short term at least.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, nsec login is already discouraged in Coracle's login process.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote/extension signers are best practice. You can get better security with hardware signers, at the cost of lots of pain. But as with any hot key or custodial account it's best not to risk too much with any identity.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yep, remote signers and browser extensions are a great solution for this, and have been around for years now.
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
Yeah, I was thinking the same thing
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
The stringified json of the session object was used as the user ID, so yes, stored in plaintext and visible via the admin UI. 😭
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
Agreed, I've been very lax with this myself. Will have to be more careful going forward.
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
I've been dreading this day tbh
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
Nope, the worst that would happen would be your pubkey would be shared with me. Not ideal, but also not sensitive.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
**Security Update**
I've got some bad news for you guys. This morning, as I was adding error handling to flotilla, I discovered that Coracle has been sending user session objects to bugsnag when reporting errors.
Who is affected: Users who triggered an error in Coracle while signed in with their private key, since December 5th 2023.
What I've done:
- I immediately released a new version of Coracle, both to web and to zap.store
- I have deleted the affected apks from my releases
- I have deleted all my error data from bugsnag
- I have deleted my bugsnag project and rotated my api key, so lingering error reports will be dropped
- I have audited my code for use of the session object to ensure nothing else like this is happening
What you should do:
- If you're logged in with your private key, log out
- Hard refresh the page to ensure you have the latest version of Coracle
The bottom line is that if you signed in to Coracle with your private key, it has been shared with me and with bugsnag. In practical terms, your keys should still be secure, since they were sent over TLS, and have been deleted. But there is no guarantee I can offer that they are in fact gone.
I take my users' privacy seriously. My error reporting implementation doesn't record user IPs, it redacts identifying data, and it allows users to opt-out. I also warn the user when they attempt to enter an nsec into a text field. In this case, I simply screwed up, and I sincerely apologize. Reply to this note if you have any questions.
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
1. Improving our home
2. Gardening and permaculture
3. Revolutionary France
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
Whatever not caring/never remembering is
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
4 🫠
Just weird state things, like one route getting called on a different page. It's been really bad this morning.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Two of my favorite projects lately are nostr-editor by @nprofile…uqk9 and nostr-signer-capacitor-plugin by @nprofile…gqeu . Both projects provide high-quality solutions to specific, difficult problems that application developers can use to significantly improve their UX without reinventing the wheel. Looking forward to more of this kind of thing.
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
Now that I can see it I want to comment for real. I love demonflyingfox. The best one is the Balenciaga Harry Potter: https://www.youtube.com/watch?v=iE39q-IKOzA
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
What client did you use to send this? It uses `note1` instead of `nevent` and doesn't have a `q` tag, which makes the quote impossible to find.
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yes, by bots, but I'm more thinking of human drive by posters here. A long timeframe (maybe 3 days?) might be enough to discourage a decent amount of unwanted content
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
Yeah, log in with npub is more of a power user thing
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
I should probably say that the bottom line is that the quoted note didn't load for me until it got replicated to other relays. A hint pointing to nos' relay or wherever the quote was living would solve that. A pubkey hint pointing to the note's author would allow me to find that person's write relays myself and look there.
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
The note includes a `note1` entity, which is just an id, and no tags. Ideally, clients would encourage people to use `nevent` entities instead, since they include relay hints, but more important would be to add a `q` tag with relay hint + pubkey hint: https://github.com/nostr-protocol/nips/blob/e3afd7ac5b72c20fe209edf3ea84cd986d0bd4ef/18.md?plain=1#L21
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
This was specifically in the context of a social media site (from 1997), where you had to go through a few pages of content before being able to post.
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
I think there are a lot things in the works like that, from @nprofile…hc32 at least
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Counterintuitive wisdom from "Design for Community":
"Go to the front door of your site and start clicking. Take the most direct path to the post button—the button that a user would click to commit his post to your site. Count the clicks it takes to get from start to finish. The more clicks it takes, the better the posts will be."
We are so trained to "reduce friction" wherever possible. But the implicit tradeoff is toward quantity, rather than quality. The author also talks about leading users through existing content before they are prompted to contribute their own. This encourages people to internalize the community's culture before disrupting it with their own untempered perspective.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Here's an idea for relay operators, particularly for communities: you could create a public relay that prevents spam by allowing people to post only after they have a certain amount of activity. If they're not AUTHing, or REQing, they're likely spam. Ask them to engage more with existing content before posting.
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
Is this from nos? I'm getting old waiting for relay/pubkey hints on quotes to become standard
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
World peace wasn't so hard after all
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
Another day, another css bug
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
I appreciate the feedback!
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
Really enjoying @nprofile…knce 's new yahoo pipes podcast
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language
lisp is the simplest language