Skip to content

Die Fediverse-Adresse einer Seite steht auf der Seite (v7.269.0) - #1413

Merged
wintermeyer merged 1 commit into
mainfrom
organization-fediverse-card
Aug 12, 2026
Merged

Die Fediverse-Adresse einer Seite steht auf der Seite (v7.269.0)#1413
wintermeyer merged 1 commit into
mainfrom
organization-fediverse-card

Conversation

@wintermeyer

Copy link
Copy Markdown
Owner

TL;DR Eine Organisationsseite ist ein ActivityPub-Actor, zeigte ihre Adresse aber auf keiner Seite, die ein Mensch liest. Sie trägt jetzt dieselbe Fediverse-Karte wie ein Mitgliedsprofil — aus einer Komponente und über einen Controller.

Wo: VutuvWeb.OrganizationLive.Show, VutuvWeb.FediverseComponents, VutuvWeb.RemoteFollowController, VutuvWeb.AgentDocs.OrganizationDoc.

Jetzt: WebFinger löst acct:<handle>@<host> auf, das Actor-Dokument steht, der Posteingang nimmt Follows an — und wer auf die Seite schaut, findet die Adresse nirgends. Gemeldet als "auf vutuv.de/vutuv finde ich nicht, wie der Fediverse-Account dieses Profils ist".

Danach:

  • Die Karte am Fuss der Hauptspalte: Adresse zum Kopieren und "Von Ihrem eigenen Server aus folgen".
  • Eine einzeilige Abkürzung dorthin in der Kopfkarte, neben der Website. Beim Mitgliedsprofil war genau diese Zeile der Unterschied zwischen "steht da" und "wird gefunden".
  • Die Agent-Formate (.md/.txt/.json/.xml) nennen die Adresse ebenfalls.
  • Die Seiten-URL beantwortet ein ActivityPub-Accept mit dem Actor-Dokument (404/410, wenn sie nicht föderiert). Das ist, was Mastodon holt, wenn jemand die URL statt des Handles einfügt.

DRY: eine Komponente (follow_us_from_elsewhere/1) für beide Seitenarten, mit denselben msgids — die deutschen Sätze waren dadurch schon übersetzt. Ein Controller für beide Formulare: RemoteFollowController nimmt %User{} oder %Organization{} und verzweigt nur, wo die beiden sich unterscheiden (eine Seite kann nicht umgezogen sein; die Absage sagt "Seite"; eine lokale Adresse folgt der Seite gleich hier). detail_icon/1 ist dafür von VutuvWeb.UserHTML in den Baukasten gewandert.

Zum Ausprobieren nach dem Deploy: die Karte erscheint erst, wenn eine Seite Föderation eingeschaltet hat — sonst würde sie eine Adresse anpreisen, auf die WebFinger 404 antwortet. Für vutuv.de/vutuv ist der Schalter unter /organizations/vutuv/fediverse noch aus.

Übersetzung: mix gettext.extract --merge hat beide neuen Sätze wieder fuzzy aus den Mitglieds-Varianten befüllt ("Dieses Profil ist nicht im Fediverse", "diesem Mitglied direkt hier folgen"). Beide sind von Hand ersetzt; ein Test liest die Karte mit deutschem Accept-Language.

20 neue Tests in organization_fediverse_card_test.exs. Hot deploy, keine Migration. Version 7.269.0.

Diesen Text hat ein KI-Agent in meinem Namen geschrieben, ungeprüft von mir. Die Arbeit dahinter ist meine, nur das Aufschreiben habe ich delegiert.

Eine Organisationsseite ist seit v7.254 ein ActivityPub-Actor: WebFinger löst
ihren Handle auf, sie hat ein Actor-Dokument, einen Posteingang und Follower auf
anderen Servern. Nur stand die Adresse auf keiner Seite, die ein Mensch liest —
gemeldet als "auf vutuv.de/vutuv finde ich nicht, wie der Fediverse-Account
dieses Profils ist". Ein Konto, dessen Adresse man nirgends sieht, kann niemand
abonnieren.

Die Seite trägt jetzt dieselbe Fediverse-Karte wie ein Mitgliedsprofil, am Fuss
der Hauptspalte, plus eine einzeilige Abkürzung dorthin in der Kopfkarte. Die
Abkürzung ist kein Beiwerk: beim Profil war genau sie der Unterschied zwischen
"steht da" und "wird gefunden".

DRY heisst hier zwei Dinge. Erstens rendert beides **eine** Komponente
(`FediverseComponents.follow_us_from_elsewhere/1`) mit denselben msgids — die
deutschen Sätze waren damit schon übersetzt und können zwischen den beiden
Seitenarten nicht auseinanderlaufen. Zweitens beantwortet **ein** Controller das
Formular: `RemoteFollowController` nimmt ein `%User{}` oder eine
`%Organization{}` und verzweigt nur dort, wo die beiden sich wirklich
unterscheiden — eine Seite kann nicht umgezogen sein, ihre Absage sagt "Seite"
statt "Profil", und eine Adresse, die auf diesem vutuv liegt, folgt der Seite
gleich hier.

Zwei Dinge fahren mit. Die Seiten-URL beantwortet jetzt ein ActivityPub-`Accept`
mit dem Actor-Dokument. Das ist, was Mastodon holt, wenn jemand die URL statt des
Handles einfügt — ohne das ist die Adresse auf der Karte auffindbar und die URL
daneben löst nicht auf. Und `detail_icon/1` ist von `VutuvWeb.UserHTML` in den
Baukasten gewandert: eine Seite, die kein Profil ist, soll für einen Globus nicht
das Profil-View importieren müssen.

Die Karte erscheint erst, wenn eine Seite Föderation eingeschaltet hat (weiter
aus voreingestellt). Sonst würde sie eine Adresse anpreisen, auf die WebFinger
mit 404 antwortet.

`mix gettext.extract --merge` hat beide neuen Sätze wieder fuzzy aus den
Mitglieds-Varianten befüllt ("Dieses Profil ist nicht im Fediverse", "diesem
Mitglied direkt hier folgen"). Beide sind von Hand ersetzt, und ein Test liest
die Karte mit deutschem Accept-Language.

Diesen Text hat ein KI-Agent in meinem Namen geschrieben, ungeprüft von mir. Die
Arbeit dahinter ist meine, nur das Aufschreiben habe ich delegiert.
@wintermeyer
wintermeyer merged commit dba1ced into main Aug 12, 2026
1 check passed
@wintermeyer
wintermeyer deleted the organization-fediverse-card branch August 12, 2026 07:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant