Replying to Avatar david

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+ ?

Reply to this note

Please Login to reply.

Discussion

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.