Thanks to everyone in the IndieWeb chat for their feedback and suggestions. Please drop me a note if there are any changes you’d like to see for this audio edition!
Thanks to everyone in the IndieWeb chat for their feedback and suggestions. Please drop me a note if there are any changes you’d like to see for this audio edition!
Here are some notes from the "broadcast" portion of the meetup:
jonathanprozzi.net – Talked about his recent experiments with Netlify and JAMstack. Had been researching static site hosting services for a while and found a lot of hype. After playing w/ Netlify he feels like it lives up to the hype! Was specifically interested in a static site generator called Gatsby, which uses the React front-end framework to render content.
derekfields.is – Been building a blog section for his site on a static site generator called Hexo. Found the theming stuff to be confusing and time-consuming, but has something working. Will eventually replace the theme with his own as he understands it more. Really likes the Hexo admin composer and compared with the editor for Ghost. Feels like the features help him write. Also setting up a Now.sh tiny server for a subdomain to host VueJS apps.
brksavage.com – Set a goal to do something creative and post about it every month. Did a big project for February (created a desk-sized piece filled w/ the word "bored"). Now writing it up and thinking about ways to make it easier to publish in the future.
www.dariusmccoy.com – Still building up momentum on his Wordpress site. Had a scare that he was locked out of his admin but got back in. Now that he has a working site, he is setting goals for himself about what he wants that site to have and how he wants to present himself there.
Robert (gnostech.net) – Working on owning his data. Has a Nextcloud service set up on his domain, where he can access all his data from his phone and more. Has been taking lots of notes about his home set up (Nextcloud, Let's Encrypt, ad filtering firewall at home, and more). Wants to build a blog to share both how-tos on what he has set up and how, but also the way he decided on his particular needs. Has been using NAS4Free to have more control over his home network storage.
martymcgui.re – Is finally back after missing several HWCs. He has definitely missed them! Talked about the need for indie readers that allow reading and posting reactions to personal sites all in one. Demo'd Together, and MonocleMicrosub clients as well as Aperture for Microsub server to handle all the nitty-gritty of fetching and parsing feeds.
Other discussion:
Derek started us off with a really nice warm-up. We took turns with each person sharing compliments/thanks/encouragement about things people are working on and/or doing for and/or learning from one another. (This was seriously really nice).
JAMstack (Javascript, APIs, Markup). Name was coined because some "static" sites have lots of dynamic functionality.
Jonathan gave a demo of Netlify serving pages from a GitHub repo. Talked about how lots of different workflows can be used to manage content (e.g. Ghost, Netlify CMS, etc) without worrying about the final step of compiling the source into HTML and serving those static pages. Netlify has tons of features in the free tier (SSL with Let's Encrypt, support for forms, and more).
Q: How do they make money? A: Great question! They're advertised all over the place in the web design world. Maybe consulting? For example, they did a huge redesign for Smashing Magazine.
Q: Do we have to use GitHub? A: That's all Jonathan has played with so far, but they probably support other source control services.
Q: What content goes in the Git repo? A: The source content, templates, etc. E.g. the output of "hexo init".
Q: How does the DNS setup work? A: Netlify gives you IP addresses and you point A records at them. Same way you would for a Digital Ocean droplet or other virtual server.
With custom domains, pulling content from GitHub, and tools like the (also free) Netlify CMS that ease editing, this could be a strong competitor for e.g. Wordpress.com sites, barring some initial setup pain.
Was able to replace FormSpree service with Netlify's free form handling service. He can see the submitted form data by logging into his Netlify account.
Thanks to everyone in the IndieWeb chat for their feedback and suggestions. Please drop me a note if there are any changes you’d like to see for this audio edition!
I really enjoyed this pilot episode! I was particularly interested in some of the discussion around annotations for audio. I think I’ll spend some time noodling on using Jon Udell’s clipping tool to generate shareable snippet URLs, and updating my webmention handling to try and turn mentions with media fragment timestamps into pretty annotations.
http://storage.weneca.com/Indieweb/Indieweb0.mp3This is a test episode of An Indieweb Podcast(working title). In it, Chris Aldrich and I talk about a variety of Indieweb topics, with the theme of Considering the User, inspired by an article we were reading.
Thanks to everyone in the IndieWeb chat for their feedback and suggestions. Please drop me a note if there are any changes you’d like to see for this audio edition!
OwnYourGram periodically checks our Instagram for new images
For each new post, it makes a Micropub request to a service that I wrote for this purpose.
The endpoint accepts the image files and uploads them to our site using the Neocities API. Then it creates some new HTML from the micropub post data, edits the site's main index.html page to include the content, then uploads it back to Neocities.
Authorization with IndieAuth
One missing step in that rough outline is the bit where we tell OwnYourGram *how* to post to our site via Micropub, as well as making sure that OwnYourGram can prove that we have given it permission to post there. Many Micropub clients support IndieAuth as a way to do this permission-granting step (known as authorization). With a typical personal website, I'd delegate this process to indieauth.com, which lets you offload the step of "proving" that you own the website where you're trying to post by instead letting you log into an existing social network account.
ghostparty.today is a shared website, so I thought a simpler way to approach this would be to create a custom authorization endpoint that accepts a password. I could give this password to other GHOST PARTY folks and they can post whatever they like.
Some nice folks in the IndieWeb community had already created an authorization endpoint that works this way, called selfauth. I created a pretty simplistic port of selfauth from PHP to JavaScript using NodeJS on the awesome Glitch social code hosting platform. It needs some more robust error checking, and some micropub clients seem to have trouble with it, but it works with OwnYourGram and Quill, so it's Good Enough for now!
Finally, there's the Micropub endpoint itself. I based mine off of this Glitch micropub project, created by Adam Bachman at IndieWebCamp Baltimore this year. Specfically, I took the bits that verify the access token. From there, it was a matter of stumbling through various bits of handling a Micropub post, pulling in extra libraries as I needed them. I slowly added support for saving uploaded files to our Neocities site via the Neocities API, then for generating an HTML snippet for the new post, and finally for adding the post to the site's main page.
The process for adding the generated post content to the site itself is extremely retro. The Micropub endpoint actually downloads the HTML from https://ghostparty.today/index.html. Inside there is a comment that looks like:
<!-- NEW POSTS BELOW -->
So the new contents for index.html is everything before the comment, the comment, the new content, and then everything after the comment. Once that's constructed, the endpoint uploads index.html back to Neocities with the new contents.
It should be possible to fork the project on Glitch and configure it to work with your own Neocities site! You'll need to use cURL with the Neocities API to generate an authorization token to configure the app, rather than saving username and password info in the project!
Making ghostparty.today "IndieWeb-Readable"
The GHOST PARTY site follows an extremely old-school publishing model where each post only exists as a small section of HTML on a single long page. This complicates things a bit because interacting with posts on the IndieWeb typically requires three things:
A machine-readable "identity" h-card that says "who" this website is, including a logo, the site name, canonical URL.
A machine-readable feed that contains new posts, allowing people to follow our updates in their favorite indie reader.
A separate permalink URL for each post, containing machine-readable info about that post, allowing other IndieWeb sites to "understand" the content when they want to RSVP to events, repost or like photos, and more.
Microformats2 parsers like X-Ray do a great job at parsing HTML page into meaningful data, but the programs that use the parsed data usually stop at the first thing they find. So, if I ask X-Ray to parse https://ghostparty.today/, this is what it sees:
This is great in that it contains the "identity" information that we want the page to have. However, that page also has a feed! How can I get at that? By telling X-Ray to only look at a fragment of the page! Here's how X-Ray sees https://ghostparty.today/#feed:Â
Data! Nice! So if we want to follow ghostparty.today with an indie reader, we use https://ghostparty.today/#feed as the URL.
Looking at the content of the feed, you'll notice that the individual items have a url property which also has a fragment ID in the URL. This allows IndieWeb sites to interact with a particular post, even though it's one of many on the same page. For example, I was able to create an RSVP post to the most recent Ghost Party show, and (by looking just at the content in the fragment at https://ghostparty.today/#show-2018-02-14) my site was able to pick up the machine-readable details about the event to display them on my own site.
The microformats markup for the h-card and h-feed are built into the index.html file itself and don't change very often. However, for each new micropub post we need to convert those properties into a chunk of HTML for the index.html page that also contains the microformats h-entry markup. To do this, I made this Handlebars template:
Includes details on using cURL to get an authorization token.
There’s a Node module for the Neocities API, but it uses username and passwords, so I just used regular HTTP requests to handle talking to Neocities.