Skip to content

πŸš€ DO NOT MERGE BEFORE JULY 21 β€” Launch Open & Async (post live + buy-now CTAs)#1912

Draft
benbalter wants to merge 1 commit into
mainfrom
launch-open-and-async
Draft

πŸš€ DO NOT MERGE BEFORE JULY 21 β€” Launch Open & Async (post live + buy-now CTAs)#1912
benbalter wants to merge 1 commit into
mainfrom
launch-open-and-async

Conversation

@benbalter

Copy link
Copy Markdown
Owner

⚠️ DRAFT β€” DO NOT MERGE BEFORE TUESDAY, JULY 21, 2026. The book goes on sale July 21; open-and-async.com is pre-order until then. Nothing on the site gates on the post date, so the moment this merges the launch post publishes, every buy-now CTA goes live, the hero banner flips to "Out now," and the RSS/email broadcast fires. Merging early reproduces #1899 (buy-now live while the store is still pre-order). Keep as draft until launch day, then mark ready and merge.

What this does

Flips the site from pre-launch teaser β†’ buy-now, as one coupled change (the post gate and the sitewide promos must ship together):

  • Launch post live β€” 2026-07-21-open-and-async.mdx: published: false β†’ true.
  • Sitewide BookCta (homepage/about featured + inline-on-posts): "Coming July 21 / Get notified" β†’ "Out now" / "Buy it β€” $9.99".
  • BookLaunchCta (the launch post's bespoke CTA): unchanged copy (already buy-now); buy links now carry a launch-post-specific utm_source.
  • RSS/email CTA (feed.xml.ts): same buy-now flip, with an email-specific utm_source.
  • Homepage hero banner (header.jpg): regenerated "COMING JULY 21, 2026" β†’ "OUT NOW" from the marketing repo's banner generator (same design/dimensions).

Also folded in (from a blind design + marketing consult)

  • Attribution: per-surface utm_source in the existing site-wide benbalter-<surface> convention, so the launch post, everyday CTA, and email are each measurable (previously all collapsed to the generic source).
  • Accessibility: the featured card gets an aria-label (was a run-on accessible name) and all buy CTAs get a brand focus-visible ring.
  • Copy: the "cut" book-lineage headline reframed from rejection ("didn't make the final cut") toward abundance.

Verification

  • npm run check β€” 0 errors
  • feed unit test β€” pass (updated to assert the new email utm_source)
  • npm run build β€” pass; confirmed the now-published post renders with buy-now copy and the focus-visible utilities emit CSS

Out of scope

The marketing site itself (open-and-async.com) flips via its own launch runbook in ~/projects/open-and-async-site β€” this PR only touches ben.balter.com.

πŸ€– Generated with Claude Code

Launch day (July 21, 2026) is a coupled change: nothing gates on post
date, so the post going live and the sitewide promos flipping to buy-now
must ship together (shipping the CTA flip early caused #1899).

- Unhide the launch post (published: false β†’ true).
- BookCta.astro: teaser β†’ buy-now on both variants ("Out now" / "Buy it
  β€” bookPrice"), matching the marketing site and BookLaunchCta. Add a
  featured-card aria-label and brand focus-visible rings while there.
- BookLaunchCta.astro: buy links now use a launch-post-specific utm_source;
  add focus-visible rings.
- feed.xml.ts: same buy-now flip for the RSS/email CTA, with an email
  utm_source so that surface is measurable.
- config.ts: distinct per-surface utm_source (matching the site-wide
  benbalter-<surface> convention) so each buy surface is attributable.
- Reframe the "cut" book-lineage headline toward abundance.
- Regenerate the homepage hero banner (header.jpg) "COMING JULY 21, 2026"
  β†’ "OUT NOW" from the marketing repo's banner generator.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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