Skip to content

feat(welcome): chrome reveal intro on load - #52

Merged
bengidev merged 22 commits into
mainfrom
bengidev/welcome-chrome-reveal
Aug 31, 2026
Merged

feat(welcome): chrome reveal intro on load#52
bengidev merged 22 commits into
mainfrom
bengidev/welcome-chrome-reveal

Conversation

@bengidev

Copy link
Copy Markdown
Owner

Summary

  • Clamp the intro brand height to the viewport so the wide lockup no longer overflows and clips on welcome load.
  • Add welcome intro animation state that eases chrome opacity and brand scale over ~800ms.
  • Start the transformation immediately on load (no static show-off idle) and drive frames from the desktop render loop.

Test plan

  • Launch app with onboarding incomplete and confirm welcome opens with brand morph + chrome fade-in (no 3s idle).
  • Verify the OpenCore lockup fits within the window at intro start and settles to the resting hero size.
  • Confirm header, copy, and Enter CTA fade in during the reveal.
  • Press Enter after intro and verify the existing welcome-to-shell hero transition still works.
  • cargo test

The show-off brand size must respect the wide lockup aspect ratio so the
title does not overflow and clip at welcome window dimensions.
Track intro timing so the welcome screen can ease in header, copy, and
CTA chrome while the brand settles into its resting hero size.
Start the intro transformation immediately with a large-to-hero brand
scale and opacity reveal for header, copy, and enter CTA.
Request animation frames while the chrome reveal is active and pass
intro timing into the welcome view on each render.
Start chrome reveal timing on the first welcome render tick so the
animation is not partially consumed during app construction.
Wire accepts_enter to intro animation state so keyboard and command
handlers ignore completion until the brand settles at resting size.
Disable the Enter CTA and theme toggle while the brand morph is active
and guard theme toggling in the desktop handler.
Add tests for deferred intro clock, accepts_enter blocking, narrow
viewport clamping, and show-off brand settling at resting height.
Rely on accepts_enter command gating instead of disabling the button
so the CTA keeps its normal appearance while intro is active.
Remove disabled styling from the theme button and rely on handler-side
gating while the chrome reveal animation is active.
Model the welcome flex stack (titlebar, header, brand frame, copy, and
CTA) so the hero transition overlay starts at the on-screen brand center.
Share layout constants between the view and layout math.
Capture the morph start position from the post-resize viewport so the
transition overlay matches the welcome brand after the window grows.
Only the transition overlay renders the lockup while morphing so the
welcome and animated heroes cannot double up when positions differ.
Capture the morph start from the current welcome viewport and keep the
window size stable until the brand finishes moving to the title bar.
Sample the welcome brand image bounds each frame and capture that center
and height when the hero morph begins, instead of approximating layout.
Enter now persists onboarding, resizes the window, and routes directly
to the shell without the brand overlay animation.
Consolidate welcome completion into a single state transition, remove
dead hero layout helpers, and tighten intro input/focus gating.
Size the title and body to the rendered DisplayMd tagline in Space
Grotesk so the description no longer sits narrower than the headline.
Share welcome vertical layout budget across show-off height math, cache welcome callbacks, add desktop intro gating tests, and remove unused docked brand export.
@bengidev
bengidev marked this pull request as ready for review August 31, 2026 10:47
@bengidev
bengidev merged commit 0eb0fef into main Aug 31, 2026
3 checks passed
@bengidev
bengidev deleted the bengidev/welcome-chrome-reveal branch August 31, 2026 10:47
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