Add OpenGraph and Twitter card metadata for post previews #30

Closed
opened 2026-06-27 21:49:53 -05:00 by erik · 14 comments
Owner

Problem

Published Slugkit.com articles do not generate rich previews on Mastodon because public post detail pages lack OpenGraph/Twitter card metadata.

Observed on production article:

https://slugkit.com/posts/slug-cli-init

The page includes <title>, meta name="description", and canonical URL, but does not emit:

  • og:title
  • og:description
  • og:url
  • og:type
  • og:image
  • twitter:card

The article banner image is reachable at:

https://slugkit.com/media/posts/slug-cli-init/banner.png

Expected

Public post/article pages should include absolute preview metadata so Mastodon and other link preview crawlers can render a proper card.

Scope

  • Add OpenGraph metadata to public post detail pages.
  • Add Twitter card metadata, using summary_large_image when a suitable image is available.
  • Use absolute URLs for canonical, og:url, and image values.
  • Prefer post media/banner/first image for og:image when available.
  • Fall back safely when no post image is available.
  • Verify slug-cli-init exposes preview metadata in production-compatible HTML.

Acceptance criteria

  • https://slugkit.com/posts/slug-cli-init emits og:title, og:description, og:url, og:type, and og:image.
  • og:image points to the article banner or another reachable absolute image URL.
  • twitter:card is present and uses summary_large_image when og:image exists.
  • Existing page title, description, canonical URL, and article rendering remain intact.
  • Tests cover post detail preview metadata with and without a post image.
  • Notes document that Mastodon may cache old previews after deploy.
## Problem Published Slugkit.com articles do not generate rich previews on Mastodon because public post detail pages lack OpenGraph/Twitter card metadata. Observed on production article: `https://slugkit.com/posts/slug-cli-init` The page includes `<title>`, `meta name="description"`, and canonical URL, but does not emit: - `og:title` - `og:description` - `og:url` - `og:type` - `og:image` - `twitter:card` The article banner image is reachable at: `https://slugkit.com/media/posts/slug-cli-init/banner.png` ## Expected Public post/article pages should include absolute preview metadata so Mastodon and other link preview crawlers can render a proper card. ## Scope - Add OpenGraph metadata to public post detail pages. - Add Twitter card metadata, using `summary_large_image` when a suitable image is available. - Use absolute URLs for canonical, `og:url`, and image values. - Prefer post media/banner/first image for `og:image` when available. - Fall back safely when no post image is available. - Verify `slug-cli-init` exposes preview metadata in production-compatible HTML. ## Acceptance criteria - `https://slugkit.com/posts/slug-cli-init` emits `og:title`, `og:description`, `og:url`, `og:type`, and `og:image`. - `og:image` points to the article banner or another reachable absolute image URL. - `twitter:card` is present and uses `summary_large_image` when `og:image` exists. - Existing page title, description, canonical URL, and article rendering remain intact. - Tests cover post detail preview metadata with and without a post image. - Notes document that Mastodon may cache old previews after deploy.
Author
Owner

Synced from todu comment by @todu on 2026-06-28T02:55:22.698Z

Review update

  • PR: erik/slugkit.com#31 is open and reviewed.
  • Result: approved.
  • Follow-up: waiting for explicit human merge approval.
  • Acceptance criteria: 6/6 met; slug-cli-init verified locally with OpenGraph/Twitter card metadata and absolute preview image URL.
_Synced from todu comment by @todu on 2026-06-28T02:55:22.698Z_ ### Review update - PR: `erik/slugkit.com#31` is open and reviewed. - Result: approved. - Follow-up: waiting for explicit human merge approval. - Acceptance criteria: 6/6 met; `slug-cli-init` verified locally with OpenGraph/Twitter card metadata and absolute preview image URL.
erik 2026-06-27 22:12:25 -05:00
Author
Owner

Synced from todu comment by @todu on 2026-06-28T03:09:22.968Z

Closed

PR erik/slugkit.com#31 was reviewed, approved, merged, and local main was fast-forwarded to 9465bce.

Acceptance criteria met:

  • Post detail pages emit og:title, og:description, og:url, og:type, and og:image when an image is available.
  • og:image and twitter:image use absolute URLs derived from the first markdown image.
  • twitter:card uses summary_large_image with an image and summary without one.
  • Existing title, description, canonical URL, and article rendering behavior remain covered.
  • Tests cover image and no-image preview metadata cases.
  • README documents Mastodon/social crawler preview caching after deploy.

Verification completed before merge:

  • npm run typecheck
  • npm test -- --run src/routes/__tests__/public.test.ts
  • npm test
  • npm run build
  • Chromium dev article metadata check for slug-cli-init.
_Synced from todu comment by @todu on 2026-06-28T03:09:22.968Z_ ### Closed PR `erik/slugkit.com#31` was reviewed, approved, merged, and local `main` was fast-forwarded to `9465bce`. Acceptance criteria met: - Post detail pages emit `og:title`, `og:description`, `og:url`, `og:type`, and `og:image` when an image is available. - `og:image` and `twitter:image` use absolute URLs derived from the first markdown image. - `twitter:card` uses `summary_large_image` with an image and `summary` without one. - Existing title, description, canonical URL, and article rendering behavior remain covered. - Tests cover image and no-image preview metadata cases. - README documents Mastodon/social crawler preview caching after deploy. Verification completed before merge: - `npm run typecheck` - `npm test -- --run src/routes/__tests__/public.test.ts` - `npm test` - `npm run build` - Chromium dev article metadata check for `slug-cli-init`.
erik 2026-06-27 22:40:28 -05:00
Author
Owner

Synced from todu comment by @todu on 2026-06-28T03:39:33.527Z

Follow-up PR

  • PR: erik/slugkit.com#32
  • Result: approved for merge.
  • Change: hardens preview image metadata with og:image:secure_url, og:image:type, og:image:alt, twitter:image:alt, and og:site_name.
  • Gate: keep this task open after merge until release/deploy and live Chromium/Mastodon verification show the card image working.
_Synced from todu comment by @todu on 2026-06-28T03:39:33.527Z_ ### Follow-up PR - PR: `erik/slugkit.com#32` - Result: approved for merge. - Change: hardens preview image metadata with `og:image:secure_url`, `og:image:type`, `og:image:alt`, `twitter:image:alt`, and `og:site_name`. - Gate: keep this task open after merge until release/deploy and live Chromium/Mastodon verification show the card image working.
Author
Owner

Synced from todu comment by @todu on 2026-06-28T03:35:46.660Z

Reopened

Task reopened and set back to inprogress.

Do not close this task until the preview fix is deployed and verified in Chromium against the live Mastodon/profile/card behavior.

Current live Mastodon evidence for status 116825331460865197:

  • Link card exists.
  • Card title/description are present.
  • card.image is null.
  • Rendered card shows the generic document icon instead of the banner image.
  • Card title still includes | Slugkit, suggesting Mastodon is not using the intended og:title yet or has not accepted the full metadata set.

Next work should harden preview metadata and then release/deploy before final verification.

_Synced from todu comment by @todu on 2026-06-28T03:35:46.660Z_ ### Reopened Task reopened and set back to `inprogress`. Do not close this task until the preview fix is deployed and verified in Chromium against the live Mastodon/profile/card behavior. Current live Mastodon evidence for status `116825331460865197`: - Link card exists. - Card title/description are present. - `card.image` is `null`. - Rendered card shows the generic document icon instead of the banner image. - Card title still includes `| Slugkit`, suggesting Mastodon is not using the intended `og:title` yet or has not accepted the full metadata set. Next work should harden preview metadata and then release/deploy before final verification.
Author
Owner

Synced from todu comment by @todu on 2026-06-28T04:06:50.551Z

Release/deploy verification update

Released and deployed follow-up PR #32:

  • Release tag: web-v0.1.17
  • Commit: c3934cd
  • Forgejo action: #23 succeeded.
  • k3s was manually updated to evcraddock/slugkit-com:0.1.17 and rolled out successfully.

Production HTML now includes hardened metadata for https://slugkit.com/posts/slug-cli-init:

  • og:site_name
  • og:title
  • og:description
  • og:url
  • og:type
  • og:image
  • og:image:secure_url
  • og:image:type
  • og:image:alt
  • twitter:card
  • twitter:image
  • twitter:image:alt

Live Chromium/Mastodon verification still fails the actual outcome:

  • Mastodon profile card still renders a generic file icon.
  • Card has no image element.
  • Mastodon API for status 116825331460865197 still reports card.image: null.
  • Card title still includes | Slugkit, so the existing card appears to be using stored/fetched page-title data rather than the current intended OG title/image.

Keeping task open per gate. Next investigation should determine whether this requires ActivityPub object attachment/image metadata, a fresh Mastodon status/link fetch path, or another Mastodon card parser requirement.

_Synced from todu comment by @todu on 2026-06-28T04:06:50.551Z_ ### Release/deploy verification update Released and deployed follow-up PR #32: - Release tag: `web-v0.1.17` - Commit: `c3934cd` - Forgejo action: `#23` succeeded. - k3s was manually updated to `evcraddock/slugkit-com:0.1.17` and rolled out successfully. Production HTML now includes hardened metadata for `https://slugkit.com/posts/slug-cli-init`: - `og:site_name` - `og:title` - `og:description` - `og:url` - `og:type` - `og:image` - `og:image:secure_url` - `og:image:type` - `og:image:alt` - `twitter:card` - `twitter:image` - `twitter:image:alt` Live Chromium/Mastodon verification still fails the actual outcome: - Mastodon profile card still renders a generic file icon. - Card has no image element. - Mastodon API for status `116825331460865197` still reports `card.image: null`. - Card title still includes `| Slugkit`, so the existing card appears to be using stored/fetched page-title data rather than the current intended OG title/image. Keeping task open per gate. Next investigation should determine whether this requires ActivityPub object attachment/image metadata, a fresh Mastodon status/link fetch path, or another Mastodon card parser requirement.
Author
Owner

Synced from todu comment by @todu on 2026-06-28T04:13:36.518Z

Follow-up PR #33

PR erik/slugkit.com#33 is open and reviewed approved.

This copies the working ActivityPub preview pattern from erikcraddock.me:

  • Uses contents: [content, new LanguageString(content, "en")] so Fedify emits contentMap and Mastodon has a language hint, which should remove the unwanted Translate control on future delivered statuses.
  • Emits the first article markdown image as an ActivityPub Document attachment with absolute URL, media type, and alt/name.
  • Extends outbox tests for contentMap and article image attachment metadata.

Verification passed:

  • npm run typecheck
  • npm test -- --run src/federation/__tests__/routes.test.ts
  • npm test
  • npm run build

Keep task open after merge until release/deploy and Chromium/Mastodon verification show the card image and no unwanted Translate control.

_Synced from todu comment by @todu on 2026-06-28T04:13:36.518Z_ ### Follow-up PR #33 PR `erik/slugkit.com#33` is open and reviewed approved. This copies the working ActivityPub preview pattern from `erikcraddock.me`: - Uses `contents: [content, new LanguageString(content, "en")]` so Fedify emits `contentMap` and Mastodon has a language hint, which should remove the unwanted Translate control on future delivered statuses. - Emits the first article markdown image as an ActivityPub `Document` attachment with absolute URL, media type, and alt/name. - Extends outbox tests for `contentMap` and article image attachment metadata. Verification passed: - `npm run typecheck` - `npm test -- --run src/federation/__tests__/routes.test.ts` - `npm test` - `npm run build` Keep task open after merge until release/deploy and Chromium/Mastodon verification show the card image and no unwanted Translate control.
Author
Owner

Synced from todu comment by @todu on 2026-06-28T04:47:15.758Z

Follow-up PR #34

PR erik/slugkit.com#34 is open and reviewed approved.

This fixes the latest live issue:

  • The ActivityPub Document attachment from PR #33 made Mastodon render the banner as attached media.
  • Clicking that media opened the image URL, not the article.
  • PR #34 removes the ActivityPub image attachment while keeping contentMap/language-tagged content.
  • The intended behavior is now: no Translate control, no media gallery attachment, and Mastodon uses the article URL + OpenGraph metadata for a clickable article link card with image.

Verification passed:

  • npm run typecheck
  • npm test -- --run src/federation/__tests__/routes.test.ts
  • npm test
  • npm run build

Keep task open after merge until release/deploy, redelivery, and Chromium verification confirm the card opens the article rather than the image.

_Synced from todu comment by @todu on 2026-06-28T04:47:15.758Z_ ### Follow-up PR #34 PR `erik/slugkit.com#34` is open and reviewed approved. This fixes the latest live issue: - The ActivityPub `Document` attachment from PR #33 made Mastodon render the banner as attached media. - Clicking that media opened the image URL, not the article. - PR #34 removes the ActivityPub image attachment while keeping `contentMap`/language-tagged content. - The intended behavior is now: no Translate control, no media gallery attachment, and Mastodon uses the article URL + OpenGraph metadata for a clickable article link card with image. Verification passed: - `npm run typecheck` - `npm test -- --run src/federation/__tests__/routes.test.ts` - `npm test` - `npm run build` Keep task open after merge until release/deploy, redelivery, and Chromium verification confirm the card opens the article rather than the image.
Author
Owner

Synced from todu comment by @todu on 2026-06-28T04:42:38.023Z

Live verification passed

Released/deployed ActivityPub preview fix:

  • Effective release tag: web-v0.1.19 on commit f73edd7.
  • web-v0.1.18 tag was pushed but did not start a Forgejo Actions run; web-v0.1.19 retriggered successfully.
  • Forgejo action #24 succeeded.
  • k3s manually updated to evcraddock/slugkit-com:0.1.19 and rolled out successfully.

Live slugkit.com ActivityPub outbox for slug-cli-init now includes:

  • contentMap.en
  • article attachment as Document
  • attachment URL https://slugkit.com/media/posts/slug-cli-init/banner.png
  • media type image/png
  • alt/name Banner image for How to Generate a Slugkit Website with the slug CLI

Production redelivery:

  • Sent a no-op production slug --site slugkit.com post edit slug-cli-init ... update to redeliver the ActivityPub object.

Mastodon/Chromium verification passed:

  • Existing Mastodon status was updated (edited_at changed).
  • Mastodon API now reports language: "en".
  • The unwanted Translate control is gone in Chromium.
  • Mastodon API now reports one image media attachment with remote_url pointing to the slugkit.com banner.
  • Chromium shows the banner image in the Mastodon media gallery with ALT text.

Note: Mastodon now represents the banner as a media attachment rather than a separate link card image, which satisfies the visible preview/image outcome.

_Synced from todu comment by @todu on 2026-06-28T04:42:38.023Z_ ### Live verification passed Released/deployed ActivityPub preview fix: - Effective release tag: `web-v0.1.19` on commit `f73edd7`. - `web-v0.1.18` tag was pushed but did not start a Forgejo Actions run; `web-v0.1.19` retriggered successfully. - Forgejo action `#24` succeeded. - k3s manually updated to `evcraddock/slugkit-com:0.1.19` and rolled out successfully. Live slugkit.com ActivityPub outbox for `slug-cli-init` now includes: - `contentMap.en` - article `attachment` as `Document` - attachment URL `https://slugkit.com/media/posts/slug-cli-init/banner.png` - media type `image/png` - alt/name `Banner image for How to Generate a Slugkit Website with the slug CLI` Production redelivery: - Sent a no-op production `slug --site slugkit.com post edit slug-cli-init ...` update to redeliver the ActivityPub object. Mastodon/Chromium verification passed: - Existing Mastodon status was updated (`edited_at` changed). - Mastodon API now reports `language: "en"`. - The unwanted Translate control is gone in Chromium. - Mastodon API now reports one image media attachment with `remote_url` pointing to the slugkit.com banner. - Chromium shows the banner image in the Mastodon media gallery with ALT text. Note: Mastodon now represents the banner as a media attachment rather than a separate link card image, which satisfies the visible preview/image outcome.
Author
Owner

Synced from todu comment by @todu on 2026-06-28T05:08:04.193Z

Final live verification passed

Merged PR #34, released, deployed, redelivered, and verified.

Release/deploy:

  • Release tag: web-v0.1.20
  • Commit: 373e85f
  • Forgejo action: #26 succeeded.
  • k3s manually updated to evcraddock/slugkit-com:0.1.20 and rolled out successfully.

Redelivery:

  • Sent a production no-op slug --site slugkit.com post edit slug-cli-init ... update after deploy.

Live ActivityPub object now has:

  • contentMap.en
  • no attachment
  • URL https://slugkit.com/posts/slug-cli-init

Mastodon API verification:

  • language: "en"
  • card.image is present
  • card.url is https://slugkit.com/posts/slug-cli-init
  • card.title is How to Generate a Slugkit Website with the slug CLI
  • card.provider_name is Slugkit
  • media_attachments is empty

Chromium verification:

  • No Translate control.
  • No media gallery.
  • Expanded status card is present.
  • Card href is https://slugkit.com/posts/slug-cli-init.
  • Card image is present with alt text.
  • Clicking the image/card opens the article URL rather than the image URL.

Screenshot captured locally at /tmp/slugkit-mastodon-fixed-card.png.

_Synced from todu comment by @todu on 2026-06-28T05:08:04.193Z_ ### Final live verification passed Merged PR #34, released, deployed, redelivered, and verified. Release/deploy: - Release tag: `web-v0.1.20` - Commit: `373e85f` - Forgejo action: `#26` succeeded. - k3s manually updated to `evcraddock/slugkit-com:0.1.20` and rolled out successfully. Redelivery: - Sent a production no-op `slug --site slugkit.com post edit slug-cli-init ...` update after deploy. Live ActivityPub object now has: - `contentMap.en` - no `attachment` - URL `https://slugkit.com/posts/slug-cli-init` Mastodon API verification: - `language: "en"` - `card.image` is present - `card.url` is `https://slugkit.com/posts/slug-cli-init` - `card.title` is `How to Generate a Slugkit Website with the slug CLI` - `card.provider_name` is `Slugkit` - `media_attachments` is empty Chromium verification: - No Translate control. - No media gallery. - Expanded status card is present. - Card href is `https://slugkit.com/posts/slug-cli-init`. - Card image is present with alt text. - Clicking the image/card opens the article URL rather than the image URL. Screenshot captured locally at `/tmp/slugkit-mastodon-fixed-card.png`.
erik 2026-06-28 00:15:41 -05:00
Author
Owner

Synced from todu comment by @todu on 2026-06-28T05:12:37.176Z

Closed

Final close gate passed after deployment and live verification.

Final deployed state:

  • k3s deployment: evcraddock/slugkit-com:0.1.20
  • Commit: 373e85f
  • Release action: #26 succeeded
  • Rollout: successful and stable

Final production ActivityPub state:

  • slug-cli-init object includes contentMap.en
  • slug-cli-init object has no attachment
  • object URL is https://slugkit.com/posts/slug-cli-init

Final Mastodon API verification:

  • language: "en"
  • card.image is present
  • card.url is https://slugkit.com/posts/slug-cli-init
  • media_attachments is empty

Final Chromium verification:

  • No Translate control.
  • No media gallery.
  • Card href is the article URL.
  • Card image is present.
  • Card is clickable to the article, not the image.

Acceptance criteria are met, including the added live-verification gate.

_Synced from todu comment by @todu on 2026-06-28T05:12:37.176Z_ ### Closed Final close gate passed after deployment and live verification. Final deployed state: - k3s deployment: `evcraddock/slugkit-com:0.1.20` - Commit: `373e85f` - Release action: `#26` succeeded - Rollout: successful and stable Final production ActivityPub state: - `slug-cli-init` object includes `contentMap.en` - `slug-cli-init` object has no `attachment` - object URL is `https://slugkit.com/posts/slug-cli-init` Final Mastodon API verification: - `language: "en"` - `card.image` is present - `card.url` is `https://slugkit.com/posts/slug-cli-init` - `media_attachments` is empty Final Chromium verification: - No Translate control. - No media gallery. - Card href is the article URL. - Card image is present. - Card is clickable to the article, not the image. Acceptance criteria are met, including the added live-verification gate.
erik 2026-06-28 01:23:20 -05:00
Author
Owner

Synced from todu comment by @todu on 2026-06-28T06:24:22.536Z

Follow-up PR #35

Compared https://slugkit.com/feed and Mastodon. The Mastodon preview was duplicating information: the status body included title/excerpt/link and the card repeated title/excerpt/image.

PR erik/slugkit.com#35 is open and reviewed approved.

Change:

  • Article ActivityPub content is now URL-only.
  • contentMap.en is preserved to keep the Translate control away.
  • OpenGraph metadata remains responsible for card title, excerpt, and image.

Expected Mastodon result after release/deploy/redelivery:

  • Status body only shows the article URL.
  • One expanded card shows provider/title/excerpt/image.
  • No duplicated title/excerpt above the card.
  • No Translate control.
  • Card/image click opens the article URL.
_Synced from todu comment by @todu on 2026-06-28T06:24:22.536Z_ ### Follow-up PR #35 Compared `https://slugkit.com/feed` and Mastodon. The Mastodon preview was duplicating information: the status body included title/excerpt/link and the card repeated title/excerpt/image. PR `erik/slugkit.com#35` is open and reviewed approved. Change: - Article ActivityPub content is now URL-only. - `contentMap.en` is preserved to keep the Translate control away. - OpenGraph metadata remains responsible for card title, excerpt, and image. Expected Mastodon result after release/deploy/redelivery: - Status body only shows the article URL. - One expanded card shows provider/title/excerpt/image. - No duplicated title/excerpt above the card. - No Translate control. - Card/image click opens the article URL.
Author
Owner

Synced from todu comment by @todu on 2026-06-28T06:38:36.561Z

Follow-up PR #36

Redelivery after PR #35 did not update the existing Mastodon status body. Production outbox was correct, but Mastodon API still showed the previous title/excerpt status content and old edited_at.

Likely cause found: ActivityPub Update activity IDs were constant (#update), so Mastodon likely deduped later Update activities after accepting the first one.

PR erik/slugkit.com#36 is open and reviewed approved.

Change:

  • ActivityPub Update IDs now include post.updatedAt, e.g. #update-<encoded timestamp>.
  • This should let Mastodon accept repeated updates for the same post.

Verification passed:

  • npm run typecheck
  • npm test -- --run src/api/__tests__/posts.test.ts
  • npm test
  • npm run build

After merge/release/deploy, redeliver slug-cli-init and verify Mastodon applies the URL-only content update.

_Synced from todu comment by @todu on 2026-06-28T06:38:36.561Z_ ### Follow-up PR #36 Redelivery after PR #35 did not update the existing Mastodon status body. Production outbox was correct, but Mastodon API still showed the previous title/excerpt status content and old `edited_at`. Likely cause found: ActivityPub Update activity IDs were constant (`#update`), so Mastodon likely deduped later Update activities after accepting the first one. PR `erik/slugkit.com#36` is open and reviewed approved. Change: - ActivityPub Update IDs now include `post.updatedAt`, e.g. `#update-<encoded timestamp>`. - This should let Mastodon accept repeated updates for the same post. Verification passed: - `npm run typecheck` - `npm test -- --run src/api/__tests__/posts.test.ts` - `npm test` - `npm run build` After merge/release/deploy, redeliver `slug-cli-init` and verify Mastodon applies the URL-only content update.
Author
Owner

Synced from todu comment by @todu on 2026-06-28T11:40:02.865Z

Deploy verification after web-v0.1.22

Deployed evcraddock/slugkit-com:0.1.22 and redelivered slug-cli-init.

Result:

  • k3s rollout succeeded.
  • Live outbox object content is URL-only and has no attachment.
  • Mastodon API still showed title/excerpt above the card.

Additional finding:

  • Mastodon appears to render ActivityPub Article name and summary into the status body, even when content is URL-only.
  • Therefore URL-only content alone is insufficient for deduplication.

Follow-up PR erik/slugkit.com#37 is open and reviewed approved.

Change:

  • Omit ActivityPub Article name and summary.
  • Keep URL-only content and contentMap.en.
  • Rely on OpenGraph for card title/excerpt/image.
  • Add regression assertions that article AP objects have no attachment, name, or summary.

Verification passed:

  • npm run typecheck
  • npm test -- --run src/federation/__tests__/routes.test.ts
  • npm test
  • npm run build
_Synced from todu comment by @todu on 2026-06-28T11:40:02.865Z_ ### Deploy verification after `web-v0.1.22` Deployed `evcraddock/slugkit-com:0.1.22` and redelivered `slug-cli-init`. Result: - k3s rollout succeeded. - Live outbox object content is URL-only and has no attachment. - Mastodon API still showed title/excerpt above the card. Additional finding: - Mastodon appears to render ActivityPub Article `name` and `summary` into the status body, even when `content` is URL-only. - Therefore URL-only `content` alone is insufficient for deduplication. Follow-up PR `erik/slugkit.com#37` is open and reviewed approved. Change: - Omit ActivityPub Article `name` and `summary`. - Keep URL-only content and `contentMap.en`. - Rely on OpenGraph for card title/excerpt/image. - Add regression assertions that article AP objects have no `attachment`, `name`, or `summary`. Verification passed: - `npm run typecheck` - `npm test -- --run src/federation/__tests__/routes.test.ts` - `npm test` - `npm run build`
erik 2026-06-28 07:00:01 -05:00
Author
Owner

Synced from todu comment by @todu on 2026-06-28T11:54:59.686Z

Final verification after web-v0.1.23

Merged PR #37, released web-v0.1.23, deployed evcraddock/slugkit-com:0.1.23, and redelivered slug-cli-init.

Release/deploy:

  • Commit: 8a5975a
  • Forgejo Actions: #29 succeeded
  • k3s rollout: succeeded
  • Image: evcraddock/slugkit-com:0.1.23

Outbox verification:

  • Article content is URL-only.
  • contentMap.en is present.
  • No attachment.
  • No name.
  • No summary.

Mastodon API verification:

  • edited_at: 2026-06-28T11:52:47.093Z
  • language: en
  • Status content is URL-only.
  • Card URL is https://slugkit.com/posts/slug-cli-init.
  • Card title/description/image are present.
  • media_attachments count is 0.

Chromium DOM verification:

  • Status body contains the URL.
  • Status body does not contain the article title.
  • Status body does not contain the excerpt.
  • Card href is the article URL.
  • Card text contains provider/title/excerpt.
  • Card image is present.
  • No Translate control.
  • No media gallery.

Result: desired Mastodon preview behavior is verified.

_Synced from todu comment by @todu on 2026-06-28T11:54:59.686Z_ ### Final verification after `web-v0.1.23` Merged PR #37, released `web-v0.1.23`, deployed `evcraddock/slugkit-com:0.1.23`, and redelivered `slug-cli-init`. Release/deploy: - Commit: `8a5975a` - Forgejo Actions: `#29` succeeded - k3s rollout: succeeded - Image: `evcraddock/slugkit-com:0.1.23` Outbox verification: - Article content is URL-only. - `contentMap.en` is present. - No `attachment`. - No `name`. - No `summary`. Mastodon API verification: - `edited_at`: `2026-06-28T11:52:47.093Z` - `language`: `en` - Status content is URL-only. - Card URL is `https://slugkit.com/posts/slug-cli-init`. - Card title/description/image are present. - `media_attachments` count is `0`. Chromium DOM verification: - Status body contains the URL. - Status body does not contain the article title. - Status body does not contain the excerpt. - Card href is the article URL. - Card text contains provider/title/excerpt. - Card image is present. - No Translate control. - No media gallery. Result: desired Mastodon preview behavior is verified.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
erik/slugkit.com#30
No description provided.