πΌ Status:
Indieweb and POSSE
Oh man, #indieweb are so exciting and fun to explore! Today, I want to update and share a few thing that might be useful to someone else out there. Hopefully this help you to adapt changes and reach your goals faster.
ToC
Storing webmention data
Currently all webmention data stored as JSON
file on my repository, I not anymore bound to use client-side rendering via Javascript like my previous tutorial because everything now are static hosted inside my source code repository.
Simply wrote a python script to be executed during build process, then communicate with webmention.io API, convert the output as JSON
file, add (commit) to repo and trigger a new CI/CD on Gitlab (so the next build will the latest changes happened on our branch).
pages:
stage: deploy
script:
- hugo --verbose --minify --enableGitInfo
- git clone git@gitlab.com:RobbiNespu/robbinespu.gitlab.io.git
- cd robbinespu.gitlab.io
- git checkout master
- python3 ./get-mentions.py
- git status --porcelain
- |
if [[ `git status --porcelain` ]]; then
git add . &&
git commit -m "β¨Update webmention data" &&
git push origin master -o ci.skip
curl -X POST -F token=XX -F ref=master https://gitlab.com/api/v4/projects/YY/trigger/pipeline
fi
- echo 'Build is complete...!'
Here the output during build process
$ hugo --verbose --minify --enableGitInfo
Start building sites β¦
hugo v0.88.1-5BC54738 linux/amd64 BuildDate=2021-09-04T09:39:19Z VendorInfo=gohugoio
INFO 2021/10/15 09:41:36 syncing static files to /builds/RobbiNespu/robbinespu.gitlab.io/public/
ERROR 2021/10/15 09:41:36 Markup type mmark is deprecated and will be removed in Hugo 0.89.0. See https://gohugo.io//content-management/formats/#list-of-content-formats
| EN
-------------------+-------
Pages | 1278
Paginator pages | 0
Non-page files | 0
Static files | 180
Processed images | 0
Aliases | 94
Sitemaps | 1
Cleaned | 0
Total in 6520 ms
$ git clone git@gitlab.com:RobbiNespu/robbinespu.gitlab.io.git
Cloning into 'robbinespu.gitlab.io'...
Warning: Permanently added the ECDSA host key for IP address '172.XX.YY.ZZ' to the list of known hosts.
$ cd robbinespu.gitlab.io
$ git checkout master
Already on 'master'
Your branch is up to date with 'origin/master'.
$ python3 ./get-mentions.py
URL https://robbinespu.gitlab.io/indieweb/211012114728/ --> md5: e10661eb009561bc4a7239162f4622af
.
.
.
$ git status --porcelain
M data/webmentions/e10661eb009561bc4a7239162f4622af.json
M data/webmentions/mentions.json
$ if [[ `git status --porcelain` ]]; then # collapsed multi-line command
[master a06b5c5] β¨Update webmention data / optimize images
2 files changed, 19 insertions(+), 1 deletion(-)
To gitlab.com:RobbiNespu/robbinespu.gitlab.io.git
5c7615b..a06b5c5 master -> master
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1355 100 1087 100 268 1764 435 --:--:-- --:--:-- --:--:-- 2196
As you can see, I store the JSON
response as a file which named by using MD5 hash inside data/webmentions/
directory. Now what we need just a partial template to load the webmention data on our page. I just took the renderer HTML of PlaidWeb/webmention.js as base.
permanent URL and aliases
Some important tips is to maintain your permanent URL link or use fixed URL for indieweb kind. As for me, I do a mistake using my own own slug (eg: /indieweb/2021-10-06-checkin-pasar-dungun/ ) but later on I decided to use timestamp (eg /indieweb/211006013518/) as my permanent URL. So it quite a waste if I discard the webmention data I received before, the solution are to apply aliases
on them and loop alias (as slice
) together with current URL and display the data.
{{ $dummyAlias := slice .RelPermalink }} <!-- add current URL -->
{{ range $.Page.Params.aliases}}
{{ $dummyAlias = $dummyAlias | append . }} <!-- add alias URL if exist -->
{{ end }}
{{- range $dummyAlias -}}
{{ $aliases := printf "https://robbinespu.gitlab.io%v" . }}
{{ $aliasesMD5 := $aliases | md5 }}
.
.
{{- end -}}
Webmention and brid.gy auto publish
Incase you wondering what happen if I receive a new comment or reaction via webmention then let me tell you that I already setup webmention.io
to send a web-hook to trigger the first Ci/CD build and as mentioned previously, the build will capture and store the latest webmention another second build to finalize everything.
For triggering sending webmention, I use Github action workflow to fetch recent RSS, grep the link and execute curl
to https://webmention.app to check if the link have target or hidden link of https://brid.gy/publish/{twitter,mastodon,github} for auto publish.
The key is to split up work flow into 4 parts, check the repository for sample and more technical understanding.
The issue I have right now is to delete the indieweb post. On indieweb standard, the deleted post should return HTTP status with 410 Gone
not 404 Not found
. This is impossible for me because server side is controlled by Gitlab itself. As alternative, I tried put <meta http-equiv="Status" content="410 Gone" />
on HTML head but it not reflected even on indiweb.org website. Check deleted RSVP and a new RSVP seem both displayed on https://events.indieweb.org, this is not right and what I expected π€·. I don’t think they can handle it correctly via meta
but I guess it not important as long the origin source (my website) marked it deleted and I can send second post as appeal to change my RSVP status.
π Syndicated to: /
Related Posts
Other posts you may be interested in:
IndieWeb Interactions
Below you can find the interactions that this page has had using Indieweb. Which means, you can mentioned this URL on any website that support WebMention. Have you written a response to this post? Let me know the URL:
((Do you use a website that do not set up with WebMention capabilities? You can use Comment Parade.)