I don't agree Nostr is P2P since clients must connect to relays and there's no provision at the time for client to client connectivity.
I found out about Nostr and due to the simplicity of the protocol I was able to start building right away.
I implemented a relay using Typescript:
https://github.com/Cameri/nostr-ts-relay
I also wrote this dead simple SMTP to Nostr gateway: https://github.com/Cameri/smtp-nostr-gateway
You can look someone up like bob@example.com and if he publishes his nostr information in a well-known file, you'll know where to follow him and what his public key is: https://github.com/nostr-protocol/nips/blob/master/35.md
Of course this doesn't work for people wishing to remain anonymous.
Last time I checked it out it depended on JS-specific behaviour which had to be replicated in other languages. It seemed like something was written first, and then they decided to extract it into a spec.
Maybe this has been cleaned up in the interim, but at the time a bunch of apps for it already existed so it was probably to late to go back.
That, and the insistence on 1-1 device:identity mapping (so you can't use the same account with multiple devices). And verifying an append-only log, so "show me Jane's recent posts" can't happen until it's downloaded & verified signatures for Jane's entire post history going back years.