The marketing header’s Create rule button picked up a filled invert hover that does not match the current ghost treatment, and the three profile portraits were out of date. Sharing cards also had no preview image, and every page’s Open Graph URL still pointed at the production homepage, so a staging link looked like a duplicate of the live site.
Changes
Create rule in the marketing header is the ghost default button: cream label, transparent fill, no invert hover or brand ring.
Replaced the three header portraits with the current set.
Canonical and og:url stay path-based and resolve against this instance’s public host (CLOUDRON_APP_ORIGIN, then production), so staging shares do not advertise the live domain.
Default 1200×630 share image from the hero; templates and articles override it. Regenerate with npm run generate:og-images.
Screenshots
How to Test
Run npm run dev and open the marketing home page.
Confirm Create rule is a ghost button (cream text, no fill). Hover it: no invert fill and no brand ring.
Confirm the three header portraits match the updated set.
View source on /: og:image is /assets/marketing/og-image.png at 1200×630; canonical and og:url are / (resolved against the instance host, not a hardcoded production homepage).
View source on /templates: share image is /assets/marketing/og-image-templates.png.
View source on a catalog article such as /blog/how-chaos-concentrates-control: share image is /content/blog/how-chaos-concentrates-control-og.png.
npx vitest run tests/components/Top.test.tsx tests/unit/siteMetadata.test.ts
Notes
Share URLs use the instance origin rather than the request Host header, so the static page shell can still prerender.
JSON-LD on some marketing pages still hardcodes the production domain; that is unchanged here.
## Overview
The marketing header’s Create rule button picked up a filled invert hover that does not match the current ghost treatment, and the three profile portraits were out of date. Sharing cards also had no preview image, and every page’s Open Graph URL still pointed at the production homepage, so a staging link looked like a duplicate of the live site.
## Changes
- Create rule in the marketing header is the ghost default button: cream label, transparent fill, no invert hover or brand ring.
- Replaced the three header portraits with the current set.
- Canonical and `og:url` stay path-based and resolve against this instance’s public host (`CLOUDRON_APP_ORIGIN`, then production), so staging shares do not advertise the live domain.
- Default 1200×630 share image from the hero; templates and articles override it. Regenerate with `npm run generate:og-images`.
## Screenshots
## How to Test
1. Run `npm run dev` and open the marketing home page.
2. Confirm Create rule is a ghost button (cream text, no fill). Hover it: no invert fill and no brand ring.
3. Confirm the three header portraits match the updated set.
4. View source on `/`: `og:image` is `/assets/marketing/og-image.png` at 1200×630; canonical and `og:url` are `/` (resolved against the instance host, not a hardcoded production homepage).
5. View source on `/templates`: share image is `/assets/marketing/og-image-templates.png`.
6. View source on a catalog article such as `/blog/how-chaos-concentrates-control`: share image is `/content/blog/how-chaos-concentrates-control-og.png`.
7. `npx vitest run tests/components/Top.test.tsx tests/unit/siteMetadata.test.ts`
## Notes
- Share URLs use the instance origin rather than the request Host header, so the static page shell can still prerender.
- JSON-LD on some marketing pages still hardcodes the production domain; that is unchanged here.
an.di
self-assigned this 2026-09-29 21:45:29 +00:00
Staging no longer advertises production canonicals, and Slack/social previews get a default hero card with template and article overrides.
Co-authored-by: Cursor <cursoragent@cursor.com>
an.di
merged commit fd9f82ea19 into main2026-09-29 21:45:53 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Overview
The marketing header’s Create rule button picked up a filled invert hover that does not match the current ghost treatment, and the three profile portraits were out of date. Sharing cards also had no preview image, and every page’s Open Graph URL still pointed at the production homepage, so a staging link looked like a duplicate of the live site.
Changes
og:urlstay path-based and resolve against this instance’s public host (CLOUDRON_APP_ORIGIN, then production), so staging shares do not advertise the live domain.npm run generate:og-images.Screenshots
How to Test
npm run devand open the marketing home page./:og:imageis/assets/marketing/og-image.pngat 1200×630; canonical andog:urlare/(resolved against the instance host, not a hardcoded production homepage)./templates: share image is/assets/marketing/og-image-templates.png./blog/how-chaos-concentrates-control: share image is/content/blog/how-chaos-concentrates-control-og.png.npx vitest run tests/components/Top.test.tsx tests/unit/siteMetadata.test.tsNotes