[
{
"attrs": {},
"bound": "full",
"children": [
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "A Global Social Web",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
}
],
"end_section": null,
"flags": [],
"kind": "title",
"template_list": [
"sections/title/default.neoj",
"sections/basic/default.neoj"
],
"type": "basic"
},
{
"attrs": {},
"bound": "full",
"children": [
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "These are scratch notes. I\u0027m using them to help think about possible approaches. I\u0027m also interested in getting feedback. Especailly from folks who aren\u0027t straight, white, dudes. I\u0027ve got that demo represented. All that\u0027s to say that this is just a starting point and likely to change over time",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
}
],
"end_section": null,
"flags": [],
"kind": "note",
"template_list": [
"sections/note/default.neoj",
"sections/basic/default.neoj"
],
"type": "basic"
},
{
"attrs": {},
"bound": "full",
"children": [
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "I have a basic undersanding of public/private keys and I think the basics of what touches on them will work. If I\u0027m off-base and you know better please hit me up ",
"type": "plain-text"
},
{
"attrs": {},
"flags": [
"https://hachyderm.io/@TheIdOfAlan"
],
"kind": "link",
"spans": [
{
"kind": "plain-text",
"text": "on mastodon",
"type": "plain-text"
}
],
"type": "named-span"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
}
],
"end_section": null,
"flags": [],
"kind": "note",
"template_list": [
"sections/note/default.neoj",
"sections/basic/default.neoj"
],
"type": "basic"
},
{
"attrs": {},
"bound": "full",
"children": [
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "[] Make a note somewhere about multiple sites for things like separting public and authenticated traffic for offering your art.",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
},
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "[] Make a note somewhere about using public/private keys as a way to confirm identies (and trust chains and all that good stuff)",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
}
],
"end_section": null,
"flags": [],
"kind": "todo",
"template_list": [
"sections/todo/default.neoj",
"sections/basic/default.neoj"
],
"type": "basic"
},
{
"attrs": {},
"bound": "full",
"children": [
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "Distribution is something that\u0027s been on my mind over the course of the build",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "How do we set up so that folks can find each other? How do we get back to ",
"type": "plain-text"
},
{
"attrs": {},
"flags": [],
"kind": "emphasis-shorthand",
"text": "browsing",
"type": "emphasis-shorthand"
},
{
"kind": "plain-text",
"text": " the web?",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "What if feeds are in .well-known locations? The idea being to make the easy for aggregaotrs to pick up. Bascially, they scan domains and find the feeds. It would be much more effificent than search engines and AI bots trying to crawl sites and the fact that those exist it proves it can be done on a technical side.",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "I\u0027m thinking of this as both a type of federation and as a moderation opportunity.",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "Let\u0027s start with one. Let\u0027s say that neonet.neopoligen.com exists. (It doesn\u0027t, but while I\u0027m writing this I\u0027m pretty sure I\u0027m gonna end up building it to prove the point). It would act as a registery of Neopoligen sites.",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "The expansion of what defines a Neopoligen site comes into play here. Originally, it was just a site that would built by Neopoligen, but in order for this to work we\u0027ll need to expand the idea a litte. It would also require putting a couple of files in specific locations.",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "Actually, it only has to be a single file, but that single file will have a few things in it (which we\u0027ll get to in a second)",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "The file will go at a .well-known location. Those are locations that can be defined to always have a speicif thing. So, we\u0027d end up with something like:",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
},
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "https://www.alanwsmith.com/.well-known/neopoligen.json5",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "That file will have a specific schema (that\u0027s versioned) associated with it that defines the format.",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "The three things that would be required would be:",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
}
],
"end_section": null,
"flags": [],
"kind": "list",
"template_list": [
"sections/list/default.neoj"
],
"type": "list"
},
{
"attrs": {},
"bound": "start",
"children": [
{
"bound": "full",
"children": [
{
"children": [],
"kind": "olist-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "A list of feeds the site produces directly",
"type": "plain-text"
}
],
"template_list": [
"sections/olist-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "olist-item",
"template_list": [
"sections/olist-item/default.neoj"
],
"type": "olistitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "olist-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "A list of feeds the site follows (which may be split into two categoires, individual feeds and then neonet sites that are subscribed too)",
"type": "plain-text"
}
],
"template_list": [
"sections/olist-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "olist-item",
"template_list": [
"sections/olist-item/default.neoj"
],
"type": "olistitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "olist-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "A public key (from a public/private key-pair)",
"type": "plain-text"
}
],
"template_list": [
"sections/olist-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "olist-item",
"template_list": [
"sections/olist-item/default.neoj"
],
"type": "olistitem"
}
],
"end_section": {
"attrs": {},
"bound": "end",
"children": [
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "- Another aspect of this is the IDs for posts/elemnets/entires or whatever they\u0027re called in the Atom Feeds. The idea is that those IDs would be accompanied by a hash created by a sites private key that can then be confirmed by the public key.",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
},
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "- Worth pointing out here again is that my current guideline is that you make your site 100% public or 100% private. If it\u0027s public, all this info is available. If it\u0027s private none of it is.",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
},
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "- If you\u0027ve got stuff you want to follow but you don\u0027t want it to show up on the site people associate with you the idea is that you can make another site.",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
},
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "- In this way, sites become like accounts. You can have as many as you want to make.",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
},
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "- Thinking about spam for a second, I wonder if it\u0027s possible to do a bcrypt type of thing where the cost of genererating a hash for a post is non-trivial. With the power of computers today I\u0027m not sure that would have a chance of working, but it\u0027s worth looking into. The reaons is that IDs could be used for replies.",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
},
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "- The way replies would work is that anyone could post a replay to any post on their own site. The feed for that page/reply would include the full replay chain for all the posts it\u0027s in line with going back to the original. Because those IDs would be the same (and verifiable via the public key) they should be able to be linked up.",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
},
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "- This is where the aggregators come in. If we have https://neonet.neopoligen.com/ and you\u0027ve registered your site there it would periodically check all the feeds it\u0027s aware of (and we could even set up Neopoligen to ping it directly when updates happen). So, it would know all the posts on it\u0027s network that are replies to a post you made.",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
},
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "- Then when you open your Neopoligen instance it goes to https://neonet.neopoligen.com/ and pulls down replies for yours posts.",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
},
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "- How do we make that less intensive for the neonet.neopolige.com site?",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
},
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "- Every neopoligen site could be based off it\u0027s domain with a signed copy of they key. That way when neonet.neopoligen.com finds a post that\u0027s from one of your sites it can add it to the list for your sites. This would be served in a file like:",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
},
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "https://neonet.neopoligen.com/.well-known/neopoligen-replies/www.alanwsmith.com.json5",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
},
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "- Neopoligen would poll that .well-known location and all the IDs for posts that are in reply chains for your stuff would be in there.",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
},
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "- Your version of Neopoligen doesn\u0027t have to do anything with them. It doesn\u0027t even have to query the service. This is all optional.",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
},
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "- When I get to making the UI for creating a site this will be an explict decision to opt-in or opt-out of.",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
},
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "- You could also subscribe to multiple networks. So, in addition to neonet.neopoligen.com, you could also subscripte to neonet.alanwsmith.com and pick up the replies feeds from there.",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
},
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "- More importanly, you get to chose who you subscribe to. This allows for some a vetting/moderation point. For example, neonet.neopoligen.com could crawl as much of the internet as it can find and aggregate all of it.",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
},
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "- In contrast, my neonet.alanwsmith.com server would be something I curate to only pull sets of feeds for folks who have joined my network. (In this case, the idea is that I\u0027ve invited these folks to my network, but I don\u0027t necessarily follow them so they wouldn\u0027t show up in my folks-i-follow feed.",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
},
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "- If I\u0027m thinking about this right, we could use the neonet.example.com structure as a layer of moderation.",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
},
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "- Anyone at any point can reply to any public post, but if you\u0027re not subscribed to a neonet that watches their feeds it wouldn\u0027t show up in your replies.",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
},
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "- TBD with that on how reply chains would work. That is, if someone who isn\u0027t in your neonet replies to you and you don\u0027t see it, but then someone in your network replies to them what happens?",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
},
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "- The good news is that with this set up that decision becomes one that\u0027s in your control. Your configuration could be set up to show the post that\u0027s not on your network, hide it and give you a link to open it, or just ignore it completley. (though, from a UI perspective you\u0027d probably want to have at least some indication that there is a part of the reply chian you\u0027re not seeing.",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
},
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "- This also opens the way for block lists.",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
},
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "- Block lists can be configured in various ways:",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
}
],
"flags": [],
"kind": "olist-end",
"template_list": [
"sections/olist-end/default.neoj",
"sections/end/default.neoj"
],
"type": "end"
},
"flags": [],
"kind": "olist",
"template_list": [
"sections/olist/default.neoj"
],
"type": "olist"
},
{
"attrs": {},
"bound": "start",
"children": [
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "Block individuals",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "Block any individual that\u0027s part of a given neonet",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "and effectively any combination based of the data availabe.",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "Would need to figure out ways that could be attacked though (e.g. ways in which folks could try to fool your Neopoligen into blocking people you didn\u0027t mean to block). I\u0027ll need help from security folks in deciding what to do there.",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
}
],
"end_section": {
"attrs": {},
"bound": "end",
"children": [],
"flags": [],
"kind": "list-end",
"template_list": [
"sections/list-end/default.neoj",
"sections/end/default.neoj"
],
"type": "end"
},
"flags": [],
"kind": "list",
"template_list": [
"sections/list/default.neoj"
],
"type": "list"
},
{
"attrs": {},
"bound": "full",
"children": [
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "And, just to state it clearly: I want to provide as much control for folks over their interactions as possible.",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "There\u0027s another post that talks about the two layer connection between folks you follow and folks they follow but not moving beyond that. The stuff outlined here is an optional addition to that (and of course, you could replace it and only use the neonets and not the followers if you want to go that route.)",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "Oh, yeah, this same approach could be used for likes, follows, boosts, quoting, bookmarks, and whatever else as well. I\u0027m still thinking about what those categories should be but some version of them would be in the mix.",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "And, just to make it explicit, this would all be open-source in terms of the spec. So, there won\u0027t be a way for Neopoligen or any other company to pull things back into their systems in a way that prevents other folks from moving away from them.",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "Folks could also set up their own private neonets. Like a family could have one set up designed for limited connections. (e.g. you could control who\u0027s allowed on it and then set up Neopoligen to only have access to it. I\u0027m thiking here of parent controls.",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"attrs": {},
"flags": [],
"kind": "strong-shorthand",
"text": "a lot",
"type": "strong-shorthand"
},
{
"kind": "plain-text",
"text": " more thought needs to go into anything having to do with keeping things behind authentication/authorization. (note that I\u0027m not saying private, because I think when non-techies hear that they have a tendency to think it\u0027s something that can be enforced to a level that isn\u0027t technially possible (e.g. someone can always take a photo of a screen))",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "Related: need to do thinking about how feeds for protected content would work. Again, I think it would be a binary switch for the entire site. That would extend to the feeds. Lots more thinking and design to do there.",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "Oh, yeah. tags should be a thing too. Need to write up something about them. They could be added into the atom feeds in a custom field and then you could scan neonets for",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "Oh, yeah. Worth pointing out that not only are you in control of who you follow, you\u0027re in conrol of the way things are displayed. There will be algorithms built into Neopoligen itself along with controls to adjust them or to make your own. For example, you could split out your friends and make sure to always show the latest one from each of them regardless of the last time they posted and then split out the rest of your network chronologically.",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "Oh yeah, the neonets could do things like add counters for the numbers of boosts, likes, quotes, etc... to each post based off the data they have availbe.",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "It\u0027s worth noting that these numbers won\u0027t be guaranteed to be fully representative. For example, if you\u0027re following a server that tries to find everything globally but it missed some feeds those wouldn\u0027t be represented.",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "Something intersting about the numbers if that you could see what the numbers are for each network individually. E.g. the global neonet numbers are one thing, but if you\u0027re connected to something like a neonet for artists you\u0027d be able to see just the likes/boosts/etc... that happen on that server (aka in that community)",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "Worth pointing out that I\u0027m thinking of servers as a type of community. You can join as many or as few as you want.",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "The software to run a neonet will be open source as well, but separate from Neopoligen.",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "Thinking back to the server itself for a minute, there should be a space for the neonet communications in terms of incoming data to. Linkbacks, etc... are already a thing, but I don\u0027t know enough about the speicifcs of them yet.",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "I just realized that a key to all this working is the fact that even though Neopoligen produces static sites it\u0027s a full blown piece of software itself. So, it can be what sends the signals to neonets when updates happen (i.e. you don\u0027t need anything dynamic on the site server itself).",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "Since that signal will come from Neopoligen during a deploy the neonets will want to verify the content is actually live on the respective site/page prior to putting it in the feeds. (In theory you could push back to Neopoligen to verify, but that would cause a ton of traffic for viral posts that any given indivudal site might not be ready for. Better to keep that responsiblity on the neonet server.",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "A nice feature is that even if a neonet goes down you would still get feeds from indiviudal you subscribe to and other neonets",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "Yeah, I really like the idea of the neonet and the fact that you can still just run a static site but still join the network. This feels like something with real potential.",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "A specific thing to point out about this approach is that it offers resistance to enshittification. You maintain control of the feeds you subscribe to and how those feeds are displayed.",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "Also worth pointing out that this approach provides resistance against censorship while still providing for moderation. Or, more to the point, if you don\u0027t like the way a neonet is moderating their feeds (either on the leaving too much in or cutting too much out) you can leave it and join another neonet. But, the critical factor is that the neonets don\u0027t have power of the original content so they can\u0027t censor the source.",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "It\u0027s worth brining up the fact that folks will be able to do both nasty and illegal stuff with Neopoligen sites. That\u0027s no different than any other tool. The way I\u0027m thinking about it now, moderating content will be a requirement of the hosting provider (who may or may not have a corresponding neonet)",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "Something I need to investigate more is linking from neonets to content if someone sends in a link to something illegal. If the neonet acts as a content distribution network it would certinally need to add moderation to prevent distibuting illegal (or TOS violating) content",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "Hmmmm. the more I think about it, the more I think neonet.neopoligen.com will need to have content moderation at some point if it\u0027s to become the built-in default suggestion for getting started. Like, part of me would like to track the entire network, but like, that would let folks troll against popular material. (I\u0027m not thinking about harassment itself for this point, just folks posting illegal content). Yeah, there would totally have to be moderation of any feed that looks at the entire network. (NOTE TO SELF: go back and edit out anything where you talk about maybe not needing that).",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "The good news is that to start with neonet.neopoligen.com will be explicity moderated to folks that I know. That could change quickly though if things get going so I\u0027ll need to work out the details before launch. (There are services that offer content moderation. It\u0027s primarly a matter of buliding the functionality. TBD on the cost, but that\u0027s another thing that folks paying for hosting would be supporting. Probably worth making that explict when talking about the services that are provided)",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
},
{
"bound": "full",
"children": [
{
"children": [],
"kind": "list-item-paragraph",
"spans": [
{
"kind": "plain-text",
"text": "In theory you could do some push stuff from a neonet server to Neopoligen clients, but that\u0027s way down the road to even consider. Starting would just be the clients pulling from the server when the boot up and then again at polling intervals.",
"type": "plain-text"
}
],
"template_list": [
"sections/list-item-paragraph/default.neoj"
],
"type": "block"
}
],
"kind": "list-item",
"template_list": [
"sections/list-item/default.neoj"
],
"type": "listitem"
}
],
"end_section": null,
"flags": [],
"kind": "list",
"template_list": [
"sections/list/default.neoj"
],
"type": "list"
},
{
"attrs": {},
"bound": "full",
"children": [
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "- I\u0027d love it if neonets could be run without needing to be ad suppored. That should totally be possible for curated ones where there\u0027s a limited set of feeds that\u0027s followed, but one that searches globally would likely be non-trival to run in terms of cost and resources. Creating ad networks that respond to feeds would be a possibility there. That could create a game of leap frog like we have with ad networks now when it comes to blocking, but because everything has public/private keys available it would be easier to identify ad networks. And, if a neonet keeps trying to rotate ad network keys as a way to try to avoid detection you can just switch to another network.",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
},
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "My sincere hope is that neonets can be self funded. The biggest way I see this happening is by some number of folks who subscribe to it also using it to host their content at a level that they pay for. (In my vision of the world everyone has access to free sites but there would be services (like sending emails and hosting bigger/more files) that would be paid servies designed to keep the neonet in business without having to be ad supported.)",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
}
],
"end_section": null,
"flags": [],
"kind": "endnote",
"template_list": [
"sections/endnote/default.neoj",
"sections/basic/default.neoj"
],
"type": "basic"
},
{
"attrs": {
"title": [
{
"spans": [
{
"kind": "plain-text",
"text": "Atom Web Standard - Wikipedia",
"type": "plain-text"
}
],
"text": "Atom Web Standard - Wikipedia"
}
],
"url": [
{
"spans": [
{
"kind": "plain-text",
"text": "https://en.wikipedia.org/wiki/Atom_(web_standard)",
"type": "plain-text"
}
],
"text": "https://en.wikipedia.org/wiki/Atom_(web_standard)"
}
]
},
"bound": "full",
"children": [],
"end_section": null,
"flags": [],
"kind": "ref",
"template_list": [
"sections/ref/default.neoj",
"sections/basic/default.neoj"
],
"type": "basic"
},
{
"attrs": {
"title": [
{
"spans": [
{
"kind": "plain-text",
"text": "Well-Known URIs - Wikipedia",
"type": "plain-text"
}
],
"text": "Well-Known URIs - Wikipedia"
}
],
"url": [
{
"spans": [
{
"kind": "plain-text",
"text": "https://en.wikipedia.org/wiki/Well-known_URI",
"type": "plain-text"
}
],
"text": "https://en.wikipedia.org/wiki/Well-known_URI"
}
]
},
"bound": "full",
"children": [],
"end_section": null,
"flags": [],
"kind": "ref",
"template_list": [
"sections/ref/default.neoj",
"sections/basic/default.neoj"
],
"type": "basic"
},
{
"attrs": {
"title": [
{
"spans": [
{
"kind": "plain-text",
"text": "Web Linkbacks - Wikipedia",
"type": "plain-text"
}
],
"text": "Web Linkbacks - Wikipedia"
}
],
"url": [
{
"spans": [
{
"kind": "plain-text",
"text": "https://en.wikipedia.org/wiki/Linkback",
"type": "plain-text"
}
],
"text": "https://en.wikipedia.org/wiki/Linkback"
}
]
},
"bound": "full",
"children": [],
"end_section": null,
"flags": [],
"kind": "ref",
"template_list": [
"sections/ref/default.neoj",
"sections/basic/default.neoj"
],
"type": "basic"
},
{
"attrs": {
"title": [
{
"spans": [
{
"kind": "plain-text",
"text": "backfeed - indieweb.org",
"type": "plain-text"
}
],
"text": "backfeed - indieweb.org"
}
],
"url": [
{
"spans": [
{
"kind": "plain-text",
"text": "https://indieweb.org/backfeed",
"type": "plain-text"
}
],
"text": "https://indieweb.org/backfeed"
}
]
},
"bound": "full",
"children": [],
"end_section": null,
"flags": [],
"kind": "ref",
"template_list": [
"sections/ref/default.neoj",
"sections/basic/default.neoj"
],
"type": "basic"
},
{
"attrs": {
"title": [
{
"spans": [
{
"kind": "plain-text",
"text": "JSON5",
"type": "plain-text"
}
],
"text": "JSON5"
}
],
"url": [
{
"spans": [
{
"kind": "plain-text",
"text": "https://json5.org/",
"type": "plain-text"
}
],
"text": "https://json5.org/"
}
]
},
"bound": "full",
"children": [],
"end_section": null,
"flags": [],
"kind": "ref",
"template_list": [
"sections/ref/default.neoj",
"sections/basic/default.neoj"
],
"type": "basic"
},
{
"attrs": {},
"bound": "start",
"children": [
{
"children": [],
"kind": "paragraph",
"spans": [
{
"kind": "plain-text",
"text": "Starting to write down some thoughts on how a \"neonet\" could work to make a socal web of sites.",
"type": "plain-text"
}
],
"template_list": [
"sections/paragraph/default.neoj"
],
"type": "block"
}
],
"end_section": {
"attrs": {},
"bound": "end",
"children": [],
"flags": [],
"kind": "blurb-end",
"template_list": [
"sections/blurb-end/default.neoj",
"sections/end/default.neoj"
],
"type": "end"
},
"flags": [],
"kind": "blurb",
"template_list": [
"sections/blurb/default.neoj",
"sections/basic/default.neoj"
],
"type": "basic"
},
{
"attrs": {
"created": [
{
"spans": [
{
"kind": "plain-text",
"text": "2024-10-21T07:08:38-04:00",
"type": "plain-text"
}
],
"text": "2024-10-21T07:08:38-04:00"
}
],
"id": [
{
"spans": [
{
"kind": "plain-text",
"text": "2n/ke/xi/4b",
"type": "plain-text"
}
],
"text": "2n/ke/xi/4b"
}
],
"status": [
{
"spans": [
{
"kind": "plain-text",
"text": "scratch",
"type": "plain-text"
}
],
"text": "scratch"
}
],
"tag": [
{
"spans": [
{
"kind": "plain-text",
"text": "neo",
"type": "plain-text"
}
],
"text": "neo"
}
],
"type": [
{
"spans": [
{
"kind": "plain-text",
"text": "post",
"type": "plain-text"
}
],
"text": "post"
}
],
"updated": [
{
"spans": [
{
"kind": "plain-text",
"text": "2024-10-21T07:08:38-04:00",
"type": "plain-text"
}
],
"text": "2024-10-21T07:08:38-04:00"
}
]
},
"bound": "full",
"data": {},
"end_section": null,
"error": null,
"flags": [],
"kind": "page",
"template_list": [
"sections/page/default.neoj",
"sections/json5/default.neoj"
],
"type": "json5"
}
]