Introducing Swarmstr

For some time I’ve been working on a q&a nostr client with a simple goal:
Find answers to your questions. Assist others in resolving theirs.
Feel free to check it out at https://swarmstr.com

About Swarmstr

Swarmstr runs as web client and as a node.js server. Both, Swarmstr client and server are nostr clients. More resourceful relay subscriptions are delegated to the swarmstr server eg. all events tagged with #asknostr (and all those quoted in those events) are requested from many relays and rebroadcasted to a separate search pseudo-relay (only swarmstr server can write events to it). Swarmstr web client will then only need to query the search relay. The search relay is almost like a regular relay, but it only accepts { "search”: "text…” } filter (NIP-50). It uses elastic search instance to get relevant search results.
Swarmstr server uses nostr-dev-kit/ndk with caching (redis) to talk to nostr. With the caching on, swarmstr server has fast access to events that were already received in subscriptions so it can eg. provide meta tags for the head section of the document, so the notes can be indexed by search engines like google etc. I would want to use that fast rail for other stuff too. Take some load off the web client. Use swarmstr server a bit more as an api that the client can call. Then potentially, for other nostr clients, turn the swarmstr server to a relay (a swarmstr relay), and let them query stuff like recent notes, hot notes, stats etc. Ideally the whole thing would be a docker container, so people can run their own swarmstr instances without much hustle. Swarmstr instances could talk to each other (would not necessarily have to if someone doesn’t want it) eg. right now I’m running an instance for a friend at https://biblestr.com . Swarmstr instance at https://swarmstr.com can call biblestr’s search relay and vice versa. Ultimately there could be many swarmstr instances focused around different hashtags (private or public).
Some milestones:
  • NIP-32 Labelling - allow users to evaluate questions eg. suggest tags, link to other similar questions, suggest experts etc. For answers: marking them as correct, irrelevant, not a resolution etc.
  • NIP-51 Lists - allow users to create and import users and notes lists. Useful for muting specific users (eg. filtering spam), easily linking to a set of questions/answers
  • NIP-58 Badges - award badges to active users. Great for recognition. Additionally badge owners might have access to some extra features (like premium nostr address, lightning address etc.)
  • NIP-46 Login with nostr connect
  • PWA - at some point, a PWA will be released.
Feedback much appreciated!
top 3 off the top of my head:
  • bounty / reward mechanism - at least promise rewards for best answers, beyond organic zaps
  • filter by topic (or do you intend that we run one of these per tag, didn't quite get that part..)
  • filter responses by social graph (ie follows/fofs) - else its just gonna get unruly (swampstr more like..)
reply
  • I'm going through answers often while testing swarmstr and I'm zapping the best answers. Perhaps I should mention that. In the future, I'd like to put aside a certain budget and automatically match zaps up to specific amount.
  • yes the idea is one instance per tag {['t': 'TAG']} (can be only a server instance). You can include any instance to get the search results from there.
  • mute lists are one of the thing I want to put my hands on next
reply
how about the person asking the question puts a (zap budget) and whoever provides the best answer (measured by likes) gets the Zap Budget OR another way the person who asks a question choses who gets the zap budget
Whatever the option is, users will compete between each other to provide best answers which will lead to more users and then this will lead to more people asking questions as answers are quick and/or close to an accurate answer ..... REAPEAT....
reply
Reactions are unreliable so I was thinking the person asking the questions chooses the best answer by marking it as accepted answer (by labelling, NIP-32). Perhaps the answer could be marked as accepted automatically when the user zaps it. Either way I don't think there's a good way to 'enforce' the person asking the question to always zap the best answer (am I wrong), so perhaps swarmstr could reward answers marked as accepted regardless.
reply
its also a good way to think about it .... I was thinking more on how to generate traction (adoption) .... let me try to give some perspective from different angels
  • Questioner (person asking): the intention of any questioner does vary (looking for social interactions, truth, entertainment etc...) so we can never tell what that is, therefor letting the system decide which answer is best is probably a good way. at the same time, its also useful to have the questioner decided which one is the best answer as it can be purely subject and personal (how the questioner feels about the answer)
  • Answerer (person answering): intention is also unknown and varies but in general the answerer wants provide input .... a mechanism to reward/punish needs to be in place to encourage answers the questioners like ....
Later on, once you have a bigger pool of questioners & answerers ... you can create profiles linked on topics/subject matter experts .... such profiles within a scoring system would provide insight to other users on believability/credibility
I can go on and on but I dont want to make it very long :)
reply
Will take these into account. Thanks!
Also if you'd like to, you can raise an issue at https://github.com/ptrio42/swarmstr.com 😉
reply
This has come along way since the last time I checked it out. Nice job!
reply
Thank you!
reply
Also, folks were missing your backyard build updates a few weeks ago.
reply
Yeah I'm behind with the updates. Got some pics I can share tho 😁
reply
Also lost access to my SN account 😔
reply
lnauth?
reply
not sure about the method I used. Perhaps I logged in with blue wallet which I then deleted from my phone 😄
reply
I really wished lightning wallets that support lnauth told you which sites you've auth'd on.
reply
Yes that'd be super helpful
does this scale well, and how do you pay for development and maintenance?
reply
I didn't focus on scalability atm.
The project is open source so I'm kinda hoping that if the people find swarmstr useful, I will get some help from the community.
reply
I ask these questions because this project seems complicated.
reply
There's some dependencies yes, but I'd like to make these opt-out. Also dockerizing the whole thing makes it easier to maintain.
reply