Skip to content

feat(web): rework the whats-new audiences section into a pinned stage - #2154

Open
lumberman wants to merge 2 commits into
mainfrom
feat/watch-whats-new-audience-stage
Open

feat(web): rework the whats-new audiences section into a pinned stage#2154
lumberman wants to merge 2 commits into
mainfrom
feat/watch-whats-new-audience-stage

Conversation

@lumberman

Copy link
Copy Markdown
Collaborator

Follow-up to #2027. Rewrites the /watch/whats-new copy for its actual reader and rebuilds the audiences section around the question that copy is trying to land.

Copy

Written for a missionary or ministry partner whose workflow broke and who is looking for why — irritated or curious, non-technical — with org leadership as the secondary reader.

  • Leads with what changed and where to report breakage; adds a visible last-updated date backed by a machine-readable <time datetime> (a test keeps the two on the same day).
  • Cuts the sections that told the reader they are a rounding error, and the ones that promised rather than reported.
  • Replaces the promise-shaped paragraph in the partner letter with what has already shipped (linked) and what is being built now.
  • The ministry share is one module constant interpolated everywhere it appears, so a corrected figure cannot leave the page stating two different numbers about the same audience. A test fails on any literal that isn't one of the three legitimate print sites.

Audiences stage

The three cards now enter as a staircase hanging below the row and rise into it; hold there assembled, level and opaque; then two fade out while the third travels into the first column and the estimate question arrives beside it.

That hold did not previously exist — the fade began at contain 0% while the gather was still closing, so the finished row was never once on screen undisturbed. Measured at 1440x900: 475px of assembled row (375px of it pinned-still), with 525px of dwell left after the question lands for actually dragging the slider.

The section heading moved inside the pin, so it holds with the cards it names and leaves on their beat rather than scrolling away and leaving three cards and a question with nothing labelling them.

Also

  • Assistant phone uses the real ChatGPT app icon instead of a hand-drawn approximation.
  • FAQ gets the "tell us" card as a sticky sidebar, with "Expand all" moved next to the accordion.
  • The history-of-formats arc moves up to second on the page.
  • WhatsNewSelfId and WhatsNewAudienceCardBody removed.

Verification

  • tsc --noEmit, next build, Prettier — clean.
  • 3,474 tests passing.
  • Real-browser measurement at 1440x900, 1920x1080, 1280x720, 900 and 390 wide (Playwright + system Chromium against next build + next start, never next dev).
  • Page-load impact, median of 5 cold loads: FCP 156ms, LCP 188ms, CLS 0, 50 requests / 1,197KB. No new JS and no new requests — the choreography is declarative CSS scroll-driven animation.
  • Every new CSS guard was falsified once before being trusted (re-adding the removed offset floor, eating the dwell, shrinking the stage, hiding the heading with display, letting the heading outlive the cards — each goes red).

Notes for review

  • The stage's animation-range test previously read every contain a% b% out of the media block in source order and destructured positionally, so adding a rule above another silently reassigned every name. It now looks each range up by selector.
  • The heading is hidden with opacity only — it is the section's aria-labelledby target, so display/visibility would drop the section's accessible name partway down the page. Its box keeps its space; that leaves ~142px of empty band above the question, which is the deliberate cost of not reflowing the pinned group mid-hold.
  • apps/web/public/images/whats-new/chatgpt-app-icon.png is a third-party trademarked asset. Flagging for a call on whether vendoring it is acceptable here.

🤖 Generated with Claude Code

Rewrites the page copy for its actual reader — a missionary or ministry
partner whose workflow broke and who is looking for why — and rebuilds
the audiences section around the question that copy is trying to land.

Copy: leads with what changed and where to report breakage, drops the
sections that told the reader they are a rounding error, and replaces
the promise-shaped paragraph with what has actually shipped and what is
being built now. The ministry share is one constant interpolated
everywhere it appears, so a corrected figure cannot leave the page
stating two numbers about the same audience.

Audiences stage: the three cards enter as a staircase hanging below the
row and rise into it, hold there assembled and still, then two fade out
while the third travels into the first column and the estimate question
arrives beside it. The section heading is inside the pin, so it holds
with the cards it names and leaves with them.

Also: the assistant phone uses the real ChatGPT app icon, the FAQ gets
the "tell us" card as a sidebar, and the history-of-formats arc moves up
to second on the page.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@lumberman
lumberman force-pushed the feat/watch-whats-new-audience-stage branch from 42bc356 to 82b9ef9 Compare September 3, 2026 01:02
@railway-app

railway-app Bot commented Sep 3, 2026

Copy link
Copy Markdown

🚅 Deployed to the forge-pr-2154 environment in forge

Service Status Web Updated
@forge/web ✅ Success (View Logs) Sep 3, 2026 at 1:16 am UTC
@forge/manager ⏭️ Skipped (View Logs) Sep 3, 2026 at 1:08 am UTC
@forge/agentic-studio ⏭️ Skipped (View Logs) Sep 3, 2026 at 1:08 am UTC
8 services not affected by this PR
  • @forge/agentic
  • @forge/agentic-studio
  • @forge/roadmap
  • @forge/admin/db
  • @forge/manager
  • @forge/auth
  • @forge/admin/redis
  • @forge/admin

@railway-app
railway-app Bot temporarily deployed to forge / forge-pr-2154 September 3, 2026 01:02 Destroyed
CI's `format` and `lint (@forge/web)` jobs both flagged one object
literal in `whats-new-content.ts`. Verified with the jobs' own commands,
`pnpm run format:check` and `pnpm --filter @forge/web lint`, rather than
a Prettier run over the handful of files edited most recently — which is
what let this through.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant