Skip to content

Homepage: list the feature tabs beside the stage on wide screens - #1208

Merged
ngnijland merged 11 commits into
masterfrom
claude/homepage-feature-tabs-list
Oct 9, 2026
Merged

ngnijland merged 11 commits into
masterfrom
claude/homepage-feature-tabs-list

Conversation

@ngnijland

@ngnijland ngnijland commented Oct 7, 2026 •

Copy link
Copy Markdown
Collaborator

Follow-up to #1207 (merged).

Summary

From lg (1024px) the feature tabs become a list beside the stage, after Linear's and Raycast's feature sections. Below lg nothing changes from #1207.

  • List layout. A ~17rem column on the left with the stage on the right. Only the selected tab opens to show its description. The progress line runs down beside the list in the chapter's colour and draws in from the top as it scrolls into view. The play button sits at the foot of the list, level with the bottom of the stage.
  • Keyboard. Up and Down move along the list, Left and Right along the row, and the tab list sets aria-orientation to match. bindRovingKeys now accepts a function for the orientation.
  • Transitions move vertically along the list (going forward, the media moves up). Swipes still move the media sideways.
  • Agentic Coding extras. The terminal and the stat sit side by side under the stage instead of beside it, and the terminal stretches to the stat's height.

Trade-off: the stage is about 770px wide at full width instead of 1080px, so the media shows smaller. The focus zoom from #1207 offsets some of that.

Test plan

  • npm run lint, format:check, typecheck, build, knip in docs/; npm test (94 pass)
  • Headless Chrome on /home-next/ at 1280px: the list, a mid-transition frame, a 6-item list (Testing), the Agentic Coding extras, and ArrowDown moving along the list
  • At 900px and 390px the row layout matches Homepage: give the feature tabs motion of their own #1207

🤖 Generated with Claude Code

ngnijland and others added 10 commits October 7, 2026 22:13
- Images zoom slowly in on the detail their tab describes. Chapter items
  take an optional `focus` (x, y and zoom); the zoom moves the focus to
  the middle of the stage without showing past the image's edges, and
  lands a second before autoplay moves on.
- Changing tabs slides the old media away as it blurs and fades, and
  brings the new media into focus from the other side. Going forward the
  media moves left, the way the tabs read; autoplay always moves forward.
- On touch screens a sideways swipe on the stage changes tabs. The media
  follows the finger, resists past the first and last tab, and settles
  back after a short swipe; vertical swipes still scroll the page.
- The phone caption swaps in from the side the media comes from.
- The progress line fills in the chapter's colour, and the play button
  lights up in it on hover, so the tabs look unlike the gallery.
- The other tabs' descriptions step back until hovered.
- Reduced motion keeps the instant switch, with no zoom or drag.
- Template literals in Tabs.astro no longer end in a word: knip reads
  that as a tagged template and missed the script's imports.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- From lg the tabs form a list beside the stage instead of a row under
  it. Only the selected tab opens to show its description, and the
  progress line runs down beside the list, drawing in from the top.
- Arrow keys follow the layout: up and down the list, left and right
  along the row. The tab list reports its orientation.
- Panels change vertically along the list, going up as the list reads;
  a swipe still moves them sideways.
- The Agentic Coding extras sit side by side under the stage, the
  terminal as tall as the stat beside it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- A blurred copy of the media fills the whole stage, and the media sits
  inset on it with rounded corners, instead of filling the stage with a
  glow only around its edges. Videos inset too.
- An image now zooms within its own rounded rectangle, which clips it, so
  the inset stays while it zooms. The script measures the image to set
  the zoom and the clip.
- Push notifications zooms in less, so the arrow panel stays in view in
  its narrow portrait frame.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ge-feature-tabs-list

# Conflicts:
#	docs/src/components/home/presentations/Tabs.astro
The play, pause and replay button is round, borderless and grey in both
the tabs and the gallery, so the `round` option is gone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- InsetMedia.astro holds the media that sits inset on a full-frame
  backdrop, shrinking to fit so its rounded corners sit on its own
  edges. The gallery and the tabs both use it instead of each repeating
  the frame, the sizing classes and why they work.
- Tabs: the panel-change animations no longer need an ID to spare the
  focus zoom, which is a transition on the image inside. The swipe keeps
  how far the media followed the finger instead of reading it back from
  the style, and checks the first and last tab directly. The media to
  animate is looked up once.
- Tabs: the ResizeObserver is disconnected before the tabs set up again,
  since the ClientRouter keeps the script running from page to page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ge-feature-tabs-list

The list layout's media query listener is removed before the tabs set up
again, alongside the ResizeObserver.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Base automatically changed from claude/homepage-feature-tabs-motion to master October 9, 2026 18:31
…ture-tabs-list

# Conflicts:
#	docs/src/components/home/presentations/Tabs.astro
@ngnijland
ngnijland enabled auto-merge (squash) October 9, 2026 18:32
@ngnijland
ngnijland merged commit c74dc53 into master Oct 9, 2026
1 check passed
@ngnijland
ngnijland deleted the claude/homepage-feature-tabs-list branch October 9, 2026 18:34
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