---
title: Joining the IndieWeb
description: Why I added IndieWeb support to this site, what it means in practice, and how identity verification works through rel=me and h-card.
pubDate: '2026-03-23T12:42:00+01:00'
category: en/development
tags:
  - indieweb
---

After years of posting on other people's platforms and watching some of them quietly rot, I wanted this site to become the canonical place for everything I publish. The IndieWeb gives that ambition a concrete shape — a set of standards and practices built around a simple premise: you own your content, it lives on your domain, and everything else is a distribution channel.

This post is the entry point: what joining the IndieWeb actually means in practice, and how identity verification works through `rel=me` and `h-card`.

## The core idea

**Problem:** Most personal publishing flows the wrong way. You write on a platform, the platform owns the URL, and if the platform dies or changes its terms, your content goes with it.

**Implementation:** POSSE — Publish on your Own Site, Syndicate Elsewhere — reverses this. The canonical URL is always yours. Copies go out to other networks from there.

**Solution:** IndieWeb doesn't require a specific stack or service. It's a collection of small, composable standards that work over plain HTTP. A static Astro site qualifies just as well as a WordPress blog.

## rel=me and identity

**Problem:** Claiming "I am the same person at these URLs" is meaningless if nothing verifies it.

**Implementation:** The first building block is `rel=me` — a way to declare that two URLs represent the same person. It goes on links pointing at profiles elsewhere:

```html
<link rel="me" href="https://github.com/adrian-altner" />
<link rel="me" href="https://bsky.app/profile/adrian-altner.de" />
<link rel="me" href="https://www.instagram.com/adrian.altner/" />
<link rel="me" href="https://www.linkedin.com/in/adrian-altner/" />
```

For the link to count, the other side has to confirm it. GitHub does this by letting you set your website URL in your profile — if `https://github.com/adrian-altner` links back to `adrian-altner.de`, the circle closes and the identity is verified.

Bluesky is a special case. Verification doesn't go through `rel=me` HTML — it goes through the AT Protocol DNS or HTTPS well-known mechanism. Setting a custom domain as the Bluesky handle (`@adrian-altner.de`) is the verification. Once that's in place, the `rel=me` link to the Bluesky profile is recognised.

**Solution:** A handful of `<link>` tags plus a backlink on each profile, and the identity is cryptographically — in Bluesky's case — or socially verifiable from any `rel=me` parser.

## h-card: machine-readable identity

**Problem:** `rel=me` establishes ownership. It doesn't describe who you are.

**Implementation:** `h-card` is a Microformats2 class pattern applied to existing HTML:

```html
<div class="h-card">
  <img class="u-photo" src="/avatar.jpg" alt="Adrian Altner" />
  <a class="u-url p-name" href="https://adrian-altner.de">Adrian Altner</a>
  <p class="p-note">Key Account Manager IT by day, developer and photographer by hobby.</p>
</div>
```

The classes encode semantics without adding any visible markup. `u-url` marks the canonical URL, `p-name` the display name, `u-photo` the avatar, `p-note` a short bio. Any MF2 parser — or IndieWeb service — can extract a structured identity from this.

One caveat: the avatar needs to be at a stable, unprocessed path. Astro hashes processed images, so a copy lives at `public/avatar.jpg` to guarantee a permanent URL.

**Solution:** Parsers reading the homepage get my identity as structured data without any JSON-LD or separate metadata file — the markup itself is the source of truth.

## Validating it works

[indiewebify.me](https://indiewebify.me) checks all of this. It follows `rel=me` links, confirms the back-links exist, parses the `h-card`, and reports on what it finds. All three sections came back green after the first deploy.

The next step is making individual posts machine-readable. That's what Microformats2 h-entry is for.

## What to take away

- **IndieWeb is a set of standards, not a platform.** There's nothing to install — `rel=me`, `h-card`, and plain HTTP are the whole stack for this first step.
- **Verification is reciprocal.** A `rel=me` link on your site only counts if the other side links back — GitHub, Mastodon, Bluesky all provide that backlink in their own way.
- **Bluesky uses its own verification path.** A custom domain handle via AT Protocol is what closes the loop — not `rel=me` HTML.
- **`h-card` turns the homepage into structured identity** without any visible change to how it renders.
- **[indiewebify.me](https://indiewebify.me) is the quick sanity check** once the markup is in place.
