Skip to content

Share card and homepage links - #78

Merged
JacobStephens2 merged 2 commits into
mainfrom
issue-69
Sep 26, 2026
Merged

JacobStephens2 merged 2 commits into
mainfrom
issue-69

Conversation

@JacobStephens2

Copy link
Copy Markdown
Owner

Summary

 site/
 ├── index.html         # home page
+│                      #   og: and twitter: tags, absolute https://thirdshift.app URLs
+└── share-card.png     # 1200×630: headline over the press line
 docs/
+└── share-card/render.mjs   # renders the PNG from the page itself
 tests/
+└── share_card.rs      # tags complete, image served at the declared size
 Cargo.toml
-# homepage stays unset until thirdshift.app is live.
+homepage = "https://thirdshift.app"

/prompts/ doesn't exist yet, so only the home page is tagged. The README is untouched.

Evidence

Card (site/share-card.png, 1200×630):

share card

  • Before: cargo test --test share_card: 3 failed (the home page has no twitter:card, no og:type, …)
    After: cargo test --test share_card: 4 passed. cargo test --test packaging: 2 passed. The full cargo test passes.
share_card
  home page has og:type, url, site_name, title, description, image (+type/width/height/alt), all on https://thirdshift.app
  og:title == <title>, og:description == meta description
  twitter:card == summary_large_image; twitter title/description/image/alt == og's
  og:image resolves to a file under site/ that is a 1200×630 PNG, matching og:image:width/height

Merge Danger

Door: two-way

Tags, an image and a manifest field. All of it reverts cleanly. Platforms that already scraped the page may keep a cached card until they re-scrape.

Blast Radius: small

The home page's rendering is unchanged, since the tags live only in <head>. The crates.io page links to thirdshift.app from the next published release.

Unaddressed findings

Standards

  • site() duplicates deploy_dir()'s CARGO_MANIFEST_DIR walk: only two copies exist, so it isn't worth a shared helper in tests/support/ yet.
  • meta() takes a free-form attribute string: its only callers are the og() and twitter() wrappers, which fix the value.
  • png_size's bare IHDR byte offsets, and 1200×630 written in both the test and the render script: the doc comment names the chunk. The test is the check that catches the two drifting apart.

Spec

  • The render script is extra to "a static raster": kept so the card can be regenerated from the page. It needs playwright-core on NODE_PATH, as the script's header says.
  • tests/share_card.rs wasn't asked for: kept, because it is how the acceptance criteria are checked.
  • meta() depends on attribute order: the site's tags are hand-written in one shape. A reorder fails loudly rather than passing silently.

Closes #69

🤖 Generated with Claude Code

JacobStephens2 and others added 2 commits September 26, 2026 14:15
The card is the home page's headline over its press line, rendered at
1200x630 from the page itself by docs/share-card/render.mjs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tle and description, drop the canonical link

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@JacobStephens2
JacobStephens2 merged commit 74ca90a into main Sep 26, 2026
13 checks passed
@JacobStephens2
JacobStephens2 deleted the issue-69 branch September 26, 2026 14:31
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.

Share card and homepage links

1 participant