+++ title = "A beginner h-card and h-entry usage" date = "2022-12-13T20:05:00Z" updated = "2022-12-13T20:05:00Z" [extra] authors = ["Ydreniv"] +++ I've just got started on discovering what [Indieweb](https://indieweb.org/) is. I've been making static sites for years now, and I've always been interested in "small-scale web". Thus, it was only natural that I got into IndieWeb. I won't go into too much details about this initiative. I'm still only a beginner, and you will have more accurate information looking at their website. But it's basically a set of tools and practices to build a decentralized version of the web, far from the big social media. The specificity, compared to what one could simply do with a classic static sites, is adding ways to interact and understand content. I will cover interaction in another blog post. Today, I want to focus on microformats, and especially `h-card` and `h-entry`. In Une tranche de console dans Internet Explorer 8, [lucidiot](https://tilde.town/~lucidiot) talked about WebSlices, and introduced for the first time the notion of [microformats](https://microformats.org) to me. Later on, while browsing some IndieWeb stuff, microformats appeared once again. That's why, on one chilly winter night, I began to try harness this mysterious knowledge. However I didn't know where to really start. I first read the [IndieWeb Getting Started](https://indieweb.org/Getting_Started), then tried [Indie Webify](https://indiewebify.me). The latter is a linear and interactive introduction. The sequential steps are great at progressively introducing new notions. With the help of the [IndieWeb wiki](https://indieweb.org/) and the [Microformats wiki](https://microformats.org/wiki/Main_Page), I've been able to get going. ## h-card So I've started implementing `h-card` on this website. This is a static site, generated using [Zola](https://www.getzola.org/). I won't teach you all about Zola. Basically, you can right Markdown content, which will then be formatted using templated HTML. While I use a different template for each page, they all use a `base.html` template, to put in the basic structure (`head` block for instance). Thus, I simply included a `include/h-card.html` in this base template. The `h-card` template is fairly simple : ```html ``` The `hidden` class just means there is a `display: none` associated with the block in my CSS file. It's not necessary, and some people show these informations on their website, but I felt they were mostly redundant. As for the `h-card` itself, it is simply added with a `h-card` class on a block. Then, classes are added to various elements in the block to specify the `h-card` attributes. A full list of attributes can be found in the [documentation](https://microformats.org/wiki/h-card). Here, I have a `p-name` to list my name, and nicknames in `p-nickname`. I've put some urls to my websites. The fact that they are urls useful to the `hCard` is shown with the class `u-url`. And since these various links represent sites of mine, I've added a `rel="me"`. This is an attribute used in authentication on the IndieWeb, and thus is quite important. I will talk a bit more about it in the Webmention article. I've also added a public GPG key, which can also be used in authentication. And lastly is my birthday here, with the appropriate class : `dt-bday`. There are many more attributes I could have used, but for various reasons, decided to leave out. The most important ones are `p-name` and `u-url` anyway. While this simple block doesn't seem like much, it provides the basic information for IndieWeb apps to use. Moreover, it can help you sort out your various online presences. # h-entry The second microformat I've tackled is `h-entry` Here, I went into my `blog.html` template. ```html

{{ page.title }}

, by {{ authors_macros::authors_inline(authors=page.extra.authors) }}

{% if page.updated != page.date -%}

This article has been edited on .

{% endif %}
{{ page.content | safe }}
``` I'm using a macro to generate the author field. I've shown it below, but this simply outputs the author name as a link, with some `hCard` classes to give a couple information about the author. As I'm the only one writing articles here, this is a bit overkill, but if people ever publish articles on this blog, at least I'll be able to let them do easily. ```html {% macro authors_inline(authors) %} {% set authors_infos = load_data(path="authors.yaml") %} {% for author in authors %} {% for author_infos in authors_infos.authors %} {% if author_infos.name == author %} {% set_global author = author_infos %} {% endif %} {% endfor %} {{ author.name }} {% endfor %} {% endmacro authors_inline %} ``` There are a lot more Zola templating stuff involved here. I believe you can however understand or ignor most of it, but wanted to include it if someone having a go at Zola wanted some example. Like the `h-card`, everything is in a `h-entry` block. I then use several classes for the different attributes : * `p-name` : Name of the entry, here a post title. Entries could be used for other kind of contents. `p-name` is also used in other microformats, including `h-product` or `h-recipe`. * `u-url` indicates a URL. * `dt-published` : Publication date * `dt-updated` : Last update. This will appear optionally, if the article has been updated. * `e-content` : Body of the article. ## Wrap-up On Tilde Town, you can always access the (non-compilated) sources in `/home/ydreniv/tilde-site`. Feel free to browse it if you want to know more, or if you read this in the far future, what changes I did bring. I'll be working on a Webmention article for later. It will probably be split in halves. I would talk first about the basic manual setup, then write about how one can automate things. Oh, and lastly, a disclaimer : I'm quite new to IndieWeb, so I may be mistaken on some things. Feel free to contact me if you want to inform me on the subject.