🎉 Eight years ago today, the #IndieWeb Webmention protocol was published as a W3C REC https://www.w3.org/TR/webmention/
As a social web building block, #Webmention was designed to work with various other building blocks. Small pieces, loosely joined. Every year developers find new ways to work with Webmention, and new subtleties when combined with other building blocks.
The primary uses of Webmention, peer-to-peer comments, likes, and other responses across web sites, have long presented an interesting challenge with the incorporation and display of external content originally from one site (the Webmention sender), on another site (the Webmention receiver).
There are multiple considerations to keep in mind when displaying such external content.
Two examples of external content are images (e.g. people’s icons or profile images from the author of a comment) and text (e.g. people’s names or the text of their comments).
For external images, rather than displaying them in full fidelity, you may want to compress them into a smaller resolution for how your site displays the profile images of comment authors.
If you accept Webmentions from arbitrary sources, there’s no telling what might show up in author images. You may want to pixelate images from unknown or novel sources into say 3x3 pixel grids of color (or grayscale) averages to make them uniquely identifiable while blurring any undesirable graphics beyond recognition.
For external text, one thing we discovered in recent IndieWeb chat¹ is that someone’s comment (or in this case their name) can contain Unicode directional formatting characters, e.g. for displaying an Arabic or Hebrew name right-to-left. Text with such formatting characters can errantly impact the direction of adjacent text.
Fortunately there is a CSS property, 'unicode-bidi', that can be used to directionally isolate such external text. Thus when you embed text that was parsed from a received Webmention, possibly with formatting characters, you have to wrap it in an HTML element (a span will do if you have not already wrapped it) with that CSS property. E.g.:
<span style="unicode-bidi: isolate;">parsed text here</span>
Though even better would be use of a generic HTML class name indicating the semantic:
<span class="external-text">parsed text here</span>
and then a CSS rule in your style sheet to add that property (and any others you want for external text)
.external-text { unicode-bidi: isolate; }
Previously: https://tantek.com/2023/012/t1/six-years-webmention-w3c
This is post 7 of #100PostsOfIndieWeb. #100Posts #socialWeb #openSocialWeb
← https://tantek.com/2025/004/t1/micro-one-onramp-open-social-web
→ 🔮
Glossary
HTML class name
https://tantek.com/2012/353/b1/why-html-classes-css-class-selectors
IndieWeb chat
https://indieweb.org/discuss
pixelate
https://indieweb.org/pixelated
small pieces, loosely joined
https://www.smallpieces.com/
Unicode directional formatting characters
https://en.wikipedia.org/wiki/Bidirectional_text#Explicit_formatting
unicode-bidi CSS property
https://developer.mozilla.org/en-US/docs/Web/CSS/unicode-bidi
References
¹ https://chat.indieweb.org/dev/2025-01-05#t1736092889120900
remembering losing #aaronsw twelve years ago today, and drawing connections with:
* Lawrence Lessig’s https://lessig.tumblr.com/post/56888930628/on-the-emptiness-in-the-concept-of-neutrality
* Ben Werdmüller’s https://werd.io/2025/building-an-open-web-that-protects-us-from-harm
Two points of connection:
1. Neutrality in ethical or policy matters is insufficient, empty, and cowardly. Especially when you know better, neutrality in action is not ethical, it is negligent and wrong, like a lie of omission.
“Allyship demands more than neutrality — it demands action.” — @werd.io (@ben@werd.social)
“… there are obviously plenty of contexts in which to be ‘neutral’ is simply to be wrong. ” @lessig.org (@lessig.tumblr.com @lessig@mastodon.world @lessig)
2. Building community for collective action is required for resilient resistance
Aaron helped inspire and drive numerous acts of resistance against foes better funded and connected, many acts which succeeded to some degree or completely such as preventing the passage of SOPA.¹
Similarly he built community for collective action, such as co-founding the Progressive Change Campaign Committee and the Demand Progress political advocacy group² which remain active to this day.
One of the best ways to honor Aaron’s memory is to build on the good examples he set that succeeded and continue to succeed.
The only neutrality that Aaron supported was net neutrality, prioritizing those that use the internet over those that build & serve it, a priority of constituencies strongly aligned with the W3C’s official Ethical Web Principles.³
If you too reject neutrality and instead embrace allyship & action, some of those actions will require resisting the status quo with the intent of changing it.
If resistance with the goal of actual change is your primary objective (rather than recognition), build community to bring about that change, resist collectively not alone, both in the near term, and sustainably into the future.
Still miss you Aaron.
Previously:
* https://tantek.com/2024/013/t1/remembering-aaronsw-eleven-years (links to prior posts)
¹ https://en.wikipedia.org/wiki/Aaron_Swartz#Opposition_to_the_Stop_Online_Piracy_Act_(SOPA)
² https://en.wikipedia.org/wiki/Aaron_Swartz#Progressive_Change_Campaign_Committee
³ https://www.w3.org/TR/ethical-web-principles/#noharm
Alan Watts wrote in the “The World As Emptiness”:
“So in the same way, the coming and going of things in the world is marvelous. They go. Where do they go? Don’t answer, because that would spoil the mystery.”
I have to disagree with Watts here.
Do ask and DO answer. Again and again. Embrace curiosity, explanation, understanding.
Any mystery you can explain will reveal another mystery underneath.
There is no spoiling the mystery, there is only the journey of one mystery after another.
#meditationThoughts #Kula #meditation #liveMeditation #groupMeditation #AlanWatts #mystery
The team @micro.blog have done it again.
They soft-launched https://micro.one yesterday¹.
This may be the most accessible onramp to the open social web ever.
Cost: $1 a month. Yes you read correctly.
This is the simplest and cheapest (where you are the customer, not the product) way to own your identity and content online².
Stop posting in someone else’s garage³.
Time to export your Twitter, and migrate your Mastodon handle to your own home on the web.
Of course you can bring your own domain name. Additionally:
* blog posts, naturally, both articles and microblogging notes
* photos
* podcasting
* custom themes
* web-clients and native mobile posting clients
* WordPress, Tumblr, Mastodon, Medium import
More details (and alternatives) at https://micro.one/about/pricing
And yes, it interoperates with the open #socialWeb, including:
* #ActivityPub support, #Mastodon and #fediverse compatibility
* #IndieAuth to sign-in to third-party apps
* #microformats support in all built-in themes
* #Webmention for sending and receiving replies across websites
* #Micropub standard posting API, supporting dozens of clients
* #Microsub standard timeline API, supporting social readers
More #indieweb support details at https://micro.one/about/indieweb
Did I mention the the superb micro.blog (and micro.one) Community Guidelines?
* https://help.micro.blog/t/community-guidelines/39
Well done @manton.org and team.
This is post 6 of #100PostsOfIndieWeb. #100Posts #ownYourIdentity #ownYourData #openSocialWeb
← https://tantek.com/2025/003/t1/lastfm-year-in-review-playback24
→ https://tantek.com/2025/012/t1/eight-years-webmention
Glossary
IndieAuth
https://indieweb.org/IndieAuth
microformats
https://microformats.org/wiki/microformats
Micropub
https://indieweb.org/Micropub
Microsub
https://indieweb.org/Microsub
Webmention
https://indieweb.org/Webmention
References
¹ https://www.manton.org/2025/01/03/microone-was-effectively-a-softlaunch.html
² https://tantek.com/2025/001/t1/15-years-notes-my-site-first
³ https://tantek.com/2023/022/t2/own-your-notes-domain-migration
Yesterday https://last.fm/ (@lastfm) emailed their year in review reports, which they called #Playback24 and Last.Year.
Kudos to them for waiting until the new year to do so, and breaking with the pattern of services prematurely posting year in review summaries.¹
They’re also available on the web, without requiring a native mobile app to view.
Mine is here: https://www.last.fm/user/tantekc/listening-report/year
You can find yours (if you’re a last.fm user) by going here:
* https://www.last.fm/user/_/listening-report/year
The page title calls it your #YearInMusic, and the URL your #ListeningReport.
It has many interesting elements, from various top listened lists (artist, album, track), to what percent of 2024 listens (which they call scrobbles) were new artists, albums, and tracks.
Their “Top Tags” time chart is quite cool. Fascinating to see the differences in music listening over the seasons and the whole year.
The report has many interactive features, so it will take me some time to figure out how to save, export, and/or republish my listening report on my personal #indieweb site.
For now I used Firefox to save the page as an .html page to my laptop, and was quite impressed with how much of the information was available in that one file. Much more than #Spotify’s #Wrapped.
That’s step 1. Step 2 is figuring out a good way to blog at least some of it.
This is post 5 of #100PostsOfIndieWeb. #100Posts #LastFM #YearInReview
← https://tantek.com/2025/002/t1/indieweb-third-place-community
→ https://tantek.com/2025/004/t1/micro-one-onramp-open-social-web
Glossary:
scrobble
https://indieweb.org/scrobble
year in review
https://indieweb.org/year_in_review
¹ https://tantek.com/2025/001/t2/first-new-year-review-prior
The #indieweb is more than #independence. It’s also a web, of both personal sites and “third place” sites like aggregators, bridges, proxies, directories, indexes, and other community sites.
Broadly speaking, such “third place” sites include places we collectively contribute to, and which license our contributions for free use by others. While open source projects come to mind, perhaps a more obvious example is Wikipedia.
Similarly, the most obvious “third place” in the #IndieWeb community is our community site and wiki https://indieweb.org/ as well as the heterogeneous chat https://chat.indieweb.org/.
We also have many services run by individuals (or small teams) in the community, for the benefit of the community, like:
* @snarfed.org’s https://brid.gy/ and https://fed.brid.gy/
* @aaronparecki.com’s https://webmention.io/ and many others
* @martymcgui.re’s https://xn--sr8hvo.ws/ (IndieWeb Webring)
* @gregorlove.com’s https://indiebookclub.biz/
* @mat.tl’s https://libre.fm/
and I’m sure many more I’m forgetting.
All these services respect your data and your ownership of it. #ownYourData
All these services are swappable. Many (most?) are open source and self-hostable in case you want to run your own personal instance or another shared instance.
The web part of the indieweb complements, connects, and strengthens the indie part.
This is post 4 of #100PostsOfIndieWeb. #100Posts
← https://tantek.com/2025/001/t3/strava-year-in-sport-how-to-get-info-save
→ https://tantek.com/2025/003/t1/lastfm-year-in-review-playback24
When we say #ownYourData we mean whatever data is important to you, like the data services aggregate about you and present back to you. Owning that data means extracting it into a form you can hang onto regardless of what the service does in the future (or disappears), and publishing whatever aspects of it you wish to, on your personal #indieweb site.
Speaking of year in reviews¹ and #Strava Year in Sport in particular, here are my brief notes for how to get the info from it (before it disappears after the 6th!²) and save it locally so you can write and publish your own year in sport.
How to find your Strava: Year in Sport 2024
For 2024, the Strava Year in Sport 2024 is only available on the native mobile app (iOS and presumably Android) and not accessible via the website. Prior years which were available on the website e.g. 2018(.)strava(.)com and 2017(.)strava(.)com are long gone.
From the mobile app home screen, tap the "📋 You" button in the lower right corner.
At the top you should see:
"Play back your 2024" heading with an orange button:
[ See your Year in Sport ]
Tap that button.
Saving Seven Summary Segments
You should immediately see an animation start playing, with seven "segments" (like Instagram stories) at the top, gradually filling-in as progress indicators one at a time.
For each "segment" if you press the screenshot combination of buttons on your mobile (e.g. volume-up + power on iPhone 14), in addition to taking a screenshot it will put you in a "share" screen with one or more videos or still images to share in a carousel format.
For each item in the carousel (if there is more than one)
* tap the item in the carousel
* tap the "[↑] More" button at the bottom.
* scroll down the list of options up a bit
* tap "Save Video [↓]" or "Save Image [↓]" option to store it locally on your mobile.
The seventh "segment" is your overall summary, and shows all your sports combined.
Save it (as an image as noted above), then
* tap the "✏️ Customize" button
* choose an individual sport (e.g. "👟 Run")
* tap "Save changes"
* save that image (as above)
* tap customize again
* choose the next sport (e.g. "🚲 Ride")
* save changes again
* save image again
Strava seemingly only reports summaries of (up to?) two of your sports. Those were Run (presumably all running, street and trail) and Ride for me.
Cleanup Your Screenshots
After having saved all the videos/images for each "segment", you can:
* go back to your mobile’s top level Photos app/stream
* delete the screenshots
You should see all the videos/images you've saved. If anything is missing, go back to the previous steps and save them again, then remove any duplicates as necessary.
Post Your Year In Sport
Go through your saved videos/images, and either post on your own site as-is, or use your mobile’s built-in image OCR to copy the text bits into a plain personal year in sport note summary post on your own site. Or some combination of both if you prefer.
Add other summaries of your activities and sports as you see fit, like:
* 🧘🏻♂️💪🏻🪨 info on other sports (beyond running and biking), e.g. yoga, weight-lifting, bouldering etc.
* 🗓 total days active (of 366)
* 🪧 total distance (if applicable)
* 🆙 total elevation (if applicable)
* ⏱ total time
* other aspects of your activities (if you have the info)
* ⛰ mountains summited (new, per sport, and/or total different and overall)
* 🏔 snow-peaks summited (new, per sport, total different and overall)
* 🌋 calderas summited (new, per sport, total different and overall)
* personal leaderboards for your summited mountains
* top 5 most summited (per mountain)
* top 5 highest elevation mountains summited
* number of different cities, states, countries (new, per sport, total)
* 🏁 number of races you ran, biked etc. (and finished, if not the same)
* 🗓 total days raced (if different from number of races, per sport, total)
* 🪧 total distance you raced (per sport, total)
* 🆙 total elevation you raced (per sport, total)
* ⏱ total time spent racing (per sport, total)
* ⛰ mountains summited in races (new, per sport, total)
* 🏔 snow-peaks summited in races (new, per sport, total)
* 🌋 calderas summited (new, per sport, total different and overall)
* 🏅🏆 number of (or full set of) awards or trophies you earned at races
* 🖼 photo of all your medals and/or trophies if any
* any other stats that you think of that seem interesting to you
For each of these annual numbers, you could also compute (optionally display) the percentage change from 2023, if you happen to have those numbers around.
This is also a good reason to at least total up these numbers for 2024, whether you publish them or not, for figuring out the percentage change in 2025 next year.
When you publish your own year in sport post, might as well re-use the existing #YearInSport hashtag too.
I have already saved all the videos/images from my own Strava Year In Sport, and as I assemble the pieces into my own post, I’ll take more notes, and add to the IndieWeb year in review page³ accordingly.
This post could also be improved with a few screenshots for a few of the steps above. I figured I’d publish my notes first to hopefully help some people sooner (since the Strava Year In Sport will disappear after January 6th as mentioned!). I might upload a few screenshots to the IndieWeb wiki later as well.
#yearInReview #ownYourYearInReview
This is post 3 of #100PostsOfIndieWeb. #100Posts
← https://tantek.com/2025/001/t2/first-new-year-review-prior
→ https://tantek.com/2025/002/t1/indieweb-third-place-community
Glossary:
hashtag
https://indieweb.org/hashtag
own your data
https://indieweb.org/own_your_data
¹ https://tantek.com/2025/001/t2/first-new-year-review-prior
² https://support.strava.com/hc/en-us/articles/22067973274509-Your-Year-in-Sport#h_01HH5VW132BPDTEZJZDHBGJ6KM
³ https://indieweb.org/year_in_review
The first of a new year seems like a good day to assemble, aggregate, summarize and publish various year in review posts for the prior year.
When various online services create a year in review for you many weeks before the end of the year (whether #Spotify #Wrapped or #Strava #YearInSport), it seems they are short-changing you.
No one asks for an 11 months in review (except HR departments, which is a different problem).
So why do people accept only an ~11 months summary when services provide such a premature “year” in review?
When people say things like “Make every day count” do they not also believe you should “Count every day”?
In this case, 2024 had 366 days. You should count every one of them, and every thing from every one of them.
Rather than “sharing” a premature year in review, request your “year in review” today on the 1st of the year from various services, extract the data you want, fill in any gaps, and post your year in reviews on your own site¹.
#yearInReview #ownYourYearInReview
This is post 2 of #100PostsOfIndieWeb. #100Posts
← https://tantek.com/2025/001/t1/15-years-notes-my-site-first
→ https://tantek.com/2025/001/t3/strava-year-in-sport-how-to-get-info-save
Glossary:
year in review
https://indieweb.org/year_in_review
¹ https://indieweb.org/year_in_review#IndieWeb_Examples
Welcome to 2025!
15 years ago today I began posting notes on my own #indieweb site first, and only later on #socialMedia: https://tantek.com/2010/001/t1/declaring-independence-building-it
You can too.
I am once again encouraging you start the year with:
1. Getting a personal domain name
2. Posting on your own site first, then syndicating elsewhere: #POSSE
In 2025 there are even more neighborhoods with other people’s garages¹ to post into. Companies, servers, services, disappear all the time, taking all their posts and permalinks with them to graveyard 404².
This is your annual reminder to embrace #independent ownership of your online self, your creations, and their #longevity:
* Own your domain -> own your online identity
* Own your permalinks -> own your posts
Want help? Just ask: https://chat.indieweb.org/
#ownYourContent #ownYourData
Once again I am restarting a #100PostsOfIndieWeb #100Posts project for the year.
This is post 1.
Previously, previously, previously:
* https://tantek.com/2024/001/t1/restarting-100days-indieweb-gift-calendar
* https://tantek.com/2023/001/t1/own-your-notes
* https://tantek.com/2022/001/t1/12-years-notes-my-site
* https://tantek.com/2020/001/t1/10-years-notes-my-site
* https://tantek.com/2015/002/t1/notes-replies-faves-before-twitter-ownyourdata
← ✨
→ https://tantek.com/2025/001/t2/first-new-year-review-prior
Glossary:
IndieWeb
https://indieweb.org/
longevity
https://indieweb.org/longevity
post
https://indieweb.org/post
permalink
https://indieweb.org/permalink
personal domain name
https://indieweb.org/personal-domain
POSSE
https://indieweb.org/POSSE
syndicate
https://indieweb.org/syndicate
¹ https://tantek.com/2023/022/t2/own-your-notes-domain-migration
² https://indieweb.org/site-deaths