Skip to content

Conversation

@ibetitsmike
Copy link
Contributor

Overview

Implements a reusable splash screen system for feature announcements with automatic queuing and persistence.

Features

  • Queue System - Shows multiple splash screens one at a time based on priority
  • Persistence - Uses localStorage to track dismissed splashes (never shown again)
  • Priority System - Higher numbers = higher priority (3 shown before 2), priority 0 = never show
  • Mux Gateway Splash - First implementation promotes Mux Gateway with:
    • External link to redeem voucher: https://gateway.mux.coder.com/
    • "Open Settings" button that navigates to Settings → Providers
    • Clean design without unnecessary overlays

Implementation

File Change LoC
src/common/constants/storage.ts Add getSplashDismissedKey() +8
src/browser/components/splashScreens/index.ts Registry of splash configs +14
src/browser/components/splashScreens/SplashScreenProvider.tsx Queue manager +37
src/browser/components/splashScreens/SplashScreen.tsx Generic dialog wrapper +50
src/browser/components/splashScreens/muxGateway.tsx Mux Gateway content +35
src/browser/App.tsx Mount provider +3

Total: 149 lines added

Adding Future Splash Screens

Just two steps:

  1. Create component in splashScreens/newFeature.tsx
  2. Add to registry: { id: "new-feature", priority: 2, component: NewFeatureSplash }

The queue manager handles everything else automatically.


Generated with mux • Model: anthropic:claude-opus-4-1 • Thinking: high

- Add reusable splash screen dialog components with queue management
- Implement SplashScreenProvider to show splashes one at a time
- Add persistence via localStorage - dismissed splashes never show again
- Create first splash promoting Mux Gateway with voucher redemption link
- Integrate with Settings context for navigation to Providers section

Total: ~156 LoC across 6 files

_Generated with `mux`_
Priority 1 = highest priority (shown first), not lower priority
- Priority 3+ = Highest priority (shown first)
- Priority 2 = Medium priority
- Priority 1 = Lowest priority
- Priority 0 = Never show

This follows a more intuitive system where higher numbers mean more important.
- Display text directly without the gray box overlay
- Add proper spacing with space-y-3
- Apply text-muted for consistent styling
- Remove gray box overlay
- Use simple div with spacing
- Keep text styling consistent
@chatgpt-codex-connector
Copy link

Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits.
Repo admins can enable using credits for code reviews in their settings.

- Store viewed splash screen IDs in config.json instead of localStorage
- Add viewedSplashScreens field to ProjectsConfig type
- Create API endpoints for getting/marking viewed splash screens
- Update SplashScreenProvider to use config API
- Ensures persistence across devices and prevents repeated annoyances

This properly tracks splash screen state in the centralized mux config
rather than in browser localStorage, making it consistent across all
user devices and installations.
Follow React convention of PascalCase for component files
- Add DISABLE_SPLASH_SCREENS flag for easy disabling
- Make provider more defensive when API is not ready
- Remove process.env usage (not available in renderer)
Splash screens were blocking the UI during E2E tests, preventing tests from finding the Projects navigation element. Temporarily disabling splash screens until we have a better solution for test environment detection.
@ibetitsmike ibetitsmike added this pull request to the merge queue Dec 15, 2025
Merged via the queue into main with commit a92f3e8 Dec 15, 2025
19 of 20 checks passed
@ibetitsmike ibetitsmike deleted the mike/splash-screen-5532 branch December 15, 2025 12:32
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