Sharing the course catalog

Share /Store/Catalog/Catalog?category=Education to open the Store's course selection. Its preview says Courses, describes hands-on learning, and uses the dedicated 1200 × 630 image at /api/content/Edu/content/courses-og-card.png.

How the preview resolves

The initial anonymous HTML response is produced by SeoHead in the portal GUI. The Education catalog route (including /Store/Catalog/area/Catalog?category=Education) selects Edu/Courses as its metadata node through CourseCatalogSeo. The existing SeoResolver still checks anonymous access before returning any metadata. An absent or private metadata node yields the generic head. The canonical and og:url remain the filtered Store URL, so sharing does not lose the Education selection.

Edu/Courses.json owns the title, description, icon and content.ogImage; CourseCatalogContent.OgImage preserves the image when content is materialized as a typed record. The image is a file in Edu's root content collection, hence the URL's /api/content/Edu/content/ prefix. Edu's publicSegments explicitly includes Courses.

The original URL resolved to the Store/Catalog NodeType, since the resolver received only the path and never the category query. On 2026-09-09 the anonymous response advertised og:title=Catalog, an internal NodeType description, og:url=/Store/Catalog, and og:image=/api/og/Store/Catalog. Replacing Edu's existing module image alone could not fix that: the request never resolved Edu at all. The module's own og-card.png continues to describe the course-building infrastructure.

Verification and delivery

Fetch the filtered URL anonymously and inspect its initial head: title Courses, the learner-facing description, the filtered canonical URL, and the absolute image URL above. Fetch the image without authentication and verify HTTP 200, image/png, and 1200 × 630 dimensions. Other Store categories must keep their existing metadata resolution.

The change requires both the Edu package (metadata, content record and image) and the portal GUI module (route selection). A local file change does not update the live portal; publish both through the normal release pipeline. Chat applications may retain an older preview until they scrape the link again.

CourseCatalogSeoRenderingTest renders the anonymous initial head on a real local mesh and asserts the resolved course node, description, filtered canonical and Open Graph URL, and absolute image URL. A non-Education category asserts the ordinary catalog metadata.

Reconnecting…
The server was updated. Reloading the page to pick up the latest version.