A NOSTR web of trust is the solution to the problem of peer review journals being captured.
Discussion
I think so too. Alexandria is also an interesting idea I haven't had time to explore a ls much as I would like to.
Brainstorm: your personalized WoT nostr relay that keeps track of your Grapevine.
Eventually, you will be able to rely on your Brainstorm to maintain a vetted list of academic articles on whatever topic you’re interested in. They will be vetted by experts in that field. Who curates the list of experts? Your Grapevine. Who curates the list of topics? Your Grapevine.
Right now, my Brainstorm instance maintains lists of nip56-reported users, curated by my Grapevine (https://straycat.brainstorm.social/nip56.html). Updates every 2 hours. Soon my Grapevine will interpret more sources of raw data (not just nip56 reports) for the decentralized curation of more lists.
Example: If we were to tag users with keywords like “tenured professor” and “physicist”, using a NIP-56-like system of tagging, Brainstorm could easily curate lists of physicists and tenured professors using the same technique that is running right now for NIP-56. In my mind, that is the start of how we build a working decentralized alternative to legacy academic peer review.
🧠 ⚡️ 🍇
nostr:npub10npj3gydmv40m70ehemmal6vsdyfl7tewgvz043g54p0x23y0s8qzztl5h
nostr:npub1manlnflyzyjhgh970t8mmngrdytcp3jrmaa66u846ggg7t20cgqqvyn9tn
nostr:npub19ma2w9dmk3kat0nt0k5dwuqzvmg3va9ezwup0zkakhpwv0vcwvcsg8axkl
nostr:npub1cgcwm56v5hyrrzl5ty4vq4kdud63n5u4czgycdl2r3jshzk55ufqe52ndy
You are doing amazing things! I need to figure out the best way for me to host stuff so I can help test and build my own grapevine in the process 😅
If I were to spin one up for you, I’d make it dawn.brainstorm.social; it would be just like straycat.brainstorm.social except anchored to your pubkey instead of mine. I may want to do that pretty soon so I can get your feedback!
The main thing that makes foo.brainstorm.social different from my previous iteration earlier in 2025 (grapevine-brainstorm.vercel.app) is that each instance of foo.brainstorm.social now incorporates strfry (not just neo4j) and is “owned” by one pubkey (foo).
My main focus over the past few months has been getting neo4j to synchronize with strfry and then stay synchronized indefinitely. Seems to be working, and right now my focus is making sure it can run for long periods of time with a minimum of headache. Once that’s done, the next step will be making the various WoT scores available to other clients and services.
What I’m probably gonna do, but haven’t done yet, is make it so that any given Brainstorm instance — dawn.brainstorm.social, for example — can calculate the full gamut of personalized WoT scores (GrapeRank, PageRank, hops, verified follower count, etc) not only for the Brainstorm owner (you in this case) but personalized to other users as well. At first you’d do it for your friends; eventually you’ll be able to do it as a paid service if you wish.
The first real use case, I think, will be to produce a whitelist of pubkeys which is very inclusive — much more inclusive than “my follows + their follows” — but from which spam is reliably excluded. That whitelist can be accessed via api by relays and used to guard against spam. Hmm, maybe call it SpamGuard™️? SpamShield™️? I already have the api running; see for example https://straycat.brainstorm.social/get-whitelist, which produces a list of about 97k or 98k pubkeys, updated every 2 hours. That list is created by querying the database for pubkeys with graperank influence > 0.01; I’ll probably add an option to pass the cutoff to the api as a parameter.
I'm trying to zap you but I keep getting an error back that the receiver's service is unavailable and address cannot be found.
With that out of the way, I'd be honored to help test, anytime. I don't do much that wouldn't be expendable if everything needed to shift in a different direction, suddenly or otherwise.
The initial use, that you mention last, about how many whitelisted pubkeys are you including to achieve the 97k+ ?
Thanks, I’ll look into the zap thing, guess I haven’t gotten any for a while.
Are you asking about how do I generate the list of 97k whitelisted pubkeys? Not sure I am following your question.
I might have interpreted something wrong, but yes. Are you generating the more inclusive whitelist now and the 97k is generating off of that?
I may not have explained it clearly, but the whitelist generated by my brainstorm instance currently has ~97k pubkeys in it. So the inclusive whitelist = the 97k.
If you were to spin up a brainstorm instance of your own, dawn.brainstorm.social, it would have ~ 400k pubkeys in the database and would calculate personalized GrapeRank scores for all 400k, using your pubkey to seed the calculations. The whitelist is simply every pubkey in your database with graperank influence score above 0.01 (the default cutoff).
For a really lax cutoff like 0.01, I expect pretty much everyone’s whitelist will catch the same or nearly the same gigantic cloud of nostr users. (Unless you’re in some community that is completely disconnected from the main nostr community that we’re in.) So your whitelist will probably be almost identical to my whitelist. As we move the cutoff higher, from 0.01 to 0.1 or 0.5 or 0.9, the size and composition of different people’s whitelists will become more and more unique to the individual.
If your goal is to create basically a global feed that’s been cleaned up of the vast majority of the crap that basically nobody wants, the whitelist with a permissive cutoff like 0.01 is the way to go.
I see ok, I think I was blending 2 different thoughts into one implementation. Thank you! I get it now, I think.