Skip to content

Project switcher backdrop: live-city showcase + landing swirl#103

Merged
thalida merged 3 commits into
mainfrom
feat/projects-backdrop
Jul 16, 2026
Merged

Project switcher backdrop: live-city showcase + landing swirl#103
thalida merged 3 commits into
mainfrom
feat/projects-backdrop

Conversation

@thalida

@thalida thalida commented Jul 16, 2026

Copy link
Copy Markdown
Owner

Reworks the project switcher's backdrop in both of its modes.

Switcher over a loaded city (modal)

Opening the switcher over a loaded city now turns the live city into the backdrop:

  • Hides the chrome (header / sidebars / footer) so the canvas fills the viewport.
  • Snaps the camera into a tight, low, slowly auto-rotating hero shot of the whole city.
  • Reveals the city crisp behind the overlay, with a hero-side scrim so the text keeps AA contrast.
  • Dismissing snaps back to the exact prior camera pose, selection, and open panels. Switching projects lets the new city own its framing instead (guarded on the source key).
  • Framing is computed against the viewport the canvas is about to fill, so the zoom is identical every time regardless of what was open. Honors prefers-reduced-motion (no spin).

Driven by a small view-layer controller (useSwitcherShowcase / SWITCHER_SHOWCASE) plus a showcase API on the camera rig; the city instance and all UI state stay mounted, so restore is a snapshot/replay, not a rebuild.

Cold-boot landing

The full-page landing gets a new backdrop: a WebGL domain-warped gradient (LandingBackdrop) — fbm noise warps a gem-palette color ramp into flowing organic bands (the "dark swirl" look flat CSS radial gradients can't do). Theme-aware (reads the --cc-gem-* tokens), prefers-reduced-motion aware (static frame), cold-boot only.

Also

  • Fixes a cold-boot chrome flash: the picker decision now runs pre-paint in main.tsx so the full-page landing covers the chrome from frame one.

Follow-up

Verification

just lint + just test green (2512 app tests, incl. the ProjectsView a11y audit). Visual pass by the author across cold-boot, the modal-over-city showcase, dismiss/restore, a real project switch, and reduced-motion.

🤖 Generated with Claude Code

thalida and others added 3 commits July 15, 2026 21:22
Open the project switcher over a loaded city and it now hides the chrome,
snaps the camera into a tight, low, auto-rotating hero shot of the whole
city, and reveals it behind the overlay (a touch of blur + a hero-side
scrim keep the text at AA contrast). Dismissing snaps back to the exact
prior camera pose, selection, and open panels; actually switching projects
lets the new city own its framing instead of restoring the old one.

The framing is computed against the viewport the canvas is about to fill,
not its current sidebar-constrained size, so the zoom is identical every
time regardless of what was open. Honors prefers-reduced-motion (no spin).

Also fixes a cold-boot chrome flash: the picker decision now runs pre-paint
in main.tsx so the full-page landing covers the chrome from frame one.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Replace the flat/CSS-radial landing backdrop with a small WebGL layer that
renders a domain-warped gem-palette gradient (LandingBackdrop): fbm noise
warps the color sample point so the gems flow into organic curved bands, the
look flat CSS radials can't produce. A positional sweep spreads all four gems
across the frame at once; an energy mask keeps it mostly-dark with the color
riding the ridges, and the central band stays calmer so the hero + cards read.

Theme-aware (resolves the --cc-gem-* tokens), honors prefers-reduced-motion
(renders one static frame), non-interactive, cold-boot landing only (the modal
still shows the live city). No CSS fallback: without WebGL the city can't
render anyway, so the canvas just stays transparent over .landing's flat fill.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@thalida
thalida merged commit cdd3a54 into main Jul 16, 2026
1 check passed
@thalida
thalida deleted the feat/projects-backdrop branch July 16, 2026 02:14
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