Skip to content

fix(frontend): restore the startup screen and load transitions lost in the Start rewrite - #148

Merged
voltcrash merged 9 commits into
mainfrom
fix/initial-load-fade
Oct 18, 2026
Merged

voltcrash merged 9 commits into
mainfrom
fix/initial-load-fade

Conversation

@voltcrash

@voltcrash voltcrash commented Oct 18, 2026 •

Copy link
Copy Markdown
Owner

Summary

Before the TanStack Start rewrite, the page loaded behind a #startupScreen cover showing the TypingLoader. Once config and preferences were ready, the cover faded out (150ms), #app faded in (250ms), and body theme transitions turned on. The rewrite removed all of this, so the page content now lays itself out in plain view during load.

  • feat(styles): --animate-app-enter (fadeIn 0.25s ease-out) token
  • feat(app): app-owned isAppReady / isStartupFinished signals (app/startup.ts)
  • feat(layout): server-rendered StartupScreen (TypingLoader cover); fades out on request and accepts input during the fade. TypingLoader is marked SSR-safe in import boundaries.
  • feat(chrome): chrome runtime marks the app ready once its module and preferences have loaded, and still marks it ready if preferences fail, so the cover can't get stuck. The cookie prompt waits until the cover is gone, as it did before.
  • fix(chrome): restores the background .25s, transform .05s body transition after the app is ready
  • refactor(layout) / feat(layout): #app renders opacity-0 under the cover, then plays the entrance animation once ready. Client navigation keeps the element, so this runs once per load.
  • Reduced motion: the global motion-reduce rules disable the animations, and the cover is removed straight away.

Verification

  • Layout and import-layer unit tests pass; lint and typecheck pass
  • Dev server: the SSR HTML contains #startupScreen and #app.opacity-0. After hydration the cover is removed, #app gets animate-app-enter (ends at opacity 1), the body gets its transition, and the cookie modal opens after the cover is gone.
  • Full frontend unit suite: 2 failures, both environment-specific and unrelated to this change (foundation.spec.ts EXDEV cross-device /tmp rename; update/runtime.spec.tsx expects TESTING env)
  • Start e2e not run

🤖 Generated with Claude Code

voltcrash and others added 4 commits October 18, 2026 17:41
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Restores the startup fade the legacy bootstrap ran on #app before the
Start rewrite. CSS runs it on the server-rendered first paint; reduced
motion disables it through the global motion-reduce rules.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The legacy AppEffects enabled background/transform transitions on body
once preferences were ready, so theme changes animate without a flash
from the default theme at load. Start's chrome runtime dropped it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
voltcrash and others added 5 commits October 18, 2026 17:49
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Restores the TypingLoader cover the legacy index.html prerendered,
now as a Start component that fades itself out on request.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The startup screen and body theme transition key off one app-owned
readiness signal. The cookie prompt waits until the startup screen has
faded, as it did before the Start rewrite.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The startup screen covers first paint, so #app stays transparent until
the app is ready and then plays the entrance animation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Restores the pre-Start load sequence: the server renders the typing
loader over a transparent #app; when the chrome and preferences are
ready the loader fades out and the app fades in.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@voltcrash voltcrash changed the title fix(frontend): restore the initial-load fade lost in the Start rewrite fix(frontend): restore the startup screen and load transitions lost in the Start rewrite Oct 18, 2026
@voltcrash
voltcrash merged commit 6fc9e23 into main Oct 18, 2026
13 of 14 checks passed
@voltcrash
voltcrash deleted the fix/initial-load-fade branch October 18, 2026 12:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant