Eddie Hinkle


Added Locally Stored Webmentions

The main part of my newwwyear 2019 goal is storing webmentions locally and displaying them on my website again, as well as adding moderation support.

It's coming along nicely. So far, I've imported all existing webmentions from webmention.io and stored them locally alongside my post storage. So if my post is stored in /2018/11/15/5/post.md then my webmentions would be stored in /2018/11/15/5/mentions/ each webmention is stored as a .json file with the source url being the filename. This allows for one webmention per file and if I want to load all the webmentions for a specific post, I just open up all the files in the mentions directory. So far, I'm really liking this and how well it's working.

If it's a homepage mention, it will save the webmention in /mentions/homepage/ and if it's not a known post, right now it will collect the webmention in /mentions/unknown. Again, all of these webmentions are stored as individual files. If I recieve an updated webmention, it overwrites the file, so I get the updated information.

Besides just downloading all existing webmentions, I have also added support so that when webmention.io receives a new webmention, it pings my server and my server will go ahead and download that webmention and save it locally. This means that I am now only relying on webmention.io to deliver my webmentions, not for any long-term storage.

Finally, I've added support for displaying webmentions on post pages. I used to have this when my website was powered by Jekyll, but when I moved to a dynamic website, I didn't bother adding that functionality back until I could do it the way I wanted it. Now that I have my local storage I was able to go back to displaying them. Below is a screenshot of the webmention displays on one of my posts:

I'm still trying to tweak exactly how I want things, but I am pretty happy with things for a first pass. I am avoiding "metrics numbers" so instead of display any totals, I am trying to just display the content. Instead of showing 5 "likes" I would just display 5 👍 and of course each reacji will display on it's own as well.

Displaying Responses on Feeds

I am not currently displaying mentions for posts when they display on feed pages. I am thinking I might just display a row of emoji representing that last 10 responses. If they are reacji, it would display the reacji, for the rest I would translate the response types to the following emojis: likes 👍, replies 💬, repost ♻️, bookmark 🔖 , listen 🎧, mentions 💭. It would show a recent snapshot of activity on a post without giving in to numbers.

Moderating Webmentions

I also am not doing any moderation of posts currently, every webmention automatically gets added and displayed. I can delete a webmention, of course, but there are protections against spam appearing until I delete it. I outlined how I want to deal with moderation, the 2nd level connections are going to be a bit tricky so my goal is to first just start with immediate connections as always accepted, others unlisted until I moderate. Then I'll need to create a mute/block list and have incoming webmentions check that list and respond appropriately.

Receiving Webmention Deletes

Finally, if someone sends a webmention delete (a HTTP 410 Gone response from a webmention source url) right now I don't think my website will do anything, in fact, I don't even know if webmention.io supports them. I would like to be able to accept and process webmention deletes. My plan is not to actually erase a webmention that is "deleted" but instead, to set the visibility to private. I can of course, manually delete any private webmentions that I don't want any more.

Added new nickname and micropub cache support

As I mentioned in my newwwyears goals, I wanted to fill out my nickname cache by replacing the random yaml document with a directory of JSON Microformats h-card files. I also mentioned that I wanted to implement adding entries to my nickname cache by utilizing Micropub as I mentioned in my previous post about Following in the IndieWeb.

Today, I've rolled out all of these changes on my website. I also altered the way my audience parameter works. Previously it embedded h-cards within each post with an audience. Now, all audience and person-tag h-cards are stored in my nickname cache first, and then I just put the h-card's uid within the audience array. This change was suggested by Sven in the IndieWeb chat and it was a smart move so I decided to go with that approach.

All in all, I'm very happy with how this turned out. I already added an h-card for a previous post's audience over Micropub and then added that url to the post so that it displays. It worked great! I also added support for retrieving a list of h-cards from the nickname cache by sending a GET request to my Micropub endpoint with ?q=contacts.

This will allow me to build into my Micropub client a request to fetch my nicknames cache and display it to the user. The user will then allow me to select which cards I'd like to attach to a post's audience. The uids of those cards would then be added to the audience of the Micropub post. Feels like a pretty seamless experience to add audiences to my posts which is important because in the future I'll be utilizing audiences more as I begin to add support to my site for private posts.

I just added the ability to add audience to my posts. For public posts It adds a small description at the top of the post defining who the audience of the post is. For example, I have a reply I wrote for an online class. In the future, it will control who can see a private post.
I just added support for the Micropub Category List query to my website. Looking forward to adding support to Indigenous for iOS in the near future as well. This is the first of many goals completed for #newwwyear 2019.
I posted my #newwwyear 2019 #indieweb goals, it’s quite ambitious. But if I complete all of them, my bonus goal is getting some movement on tracking my books and reading in my website. https://eddiehinkle.com/2018/11/15/5/article/

My newwwyear 2019 goals

Last year, I posted my newwwyear goal and I decided to follow along with the rest of the IndieWeb commitments and make #newwwyear 2019 goals!

I took a look at my IndieWeb goals and made a list of the things I want to have live on my website by January 1, 2019.


I used to display webmentions my posts received on the previous Jekyll incarnation of my website, but now that I've shifted my website to being dynamically rendered, I haven't rebuilt the webmention display code. I'd like to finish that.

  • I want to import all existing webmentions I've received to date and store them as JSON files in my post storage folders alongside my posts.

  • I also want to make sure that whenever my site receives a webmention that I immediately add that new webmention to the JSON files in my post storage folders.

  • Finally, I want to display webmentions on post pages. I'm not sure if I'll include them on feed pages or not.

Other goals


If I am able to actually complete all the above goals, I'm going to shift my focus to owning my reading and figuring out if i can leave Goodreads behind.

Adding weather to my site

I made a goal of adding weather to my site by January 1st, 2018. Today, I'm happy to announce that I completed that goal. Here's what it looks like:

Whenever my site receives a new Micropub post, it does a list of things. Two things that are important for this discussion. First, it pings my Compass server for my current location at the time connected with the post. Second, it uses the Dark Sky API to using the time of the post and my location at that time to get the weather information associated with that time and location and stores it with my post.

On each post page, in the meta data section, I show the weather information from the post. I list the "Feels like" temperature in Fahrenheit along with a weather emoji that shows the weather conditions. Most of the emoji's are what you would expect: ☀️ when it's a clear day, A ❄️ when it's snowing, ☁️ for cloudy and ⛅️ for partly sunny. However, using Dark Sky's weather information, I also have the current phase of the moon in each weather post. This allowed me to do something really fun! If the weather conditions are either clear night or partly cloudy night, when I have the phase of the moon, I replace the generic moon emoji 🌙 with the emoji representing the current phase of the moon. For example, here's a post when the moon was a waxing gibbous:

That felt like a really nice added touch. Dark Sky also provides some more in-depth summary of the weather so I added this as a tooltip when your mouse hovers over the icon:

All in all it didn't take incredibly long to build out and I feel like it adds some real depth to certain photos. Here's to adding more exciting features to my site in 2018!

p.s. part of my New Years goal was to add Xray parsing to my site. It turns out I had already done that and had forgotten. So that part was already complete.

18.13 ℉🌔Frederick, Marylandindiewebindieweb-goals
posted using quill.p3k.io
This is awesome! I have on my list the goal of enabling webmentions from my Jekyll site. I currently have a backend server that handles Micropub and rebuilds my Jekyll instance on the fly when I send a slash command from my private slack channel. My backend is Node.js using express, so I’m excited to take a closer look at what you’ve done!
19.7 ℉❄️Frederick, Marylandindiewebindieweb-goals
posted using quill.p3k.io
My newwwyear goal is to add the current weather based on my current location to all of my posts and to have better post context (likes, replies, bookmarks, etc) based on using my local copy of XRay to parse for information.
↪ In Reply To: [object Object]
Awesome! I don’t know if I’ll be able to finish that feature in my Micropub endpoint soon enough to include it as part of my newwwyear goal, but it’s definitely up there on my list!

Further thoughts the future of owning my reading

As I’ve been doing my 100 Day of Reading Chapters challenge I’ve been thinking about my use of Goodreads and the various functions I use it for:

  • Adding books I want to read.
  • Prioritizing the next books I’m interested in. Typically these are rated as: “Next, High, Medium, Low, Someday”.
  • Adding topical tags to a book so I can find a book I want to read based on topic.
  • Track which books I’m currently reading and how far through them I am. Currently Goodreads allows pages or %, I’m interested in seeing if there is a way I can do pages, location (for e-books) and time (for audiobooks).
  • Post quotes and thoughts to share as I read through a book
  • Track when I have finished a book and how many times I’ve read it.
  • Track total pages read in year.
  • Track total books read in a year.
  • Track average pages per book in a year.
  • Shortest book read in a year.
  • Longest book read in a year.
  • Post ratings and reviews per book read
  • Create an annual reading challenge (example: 50 books in 2016), and watching the graph and visual bookshelf of how far through the challenge I am and what books I read to complete the challenge.

I want to be able to do all of that on my website. It’s a tall order and will take some time, but ultimately it will be great to have completed over time. As I continue to move towards owning all of my reading, it’ll be important that I find ways to do these goals on my website. It might not be the same as it is in Goodreads, in fact, hopefully it’s better and more tailored to my purposes.

Owning my Reading and 100 Days of Reading Chapters

One of my goals in 2018 is to own my reading data rather than using Goodreads for all of that information. This will allow me to track information the way I want rather than have to do it like Goodreads wants me to.

My eventual goal is to have something like what Xavier made, but for now I’m going to start simple. I’ll be doing 100 Days of Reading Chapters where I read a chapter of a book every day for 100 Days, and I will post manual read posts to my website while I understand what I need from read posts.

After that, I will look at what I’ve done over the 100 Days and attempt to automate the process a little more so I can begin tracking metrics on the data.

If you want to see how it's been progressing, you can check it out here

That’s awesome! Goodreads is definitely a silo-quit goal for me in 2018.
Please note: This site is in an active redesign. Some things might be a little off 🧐