fix: Skip onboarding calls in podcast-only demo mode

- Add demoMode utility for consistent demo mode detection
- Skip onboarding API calls in OnboardingContext when in demo mode
- Redirect to /podcast-maker instead of /onboarding in demo mode
This commit is contained in:
ajaysi
2026-03-30 09:38:48 +05:30
parent 92bbe1d878
commit 43c6ceab2f
3 changed files with 67 additions and 0 deletions

View File

@@ -4,6 +4,7 @@ import { Box, CircularProgress, Typography } from '@mui/material';
import { CopilotKit } from "@copilotkit/react-core";
import { ClerkProvider, useAuth } from '@clerk/clerk-react';
import "@copilotkit/react-ui/styles.css";
import { shouldSkipOnboarding } from './utils/demoMode';
import Wizard from './components/OnboardingWizard/Wizard';
import MainDashboard from './components/MainDashboard/MainDashboard';
import SEODashboard from './components/SEODashboard/SEODashboard';
@@ -406,6 +407,11 @@ const InitialRouteHandler: React.FC = () => {
// 4. Has active subscription, check onboarding status
if (!isOnboardingComplete) {
// In demo mode, skip onboarding and go directly to podcast-maker
if (shouldSkipOnboarding()) {
console.log('InitialRouteHandler: Demo mode - skipping onboarding → Podcast Maker');
return <Navigate to="/podcast-maker" replace />;
}
console.log('InitialRouteHandler: Subscription active but onboarding incomplete → Onboarding');
return <Navigate to="/onboarding" replace />;
}

View File

@@ -1,6 +1,7 @@
import React, { createContext, useContext, useState, useEffect, useCallback, ReactNode } from 'react';
import { useAuth } from '@clerk/clerk-react';
import { apiClient } from '../api/client';
import { shouldSkipOnboarding } from '../utils/demoMode';
/**
* Onboarding Context
@@ -102,6 +103,13 @@ export const OnboardingProvider: React.FC<OnboardingProviderProps> = ({ children
setLoading(true);
setError(null);
// Skip onboarding fetch in demo mode - onboarding is disabled
if (shouldSkipOnboarding()) {
console.log('OnboardingContext: Skipping onboarding fetch in demo mode');
setLoading(false);
return;
}
console.log('OnboardingContext: Fetching onboarding data for authenticated user...');
// Call batch init endpoint
@@ -159,6 +167,12 @@ export const OnboardingProvider: React.FC<OnboardingProviderProps> = ({ children
// Separate effect to fetch data when explicitly requested
const initializeOnboarding = useCallback(() => {
if (isSignedIn && clerkLoaded) {
// Skip onboarding initialization in demo mode
if (shouldSkipOnboarding()) {
console.log('OnboardingContext: Skipping onboarding init in demo mode');
setLoading(false);
return;
}
console.log('OnboardingContext: Initializing onboarding data...');
fetchOnboardingData();
}

View File

@@ -0,0 +1,47 @@
/**
* Demo mode detection utilities for podcast-only demo mode.
*/
const DEMO_MODE_STORAGE_KEYS = [
'app_mode',
'demo_mode',
'podcast_only_demo_mode',
];
const DEMO_MODE_ENV_KEYS = [
'REACT_APP_APP_MODE',
'REACT_APP_DEMO_MODE',
'REACT_APP_PODCAST_ONLY_DEMO_MODE',
];
/**
* Check if podcast-only demo mode is enabled.
* Checks localStorage first, then environment variables.
*/
export function isPodcastOnlyDemoMode(): boolean {
// Check localStorage
for (const key of DEMO_MODE_STORAGE_KEYS) {
const value = (localStorage.getItem(key) || '').toLowerCase();
if (value === 'true' || value === 'podcast-only' || value === 'podcast_only') {
return true;
}
}
// Check environment variables
for (const key of DEMO_MODE_ENV_KEYS) {
const value = (process.env[key] || '').toLowerCase();
if (value === 'true' || value === 'podcast-only' || value === 'podcast_only') {
return true;
}
}
return false;
}
/**
* Check if the app should skip onboarding entirely.
* Returns true in podcast-only demo mode.
*/
export function shouldSkipOnboarding(): boolean {
return isPodcastOnlyDemoMode();
}