diff --git a/_includes/head.html b/_includes/head.html index d7abc3c..1991a27 100644 --- a/_includes/head.html +++ b/_includes/head.html @@ -49,20 +49,34 @@ {% if page.frame %} + {% if page.frame.image %} + + + {% endif %} {% if page.frame.button1 %} {% endif %} + {% if page.frame.button2 %} + + + + {% endif %} + {% if page.frame.button3 %} + + + + {% endif %} {% else %} - + - + diff --git a/_journals/2024-04-21_1024.md b/_journals/2024-04-21_1024.md index 741c3c1..5ca6d87 100644 --- a/_journals/2024-04-21_1024.md +++ b/_journals/2024-04-21_1024.md @@ -1,8 +1,8 @@ --- -title: "April 21st, 2024" -date: "2024-04-21, 10:24:06 -07:00" +title: April 21st, 2024 +date: 2024-04-21, 10:24:06 -07:00 section: journal -aliases: [] +excerpt: A log of some blog coding that I did, including more Frames support, canonical links, article and code filtered listing pages, and this excerpt field. --- Going through some open tabs and made a bunch of updates. Now took myself to the coffee shop to work on some blog coding. @@ -51,3 +51,19 @@ Oh fun, of course I have some people entries, and if I have their Github profile There aren't that many entries on here because I have more in the old Logseq notes with [github](https://notes.bmannconsulting.com/#/page/github) and [git](https://notes.bmannconsulting.com/#/page/git) properties. And separately, I'd like to capture my [1.4K starred repos on Github](https://github.com/bmann?tab=stars). The "signal" of me adding a notes page is stronger than "merely" starring on Github, but it should at least contribute to a personal search index (which again leads into [[Community Search Engines]] too). + +**Excerpt for Journals** + +This is a very long journal post! My RSS automated cross posting with [[Fedica]] would attempt to turn this into a very very long set of threaded posts. + +I'll add an excerpt field which will get used in the RSS feed if it excepts. + +```liquid +{% raw %} +{% if post.excerpt %} + {% assign description = post.excerpt %} +{% else %} + {% assign description = post.content %} +{% endif %} +{% endraw %} +``` diff --git a/_journals/2024-04-21_1252.md b/_journals/2024-04-21_1252.md new file mode 100644 index 0000000..3c1da81 --- /dev/null +++ b/_journals/2024-04-21_1252.md @@ -0,0 +1,12 @@ +--- +title: April 21st, 2024 +date: 2024-04-21, 12:52:09 -07:00 +section: journal +link: https://bmannconsulting.com/notes/bluesky-custom-feeds-for-premium-content/ +tags: + - Ghost + - ATProtocol +--- +I added a few notes to [[Feedback on Federating Ghost]] on how this could be done using [[ATProtocol]]. + +One idea I think is novel that I wrote up in more detail: [[Bluesky Custom Feeds for Premium Content]] \ No newline at end of file diff --git a/_layouts/note.html b/_layouts/note.html index 3e10d45..ea520f4 100644 --- a/_layouts/note.html +++ b/_layouts/note.html @@ -7,6 +7,8 @@ layout: default

{{ page.title }}

{% if page.link %} {{ page.link | remove: "https://" | truncate: 42 }}{% if page.author %}, by {{ page.author }}{% endif %}{% if page.published %}, {{ page.published | date: "%B %-d, %Y" }}{% endif %}
+ {% elsif page.wikipedia %} + wikipedia: {{ page.wikipedia | remove: "https://" | truncate: 42 }}
{% endif %} {% unless page.published %} diff --git a/_notes/Bluesky Custom Feeds for Premium Content.md b/_notes/Bluesky Custom Feeds for Premium Content.md new file mode 100644 index 0000000..edcd1d1 --- /dev/null +++ b/_notes/Bluesky Custom Feeds for Premium Content.md @@ -0,0 +1,26 @@ +--- +tags: + - ATProtocol + - premiumcontent +--- +[[Bluesky]] already has built in support for [[Bluesky#Custom Feeds|custom feeds]]. Could this be used to create premium content feeds? + +This could look like subscribers-only content, but available and readable directly within Bluesky or any [[ATProtocol]] that supports custom feeds. + +This is most relevant for a kind of ATProtocol-based "subscribe to my blog or newsletter" integration -- [[Substack]] or [[Ghost]] being two common paid subscriber platforms. + +I'll use Ghost as my example. + +- The "My Cool Ghost Site" has both free and paid memberships; some content is available to all members -- sent via email, in RSS, and posted to the blog +- Paid members get access to premium content -- they get it sent via email and/or can login to the Ghost blog to read it +- assuming Ghost / a custom plugin has a feature to link your Ghost membership with your Bluesky login +- The plugin would also generate endpoints for a Bluesky compatible custom feed +- The algorithm is pretty simple here -- if the currently logged in user is a paid member, show them free and premium content; else, only show free content + +Right now all content is public on Bluesky, so you could still fetch the content / navigate to it. In fact, can you generate posts in a custom feed??? Or does it first have to be posted to an account, so that it could be included? + +Maybe something with blocks? Have a free Bluesky account, `@my-cool-ghost-site.com`, and a premium one, `@members.my-cool-ghost-site.com`. When someone adds the custom feed, if they aren't a paid member, block them. + +Blocking everyone on Bluesky (pre-emptively!) except for subscribers is not really a great method. This is probably another area where a Lexicon that supports premium content could be used. + +And, this might just be way easier to implement by adding [[Open Frames for Bluesky]]. \ No newline at end of file diff --git a/_notes/Bluesky.md b/_notes/Bluesky.md index 1fba84e..067a6dd 100644 --- a/_notes/Bluesky.md +++ b/_notes/Bluesky.md @@ -5,10 +5,19 @@ tags: - ATProtocol link: https://blueskyweb.xyz --- -Website: > We‘re building the [AT Protocol](https://atproto.com/), a new foundation for public conversation and social networking which gives creators independence from platforms, developers the freedom to build, and users a choice in their experience. The company is a Public Benefit Corporation that created the [[ATProtocol]] and built and runs the [Bluesky microblogging platform](https://baky.app). -[[Tim Bray]] collected [Facts and opinions about Bluesky](https://www.tbray.org/ongoing/When/202x/2023/04/28/Bluesky) because so many people were hating on it, mostly with misinformation. \ No newline at end of file +[[Tim Bray]] collected [Facts and opinions about Bluesky](https://www.tbray.org/ongoing/When/202x/2023/04/28/Bluesky) because so many people were hating on it, mostly with misinformation. + +## Custom Feeds + +From the [docs](https://docs.bsky.app/docs/starter-templates/custom-feeds): + +> Custom feeds, or feed generators, are services that provide custom algorithms to users through the AT Protocol. This allows users to choose their own timelines, whether it's an algorithmic For You page or a feed of entirely cat photos. +> +> This is a starter kit for creating feed generators on atproto. It's not feature complete, but should give you a good starting ground off of which to build and deploy a feed. +> +> You can skip this tutorial and clone the TypeScript starter template directly [here](https://github.com/bluesky-social/feed-generator), or use community templates in [Python](https://github.com/MarshalX/bluesky-feed-generator) or [Ruby](https://github.com/mackuba/bluesky-feeds-rb). \ No newline at end of file diff --git a/_notes/Feedback on Federating Ghost.md b/_notes/Feedback on Federating Ghost.md index d95b7a3..e3d94e1 100644 --- a/_notes/Feedback on Federating Ghost.md +++ b/_notes/Feedback on Federating Ghost.md @@ -1,5 +1,8 @@ --- image: /assets/2024/ghost_logo_black.jpg +tags: + - Ghost + - ActivityPub --- A [survey](https://tally.so/r/m67X4P) asking for feedback on Federating [[Ghost]] @@ -37,9 +40,18 @@ The [[Threadiverse]] is the name for Reddit-style top posts plus comments. This I would interact with more Ghost sites in the "comments" if I didn't have to create new accounts all the time! I already recommend [[Ghost]] and could now consider using it for use cases that look more like community servers use cases. - ---- +# Updates I linked to [[2024-04-21_0804|Matthew Bogart's write up answering this survey]]. +## Ghost + Bluesky's ATProtocol + +I guess John O'Nolan has a cross poster, since he [posted the same thing to Bluesky](https://bsky.app/profile/bmann.ca/post/3kqlzleitr223). Would my answer be different for [[ATProtocol]]? + +I'd like to see [[Bluesky]] support a blog Lexicon with full posts. + +Login linking would be similar. + +Could you make a custom feed for premium content??? I think so, and I think it's worth a write up: [[Bluesky Custom Feeds for Premium Content]] + diff --git a/_notes/Open Frames for Bluesky.md b/_notes/Open Frames for Bluesky.md new file mode 100644 index 0000000..0351560 --- /dev/null +++ b/_notes/Open Frames for Bluesky.md @@ -0,0 +1,5 @@ +Supporting [[Open Frames]] in Bluesky + +## Proof of Concept + +Pick an existing open source web client and add in rendering support for Open Frames. \ No newline at end of file diff --git a/_notes/Substack.md b/_notes/Substack.md new file mode 100644 index 0000000..e3693f7 --- /dev/null +++ b/_notes/Substack.md @@ -0,0 +1,14 @@ +--- +wikipedia: https://en.wikipedia.org/wiki/Substack +tags: + - organization + - platform + - newsletter +--- +> Substack is an American online platform that provides publishing, payment, analytics, and design infrastructure to support subscription newsletters. It allows writers to send digital newsletters directly to subscribers. Founded in 2017, Substack is headquartered in San Francisco. + +## Alternatives + +If you must use Substack, at least map a domain to it. + +But really, just don't use it. Use [[Ghost]] as the most direct replacement. \ No newline at end of file diff --git a/fedica-hashtags.xml b/fedica-hashtags.xml index 8a89784..23ed6ef 100644 --- a/fedica-hashtags.xml +++ b/fedica-hashtags.xml @@ -18,7 +18,12 @@ Boris Mann {% comment %} Capture: we loop through all of the tags and make a list of hashtags separated by spaces {% endcomment %} {% capture taglist %}{% for tag in post.tags %} #{{ tag }}{% endfor %}{% endcapture %} - {% assign description = post.content | append: taglist %} + {% if post.excerpt %} + {% assign description = post.excerpt %} + {% else %} + {% assign description = post.content %} + {% endif %} + {% assign description = description | append: taglist %} {{ description | xml_escape | replace: 'src="/', 'src="https://bmannconsulting.com/' | replace: 'href="/', 'href="https://bmannconsulting.com/' }} {% if post.link %} {{ post.link | xml_escape }} diff --git a/journal.xml b/journal.xml index 228f0e9..0dec48f 100644 --- a/journal.xml +++ b/journal.xml @@ -16,7 +16,12 @@ {% for post in sortedblog limit:20 %} {{ site.name | xml_escape }} - {{ post.content | xml_escape | replace: 'src="/', 'src="https://bmannconsulting.com/' | replace: 'href="/', 'href="https://bmannconsulting.com/' }} + {% if post.excerpt %} + {% assign description = post.excerpt %} + {% else %} + {% assign description = post.content %} + {% endif %} + {{ description | xml_escape | replace: 'src="/', 'src="https://bmannconsulting.com/' | replace: 'href="/', 'href="https://bmannconsulting.com/' }} {% if post.link %} {{ post.link | xml_escape }} {% else %}