44// This is the heart of our app, designed to be simple but powerful
55
66import { useState , useCallback , useEffect , useMemo , memo } from 'react' ;
7- // import { useUser } from '@auth0/nextjs-auth0/client'; // Temporarily disabled due to Auth0 issues
7+ import { useUser } from '@auth0/nextjs-auth0/client' ;
88import dynamic from 'next/dynamic' ;
99import { motion , AnimatePresence } from 'framer-motion' ;
1010import { toast } from 'sonner' ;
@@ -91,9 +91,9 @@ const useTheme = () => {
9191} ;
9292
9393/**
94- * Simple Auth Header component
94+ * Simple Auth Header component with bypass support
9595 */
96- const AuthHeader = memo < { user : any } > ( ( { user } ) => (
96+ const AuthHeader = memo < { user : any ; authBypass : boolean ; onBypass : ( ) => void } > ( ( { user, authBypass , onBypass } ) => (
9797 < div className = "fixed top-4 right-4 z-50" >
9898 { user ? (
9999 < div className = "flex items-center space-x-3 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 px-4 py-2 rounded-lg shadow" >
@@ -114,9 +114,28 @@ const AuthHeader = memo<{ user: any }>(({ user }) => (
114114 Sign out
115115 </ button >
116116 </ div >
117+ ) : authBypass ? (
118+ < div className = "flex items-center space-x-2 bg-orange-100 dark:bg-orange-900/20 text-orange-700 dark:text-orange-400 px-4 py-2 rounded-lg text-sm border border-orange-200 dark:border-orange-800" >
119+ < svg className = "w-4 h-4" fill = "none" stroke = "currentColor" viewBox = "0 0 24 24" >
120+ < path strokeLinecap = "round" strokeLinejoin = "round" strokeWidth = "2" d = "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L4.082 16.5c-.77.833.192 2.5 1.732 2.5z" />
121+ </ svg >
122+ < span > Guest Mode</ span >
123+ </ div >
117124 ) : (
118- < div className = "bg-gray-100 dark:bg-gray-700 text-gray-500 dark:text-gray-400 px-4 py-2 rounded-lg text-sm border" >
119- Demo Mode - Auth Disabled
125+ < div className = "flex items-center space-x-2" >
126+ < button
127+ onClick = { ( ) => window . location . href = '/api/auth/login' }
128+ className = "bg-blue-500 hover:bg-blue-600 text-white px-4 py-2 rounded-lg text-sm transition-colors"
129+ >
130+ Sign in
131+ </ button >
132+ < button
133+ onClick = { onBypass }
134+ className = "bg-gray-500 hover:bg-gray-600 text-white px-3 py-2 rounded-lg text-sm transition-colors"
135+ title = "Continue without signing in"
136+ >
137+ Skip
138+ </ button >
120139 </ div >
121140 ) }
122141 </ div >
@@ -460,11 +479,37 @@ const OutputFormatSelector: React.FC<{
460479} ;
461480
462481export default function HomePage ( ) {
463- // Auth state - temporarily disabled to fix authentication issues
464- // const { user, error: userError, isLoading: userLoading } = useUser();
465- const user = null ; // Mock user for demo
466- const userError : Error | null = null ;
467- const userLoading = false ;
482+ // Auth state with bypass mechanism
483+ const { user, error : userError , isLoading : userLoading } = useUser ( ) ;
484+ const [ authBypass , setAuthBypass ] = useState ( false ) ;
485+ const [ authTimeout , setAuthTimeout ] = useState ( false ) ;
486+
487+ // Auto-bypass auth after 10 seconds if loading
488+ useEffect ( ( ) => {
489+ const timer = setTimeout ( ( ) => {
490+ if ( userLoading && ! user && ! userError ) {
491+ console . log ( '🔄 Auth taking too long, enabling bypass mode' ) ;
492+ setAuthTimeout ( true ) ;
493+ setAuthBypass ( true ) ;
494+ toast . info ( 'Authentication is taking longer than expected. Continuing in guest mode.' , {
495+ duration : 5000 ,
496+ } ) ;
497+ }
498+ } , 10000 ) ;
499+
500+ return ( ) => clearTimeout ( timer ) ;
501+ } , [ userLoading , user , userError ] ) ;
502+
503+ // Auto-bypass if there's an auth error
504+ useEffect ( ( ) => {
505+ if ( userError ) {
506+ console . log ( '❌ Auth error detected, enabling bypass mode:' , userError ) ;
507+ setAuthBypass ( true ) ;
508+ toast . warning ( 'Authentication failed. Continuing in guest mode.' , {
509+ duration : 5000 ,
510+ } ) ;
511+ }
512+ } , [ userError ] ) ;
468513
469514 // Form state
470515 const [ selectedFile , setSelectedFile ] = useState < File | null > ( null ) ;
@@ -764,6 +809,14 @@ export default function HomePage() {
764809 setCurrentSlideIndex ( 0 ) ;
765810 } , [ ] ) ;
766811
812+ const handleAuthBypass = useCallback ( ( ) => {
813+ setAuthBypass ( true ) ;
814+ console . log ( '🔓 User manually bypassed authentication' ) ;
815+ toast . success ( 'Continuing in guest mode. You can still use all features!' , {
816+ duration : 4000 ,
817+ } ) ;
818+ } , [ ] ) ;
819+
767820 // Keyboard shortcuts
768821 useKeyboardShortcuts ( {
769822 [ SHORTCUTS . NEW ] : handleNewPresentation ,
@@ -772,16 +825,16 @@ export default function HomePage() {
772825 [ SHORTCUTS . HELP ] : ( ) => setShowHelpModal ( true )
773826 } , { enabled : ! isAnalyzing } ) ;
774827
775- // Loading and error states
776- if ( userLoading ) return < LoadingState /> ;
777- if ( userError ) return < ErrorState error = { ( userError as Error ) ?. message || 'An error occurred' } /> ;
828+ // Loading and error states with bypass support
829+ if ( userLoading && ! authBypass && ! authTimeout ) return < LoadingState /> ;
830+ if ( userError && ! authBypass ) return < ErrorState error = { ( userError as Error ) ?. message || 'An error occurred' } /> ;
778831
779832 // Editor view - Apple-style presentation editor
780833 if ( viewMode === 'editor' && currentPresentation ) {
781834 return (
782835 < div className = "min-h-screen bg-white dark:bg-black transition-colors duration-500" >
783836 < MinimalBackground />
784- < AuthHeader user = { user } />
837+ < AuthHeader user = { user } authBypass = { authBypass } onBypass = { handleAuthBypass } />
785838
786839 { /* Header */ }
787840 < div className = "bg-white/80 dark:bg-black/80 backdrop-blur-xl border-b border-gray-200/50 dark:border-gray-700/50 p-3 sm:p-4" >
@@ -849,7 +902,7 @@ export default function HomePage() {
849902 return (
850903 < div className = "min-h-screen bg-white dark:bg-black transition-colors duration-500" >
851904 < MinimalBackground />
852- < AuthHeader user = { user } />
905+ < AuthHeader user = { user } authBypass = { authBypass } onBypass = { handleAuthBypass } />
853906
854907 { /* Main Content */ }
855908 < main className = "relative z-10 min-h-screen flex flex-col items-center justify-start px-4 sm:px-6 py-6 sm:py-12 md:py-20" >
0 commit comments