IndieWeb Summit: June 4, 2016!

like

like is a popular webaction button and in some cases post type on various silos such as Facebook and Instagram (uses a heart ♥). It is similar to but different from a favorite.

How

mark up and post a like

To post a "like", the post's h-entry MUST hyperlink to the permalink of the thing that is being liked, with class="u-like-of". E.g.

<span class="h-entry"> ... 
 <a class="u-like-of" href="http://someothersite.example.com/permalink47">...</a>
</span>

Demonstrates an h-entry for a "like" of http://someothersite.example.com/permalink47.

The trailing preposition "of" helps communicate this in the same that we have u-in-reply-to instead of u-reply.

receive and markup incoming likes

Likes are received in exactly the same way comments are, by accepting incoming webmentions to URLs on your site. When validating the webmention source, check for a h-entry with a like-of property pointing to the target URL (your URL). If there is one, that h-entry is a like of your page! Store it however you wish, and optionally display it on the liked page.

Likes are commonly displayed either as a facepile, separate from any other comments/responses (example), or inline with other responses (example).

Likes are marked up similarly to other responses. Here’s an example h-entry with a like:

<article class="h-entry">
  <a class="p-author h-card" href="http://waterpigs.co.uk">Barnaby Walters</a>
  <div class="e-content">This is a note. I make lots of them.</div>
  
  <article class="p-like h-cite">
    <a class="p-author h-card" href="http://cb.example.com">Example Liker CB</a> liked this 
    on <a class="u-url" href="http://cb.example.com/like47">
      <time class="dt-published">2014-05-18</time></a> 
  </article>
</article>

Note: a <a class="u-like-of" href=""></a> inside the h-cite is unnecessary, since the h-cite itself is on a u-like property inside the h-entry.

POSSE a like

If you're POSSEing a like of a silo post to the silo itself, use Bridgy Publish to do so (e.g. Twitter), call the silo API directly from your site (e.g. Flickr), or do so manually (e.g. Facebook).

If you're POSSEing a like of a post on an indie web site that only supports comments, you can do so by POSSEing the plain-text equivalent of your like post (with a permalink to your original like post) as a comment directly on said indieweb site.

"Name likes this post. (Originally liked at Permalink)"

Examples:

  • ... none so far

IndieWeb Examples

Examples in the wild of indieweb creators publishing likes. Add yourself!


Ryan Barrett

Ryan Barrett posts likes on snarfed.org since 2014-02-04, e.g.

Here's the bookmarklet/plugin and Android setup he uses to indie like (and reply, retweet, etc) with minimal friction on both web and mobile.

Barnaby Walters

Barnaby Walters posts likes on waterpigs.co.uk since ????-??-??, e.g.

  •  ???? - permalink to Barnaby's first indie like
    • is a like of: ???

Kyle Mahan

Kyle Mahan posts likes on kylewm.com since 2014-03-13, e.g.,

Kartik Prabhu

Kartik Prabhu posts likes on kartikprabhu.com since 2014-07-09, e.g.

Acegiak

User:Acegiak.net Acegiak posts likes on acegiak.net since at least 2014-03-27. Acegiak's posts may have multiple verbs for a single piece of content.

Aaron Parecki

Aaron Parecki posts likes on aaronparecki.com/likes since 2014-12-26. E.g.

Tantek

Tantek Çelik posts likes on tantek.com since 2014-12-31. E.g.

gRegor Morrill

gRegor Morrill manually posts likes on gregorlove.com since 2016-05-10.

Services Examples

Brid.gy

As of the end of 2013, Bridgy now sends webmentions for Facebook and Twitter likes, Twitter favorites, and Google+ +1s. It publishes u-like-of markup.

(need an early permalink!)

Contents


Silo Examples

500px

500px uses a Like button with a thumbs up (👍) icon. E.g. on http://500px.com/photo/79538847/lifeguard-cottages-cuckmere-haven-by-al-power

Facebook

Facebook popularized like as a verb and "likes" as an indicator on posts, originally with a thumbs-up icon 👍 as a visual affordance on "like" buttons (use of 👍 retired 2013-11-07[1][2]). Examples:

FB like permalink

Here is an individual like post (linked from /username/allactivity) https://www.facebook.com/tantek.celik/posts/10100983037811143:0 (should be viewable without login). For likes of pages and maybe other objects, it's rendered like this:
Tantek Çelik likes Indie Web Camp.
March 19 · 🌎
Indie Web Camp
Community

110 Likes
1 talking about this
where person-icon and name is linked to profile, object of like is linked to object's page, date is linked to permalink, and below that a link-preview is shown for the page being liked.

For posts, the post is rendered with a small "X likes this" tag at the top:

fb like post.png

FB likes in allactivity

Like posts in-stream appear much more succinctly. Examples in the /username/allactivity stream:

  • 👍 Tantek Çelik likes Indie Web Camp.
    March 19
    with a small link-preview of the liked thing to the right of that. The user's name is linked to their profile, and the name of the thing liked is linked to it. The date/time e.g. "March 19th" is invisible at first and shows only upon hovering over the entry, at which point it appears and is linked to the like post permalink.
  • A like of an album with multiple photos. Relevant when designing UIs for collapsing multiple separate photo likes. This is technically a different thing - one like of an album - but the display considerations are similar.

facebook like photo album.png

FB likes in right sidebar

In the right-side notifications stream:
Tantek Çelik likes
Indie Web Camp.
Tantek Çelik likes
Jane Smith's photo.
Tantek Çelik likes
John Smith's post.
Hovering over these in-stream like posts shows a pop-up to the left with the liked post/thing, including content, comments, and buttons/actions to interact with it.

likes vs liked

Facebook explicitly uses the present tense verb "likes" whereas others (e.g. notification#Platform_Examples, Instagram) use the past tense "liked".

  • The use of the present tense "likes" term is an odd inconsistency even with other items in Facebook's right sidebar stream which use past tense verbs: "commented", "took [a photo]", "added [n new photos]", "shared [user's video]", "shared [a link]". Unlikely that's a mistake, likely there was a deliberate reason for "likes" instead of "liked".
  • Possible explanation: maybe to imply "still likes it" instead of "liked this in the past". Thus perhaps focusing on the emotional state (present, likes), rather than the action ("liked").

FriendFeed

FriendFeed first introduced the like button on 2007-10-30[3][4] as a simple light blue-gray text link: Like and a smiley face for the summary display of likes:
Post summary with Comment and Like links
Note the use of a short list of up to three likers by text name, and "and N other people like this", a precursor to modern facepile display techniques.

Instagram

Instagram also uses like in their UI, but gives it a heart icon.

Instagram followings activity

Instagram's UI has a heart inside a talk bubble icon button at the bottom, which when clicked, presents recent activity (likes, comments, following, person-taggings) of you and your posts (photos, videos). If you then tap the "FOLLOWING" tab at the top, it shows similar activity by and for those you follow (for the most part that is, it doesn't show you when people follow the people you are following).

What's particularly interesting is their approach to like clustering, which we can learn from:

2015-023-instagram-like-clustering.jpg

Twitter

Since 2015-11-03 Twitter has started using a heart symbol and "like" as a replacement for their previous star and "favorite" terminology.

Variants

Some sites have a feature similar to likes but called something else.

We Heart It

We Heart It uses the text word "heart" as a verb and "hearted" as a past tense indicator.

500px

500px has a heart button (with white heart icon on red background ) in addition to and right next to a Like button: E.g. on http://500px.com/photo/79538847/lifeguard-cottages-cuckmere-haven-by-al-power?from=user

Icon considerations

Star vs Heart

For a couple years, registered Airbnb users have been able to star the properties they browse, and save them to a list. But Gebbia’s team wondered whether just a few tweaks here and there could change engagement, so they changed that star to a heart. To their surprise, engagement went up by a whopping 30%.[5]
Emphasis added.

Brainstorming

notification first design

Seems sensible to start with a notification first design of what a like post could look like. Some ideas, based on research on notification examples. Assumptions:

  • Notifications may have only one "action" upon activation, which can be assumed to activate a link or a the equivalent thereof. For posts, they would activate permalinks (thus no reason to include them explicitly).
  • Notifications have an implication of being (semi-)realtime, and show when they were received, which is close enough to a published date as to not need an explicit published date.

Using "likes" explicitly instead of "liked" for the same (apparent) reason the Facebook examples do.

Liking an indieweb post:

  • likes Aaron Parecki's post.
  • likes Aaron Parecki's note/reply/checkin/RSVP.
  • likes Aaron Parecki's article "A Little Twitter Developer History".

Liking a tweet:

  • likes @aaronpk's tweet.

Liking an Instagram photo:

  • likes aaronpk's photo.

Sequential likes can be clustered for more efficient presentation:

  • likes @aaronpk's tweet and Aaron Parecki's post.
  • likes aaronpk's photo, @aaronpk's tweet, and Aaron Parecki's post.

Another additional clustering can be done in some cases with authorship knowledge. E.g. with a nicknames cache that helped determined that those liked posts were all created by the same person, the likes could be clustered further:

  • likes Aaron Parecki's photo, tweet, and post.


In the simpler case of adjacent likes of the same URL person(source)'s things, they can be clustered purely by inspection (without lookup or referencing a nicknames sidetable), e.g. from:

  • likes NovemberProjectSF’s photo, NovemberProjectSF’s photo, NovemberProjectSF’s photo, NovemberProjectSF’s photo, NovemberProjectSF’s photo, NovemberProjectSF’s photo, NovemberProjectSF’s photo, NovemberProjectSF's photo album “NPSF: Our Year in Photos”, NovemberProjectSF’s post, and NovemberProjectSF’s photo.

To omitting their name from immediately subsequent likes:

  • likes NovemberProjectSF’s photo, photo, photo, photo, photo, photo, photo, photo album “NPSF: Our Year in Photos”, post, and photo.

However, a series of "photo, photo, photo" looks nonsensical and robotic, and thus we should simplify that too. Sets of consecutive items of the same type from the same source can be clustered with a leading count:

  • likes 7 of NovemberProjectSF’s photos, photo album “NPSF: Our Year in Photos”, post, and photo.


text only design

Going from a notification first design to a text only design, we must:

  • drop the expectation of a primary activation action

However, these days, most text-only conduits/presentations also auto-link, thus providing URLs in the text provides user-activation options, buttons/actions/navigation of a sort.

  • drop the expectation of realtime, as the text may go through any number of text-like conduits such as IM, IRC, Email, SMS, Twitter delayed much after the post time.

Thus it makes sense to add any links inline, and an explicit date and time of publication.

Liking an indieweb post:

  • likes Aaron Parecki's post http... . 21:00 on 2014-12-27
  • likes Aaron Parecki's note/reply/checkin/RSVP http... . 22:00 on 2014-12-27
  • likes Aaron Parecki's article "A Little Twitter Developer History" http... . 23:00 on 2014-12-27

Liking a tweet:

  • likes @aaronpk's tweet http... . 23:30 on 2014-12-27

Liking an Instagram photo:

  • likes aaronpk's photo http... . 23:30 on 2014-12-27

Note: "HH:MM on YYYY-MM-DD" is used instead of "YYYY-MM-DD at HH:MM" because the HH:MM more often than not tends to be a more distinguishing aspect of the datetime stamp than the date, especially when clustered or placed in list form.

Previously: "YYYY-MM-DD at HH:MM" with " at " date/time delimiter is used instead of just "YYYY-MM-DD HH:MM" for better readability. Also, this explicit use of " at " is based on the prior art (design) of Facebook using phrasing like "January 5 at 9:30am" for datetime permalinks on profile posts.

Sequential likes on the same day can be clustered for more efficient presentation:

  • likes @aaronpk's tweet http... at 23:30 and Aaron Parecki's post http... at 21:00 on 2014-12-27
  • likes aaronpk's photo http... at 23:45, @aaronpk's tweet http... at 23:30, and Aaron Parecki's post http... at 21:00 on 2014-12-27

"at HH:MM" is used rather than "(HH:MM)" (previous design) because a plain parenthesized time looks like the duration of the thing before it[6].

Issue: the "at HH:MM" suffix could easily be misinterpreted as the publication time of the thing being liked, as opposed to the like post itself. Prefixing may be another option.

With authorship knowledge, e.g. with a nicknames cache, that determined that those liked posts were all created by the same person, the likes could be clustered further:

  • likes Aaron Parecki's photo http... at 23:45, tweet http... at 23:30, and post http... at 21:00 on 2014-12-27


In the simpler case of adjacent likes of the same URL person(source)'s things, they can be clustered purely by inspection (without lookup or referencing a nicknames sidetable), e.g. from:

  • likes NovemberProjectSF’s photo http... at 00:54, NovemberProjectSF’s photo http... at 00:53, NovemberProjectSF’s photo http... at 00:52, NovemberProjectSF’s photo http... at 00:52, NovemberProjectSF’s photo http... at 00:50, NovemberProjectSF’s photo http... at 00:49, NovemberProjectSF’s photo http... at 00:49, NovemberProjectSF's photo album “NPSF: Our Year in Photos” http... at 00:47, NovemberProjectSF’s post http... at 00:46, and NovemberProjectSF’s photo http... at 00:45.

To omitting their name from immediately subsequent likes (2015-019 works in Falcon).

  • likes NovemberProjectSF’s photo http... at 00:54, photo http... at 00:53, photo http... at 00:52, photo http... at 00:52, photo http... at 00:50, photo http... at 00:49, photo http... at 00:49, photo album “NPSF: Our Year in Photos” http... at 00:47, post http... at 00:46, and photo http... at 00:45.

And then with more specific mentions for link text by numbering consecutive items of the same type:

  • likes NovemberProjectSF’s photo 1 http... at 00:54, photo 2 http... at 00:53, photo 3 http... at 00:52, photo 4 http... at 00:52, photo 5 http... at 00:50, photo 6 http... at 00:49, photo 7 http... at 00:49, photo album “NPSF: Our Year in Photos” http... at 00:47, post http... at 00:46, and photo http... at 00:45.

Also further clustering of sets of consecutive items of the same type from the same source with a leading count, and parenthesizing such sets:

  • likes 7 of NovemberProjectSF’s photos (photo 1 http... at 00:54, photo 2 http... at 00:53, photo 3 http... at 00:52, photo 4 http... at 00:52, photo 5 http... at 00:50, photo 6 http... at 00:49, photo 7 http... at 00:49), photo album “NPSF: Our Year in Photos” http... at 00:47, post http... at 00:46, and photo http... at 00:45.

inline hypertext design

The next progressive enhancement from text is lightly styled hypertext, including images and hyperlinks.

Liking an indieweb post:

  • likes Aaron Parecki's post.21:00 on 2014-12-27
    • " Aaron Parecki's post" links to the permalink of the thing liked
      • instead of separate " Aaron Parecki" links to his home page and "post" links to the permalink of the thing liked
    • "21:00 on 2014-12-27" links to the permalink of the like post, when displayed elsewhere, e.g. in-stream.
  • likes Aaron Parecki's note/reply/checkin/RSVP.22:00 on 2014-12-27
    • etc.
  • likes Aaron Parecki's article "A Little Twitter Developer History".23:00 on 2014-12-27
    • similarly for an event or review
    • could be marked up with h-cite as well.

Liking a tweet:

  • likes @aaronpk's tweet.23:30 on 2014-12-27
    • "@aaronpk's tweet" links to the permalink of the favorited tweet
      • instead of separate "@aaronpk" link to Twitter profile and "tweet" link to tweet permalink

Liking an Instagram photo:

  • likes aaronpk's photo.23:45 on 2014-12-27
    • "aaronpk's photo" links to the permalink of the liked photo
      • instead of "aaronpk" link to his IG profile and "photo" link to the IG photo permalink

These designs work for both in-stream like posts, and like post permalinks.

In-stream, collapse multiple sequential like posts from the same day:

  • likes @aaronpk's tweet at 23:30 and Aaron Parecki's post at 21:00.
     on 2014-12-27

  • likes aaronpk's photo at 23:45, @aaronpk's tweet at 23:30, and Aaron Parecki's post at 21:00.
     on 2014-12-27

Where the times (e.g. "at 21:00") link to the permalinks of each like post respectively, and the date "on 2014-12-27" links to the archive of all like posts for that day, which will likely show these (and maybe others) in expanded form like the above individual like posts stacked one on top the other.

Again with authorship knowledge, e.g. with a nicknames cache, that determined that those liked posts were all created by the same person, the likes could be clustered further:

  • likes Aaron Parecki's photo at 23:45, tweet at 23:30, and post at 21:00.
     on 2014-12-27


markup for hypertext design

Note: markup of times should include timezone explicitly! E.g. using "datetime" attribute of the time element.

Minimal markup for liking an indieweb post:

<p class="h-entry">likes 
  <a class="u-like-of" href="http://aaronparecki.com/...">Aaron Parecki's post</a>.
  <a class="u-url" href="/2014/361/f1">
    <span class="dt-published"><time class="value">21:00</time> 
      on <time class="value">2014-12-27</time></span>
  </a>
</p>

Similarly, for note/reply/checkin/RSVP.

authorship is presumed to work via rel-author, e.g. for such posts in a stream/archive on a page. On a permalink page, such pages typically contain authorship information already somewhere, presuming the h-entry for them is on the body rather than the div in the above example.

Markup for liking an indieweb article with a name in particular, one could use a simple embedded h-cite as well:

<p class="h-entry">likes 
  <a class="u-like-of h-cite" href="http://aaronparecki.com/...">
    <span class="p-author">Aaron Parecki</span>'s 
    article "<span class="p-name">A Little Twitter Developer History</span>"
  </a>.
  <a class="u-url" href="/2014/361/f3">
    <span class="dt-published"><time class="value">23:00</time>
     on <time class="value">2014-12-27</time></span>
  </a>
</p>

This would also be a good consuming code test case to make sure it follow authorship and didn't misinterpret the author of the article as the author of the like.


Markup for multiple in-stream sequential like posts from the same day, collapsed:

<p>
<span class="h-entry"><span class="p-name">likes 
  <a class="u-like-of" href="http://twitter.com/aaronpk/...">@aaronpk's tweet</a></span>
  <a class="u-url" href="/2014/361/f4">at 
     <time class="dt-published" datetime="2014-12-27 23:30">23:30</time></a>
</span> and
<span class="h-entry"><abbr class="p-name" title="likes Aaron Parecki's post">
  <a class="u-like-of" href="http://aaronparecki.com/...">Aaron Parecki's post</a></abbr>
  <a class="u-url" href="/2014/361/f1">at 
     <time class="dt-published" datetime="2014-12-27 21:00">21:00</time></a>
</span>.
<a href="/2014/361/f">on <time>2014-12-27</time></a>
</p>
<p>
<span class="h-entry"><span class="p-name">likes 
  <a class="u-like-of" href="http://instagram.com/...">aaronpk's photo</a></span>
  <a class="u-url" href="/2014/361/f5">at 
     <time class="dt-published" datetime="2014-12-27 23:45">23:45</time></a>
</span>,
<span class="h-entry"><abbr class="p-name" title="likes @aaronpk's tweet">
  <a class="u-like-of" href="http://twitter.com/aaronpk/...">@aaronpk's tweet</a></abbr>
  <a class="u-url" href="/2014/361/f4">at 
     <time class="dt-published" datetime="2014-12-27 23:30">23:30</time></a>
</span>, and
<span class="h-entry"><abbr class="p-name" title="likes Aaron Parecki's post">
  <a class="u-like-of" href="http://aaronparecki.com/...">Aaron Parecki's post</a></abbr>
  <a class="u-url" href="/2014/361/f1">at 
     <time class="dt-published" datetime="2014-12-27 21:00">21:00</time></a>
</span>.
<a href="/2014/361/f">on <time>2014-12-27</time></a>
</p>

Again with authorship knowledge, e.g. were all created by the same person, the inline text collapses further, and the expanded explicit p-name for second and latter likes gets the author's full name rather than (silo-specific) username:

<p>
<span class="h-entry"><span class="p-name">likes 
  <a class="u-like-of" href="http://instagram.com/...">Aaron Parecki's photo</a></span>
  <a class="u-url" href="/2014/361/f5">at 
     <time class="dt-published" datetime="2014-12-27 23:45">23:45</time></a>
</span>,
<span class="h-entry"><abbr class="p-name" title="likes Aaron Parecki's tweet">
  <a class="u-like-of" href="http://twitter.com/aaronpk/...">tweet</a></abbr>
  <a class="u-url" href="/2014/361/f4">at 
     <time class="dt-published" datetime="2014-12-27 23:30">23:30</time></a>
</span>, and
<span class="h-entry"><abbr class="p-name" title="likes Aaron Parecki's post">
  <a class="u-like-of" href="http://aaronparecki.com/...">post</a></abbr>
  <a class="u-url" href="/2014/361/f1">at 
     <time class="dt-published" datetime="2014-12-27 21:00">21:00</time></a>
</span>.
<a href="/2014/361/f">on <time>2014-12-27</time></a>
</p>


CSS styling for images, colors, layout is left as an exercise to the builder.

URL design

URL design for like post permalinks is likely to be very similar to other posts.

Any use of date in the permalink should work like any other post.

Some additional details:

  • character short code for short URLs.
    • 'f' is suggested by the Whistle shortener design (for favorite, avoiding "l" (for like) since it often looks like "1" or "I" for URL retypability).
  • slugs
    • recommendation: no slug
    • research: existing #IndieWeb_Examples mostly have no slug, or put some sort of auto-text-content slug from the liked post, even if it has no slug of its own
    • avoid: putting a slug on a like post (especially more of a slug than the liked post) because you should not do more "SEO" than the original liked post, which is a risk. Having a like post show up higher in search results than the liked post itself is both bad form/rude, and worse for the user, who should see the original post in search results before any likes about it.

Thus if your post permalink paths are of the form:

  • /YYYY/DDD/tn

Then a "like" post permalink may have a path like:

  • /2014/363/f1

Reacji vs Like

Reacji are far more expressive than likes. I am no longer storing likes of my posts and instead converts them to reacji hearts. This has a side effect that parsing the mf2 on pages that are "liked" by others is converted instead to a reacji heart comment. Soon I may actually post my likes of other's posts as reacji hearts as well. Ben Roberts

Discussion

Likes of different things

Facebook seems to differentiate between likes of posts and likes of pages. This seems like an important semantic difference. Is the indieweb equivalent of liking a page a favourite? - user:acegiak.net

Previous markup

Previously the class "u-like" was used, but "u-like-of" is better.

Advantages of u-like-of over u-like for this purpose:

  • Reads better
    it reads better, more consistently with in-reply-to, e.g. “this post is in-reply-to that post”, “this post is a like-of that post” — Barnaby Walters
    KartikPrabhu supports like-of for ease of reading specially easy for beginners
  • Frees up u-like for linking to permalinks of likes. This frees up "u-like" (and "p-like") to actually indicate that the URL being linked is a like itself (e.g. similar to "p-comment").

Related

Possibly related posts and videos to "likes" and "liking"

See Also