Prakhar Singh commited on
Commit
6a144bd
·
1 Parent(s): b418a95

Auth page changes added

Browse files
Frontend/index.html CHANGED
@@ -4,7 +4,7 @@
4
  <meta charset="UTF-8" />
5
  <link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>package</title>
8
  </head>
9
  <body>
10
  <div id="root"></div>
 
4
  <meta charset="UTF-8" />
5
  <link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>Prep-AI</title>
8
  </head>
9
  <body>
10
  <div id="root"></div>
Frontend/src/components/AuthModal.tsx ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // src/components/AuthModal.tsx
2
+
3
+ import React from 'react';
4
+ import { X } from 'lucide-react';
5
+
6
+ interface AuthModalProps {
7
+ isOpen: boolean;
8
+ onClose: () => void;
9
+ children: React.ReactNode;
10
+ }
11
+
12
+ const AuthModal: React.FC<AuthModalProps> = ({ isOpen, onClose, children }) => {
13
+ if (!isOpen) return null;
14
+
15
+ return (
16
+ // Backdrop/Overlay: Fixed position, full screen, dark, and translucent
17
+ <div
18
+ className="fixed inset-0 z-[100] bg-black bg-opacity-80 backdrop-blur-sm flex items-center justify-center p-4 transition-opacity duration-300"
19
+ onClick={onClose} // Close the modal when clicking outside
20
+ >
21
+ {/* Modal Content Container: Prevent closing when clicking on the form itself */}
22
+ <div
23
+ className="relative w-full max-w-md bg-slate-900 border border-blue-500/30 rounded-xl shadow-2xl animate-fade-in-up"
24
+ onClick={(e) => e.stopPropagation()}
25
+ >
26
+ {/* Close Button */}
27
+ <button
28
+ className="absolute top-4 right-4 p-2 text-gray-400 hover:text-blue-400 transition-colors z-10"
29
+ onClick={onClose}
30
+ >
31
+ <X className="w-6 h-6" />
32
+ </button>
33
+
34
+ {/* Children (SignIn or SignUp content) */}
35
+ <div className="p-8 pt-10">
36
+ {children}
37
+ </div>
38
+ </div>
39
+ </div>
40
+ );
41
+ };
42
+
43
+ export default AuthModal;
Frontend/src/components/auth/SignIn.tsx ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // src/components/SignIn.tsx (Modified for Modal)
2
+
3
+ import React from 'react';
4
+ import { Mail, Lock, LogIn, Chrome, X } from 'lucide-react';
5
+
6
+ // Added onClose prop to handle form-internal links/closing
7
+ interface SignInProps {
8
+ onClose: () => void;
9
+ onSwitchToSignUp: () => void;
10
+ }
11
+
12
+ const SignIn: React.FC<SignInProps> = ({ onClose, onSwitchToSignUp }) => {
13
+ return (
14
+ // Note: The outer 'div' styling has been removed, as the modal wrapper provides the background and padding.
15
+ // The inner container's styling is now applied by the AuthModal.tsx parent.
16
+ <>
17
+ <h2 className="text-3xl font-bold mb-8 text-center text-white">
18
+ Welcome Back
19
+ </h2>
20
+
21
+ {/* --- Sign In Form --- */}
22
+ <form className="space-y-5">
23
+ {/* Email Input */}
24
+ <div>
25
+ <label htmlFor="email" className="block text-sm font-medium mb-1 text-gray-300">Email Address</label>
26
+ <div className="relative">
27
+ <Mail className="w-5 h-5 absolute left-3 top-1/2 transform -translate-y-1/2 text-blue-400" />
28
+ <input
29
+ id="email"
30
+ type="email"
31
+ placeholder="you@example.com"
32
+ className="w-full pl-10 pr-4 py-3 border rounded-lg focus:outline-none focus:ring-2 bg-slate-800 border-slate-700 text-white focus:ring-blue-500 transition-colors"
33
+ />
34
+ </div>
35
+ </div>
36
+
37
+ {/* Password Input */}
38
+ <div>
39
+ <label htmlFor="password" className="block text-sm font-medium mb-1 text-gray-300">Password</label>
40
+ <div className="relative">
41
+ <Lock className="w-5 h-5 absolute left-3 top-1/2 transform -translate-y-1/2 text-blue-400" />
42
+ <input
43
+ id="password"
44
+ type="password"
45
+ placeholder="••••••••"
46
+ className="w-full pl-10 pr-4 py-3 border rounded-lg focus:outline-none focus:ring-2 bg-slate-800 border-slate-700 text-white focus:ring-blue-500 transition-colors"
47
+ />
48
+ </div>
49
+ </div>
50
+
51
+ {/* Sign In Button */}
52
+ <button
53
+ type="submit"
54
+ className="w-full px-5 py-3 rounded-lg bg-gradient-to-r from-blue-500 to-gray-500 hover:from-blue-600 hover:to-blue-500 transition shadow-lg shadow-blue-500/50 text-lg font-semibold flex items-center justify-center gap-2 mt-6 text-white"
55
+ >
56
+ <LogIn className="w-5 h-5" />
57
+ Sign In
58
+ </button>
59
+ </form>
60
+
61
+ <div className="flex items-center my-6">
62
+ <div className="flex-grow border-t border-slate-700"></div>
63
+ <span className="flex-shrink mx-4 text-sm text-gray-400">OR</span>
64
+ <div className="flex-grow border-t border-slate-700"></div>
65
+ </div>
66
+
67
+ {/* --- Social Sign In --- */}
68
+ <button
69
+ className="w-full px-5 py-3 rounded-lg border-2 border-blue-400 text-blue-400 hover:bg-blue-400/10 transition-all font-semibold flex items-center justify-center gap-3 bg-slate-900"
70
+ >
71
+ <Chrome className="w-5 h-5" />
72
+ Sign In with Google
73
+ </button>
74
+
75
+ <p className="mt-8 text-center text-sm text-gray-400">
76
+ Don't have an account?
77
+ <button type="button" onClick={onSwitchToSignUp} className="ml-2 font-medium text-blue-400 hover:text-blue-300 transition-colors">
78
+ Sign Up
79
+ </button>
80
+ </p>
81
+ </>
82
+ );
83
+ };
84
+
85
+ export default SignIn;
Frontend/src/components/auth/SignUp.tsx ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // src/components/SignUp.tsx (Modified for Modal)
2
+
3
+ import React from 'react';
4
+ import { User, Mail, Lock, UserPlus, Chrome, X } from 'lucide-react';
5
+
6
+ // Added onClose prop to handle form-internal links/closing
7
+ interface SignUpProps {
8
+ onClose: () => void;
9
+ onSwitchToSignIn: () => void;
10
+ }
11
+
12
+ const SignUp: React.FC<SignUpProps> = ({ onClose, onSwitchToSignIn }) => {
13
+ return (
14
+ // Note: The outer 'div' styling has been removed, as the modal wrapper provides the background and padding.
15
+ <>
16
+ <h2 className="text-3xl font-bold mb-8 text-center text-white">
17
+ Create Your Account
18
+ </h2>
19
+ {/* --- Sign Up Form --- */}
20
+ <form className="space-y-5">
21
+ {/* Name Input */}
22
+ <div>
23
+ <label htmlFor="name" className="block text-sm font-medium mb-1 text-gray-300">Full Name</label>
24
+ <div className="relative">
25
+ <User className="w-5 h-5 absolute left-3 top-1/2 transform -translate-y-1/2 text-blue-400" />
26
+ <input
27
+ id="name"
28
+ type="text"
29
+ placeholder="John Doe"
30
+ className="w-full pl-10 pr-4 py-3 border rounded-lg focus:outline-none focus:ring-2 bg-slate-800 border-slate-700 text-white focus:ring-blue-500 transition-colors"
31
+ />
32
+ </div>
33
+ </div>
34
+
35
+ {/* Email Input */}
36
+ <div>
37
+ <label htmlFor="email" className="block text-sm font-medium mb-1 text-gray-300">Email Address</label>
38
+ <div className="relative">
39
+ <Mail className="w-5 h-5 absolute left-3 top-1/2 transform -translate-y-1/2 text-blue-400" />
40
+ <input
41
+ id="email"
42
+ type="email"
43
+ placeholder="you@example.com"
44
+ className="w-full pl-10 pr-4 py-3 border rounded-lg focus:outline-none focus:ring-2 bg-slate-800 border-slate-700 text-white focus:ring-blue-500 transition-colors"
45
+ />
46
+ </div>
47
+ </div>
48
+
49
+ {/* Password Input */}
50
+ <div>
51
+ <label htmlFor="password" className="block text-sm font-medium mb-1 text-gray-300">Password</label>
52
+ <div className="relative">
53
+ <Lock className="w-5 h-5 absolute left-3 top-1/2 transform -translate-y-1/2 text-blue-400" />
54
+ <input
55
+ id="password"
56
+ type="password"
57
+ placeholder="••••••••"
58
+ className="w-full pl-10 pr-4 py-3 border rounded-lg focus:outline-none focus:ring-2 bg-slate-800 border-slate-700 text-white focus:ring-blue-500 transition-colors"
59
+ />
60
+ </div>
61
+ </div>
62
+
63
+ {/* Confirm Password Input */}
64
+ <div>
65
+ <label htmlFor="confirm-password" className="block text-sm font-medium mb-1 text-gray-300">Confirm Password</label>
66
+ <div className="relative">
67
+ <Lock className="w-5 h-5 absolute left-3 top-1/2 transform -translate-y-1/2 text-blue-400" />
68
+ <input
69
+ id="confirm-password"
70
+ type="password"
71
+ placeholder="••••••••"
72
+ className="w-full pl-10 pr-4 py-3 border rounded-lg focus:outline-none focus:ring-2 bg-slate-800 border-slate-700 text-white focus:ring-blue-500 transition-colors"
73
+ />
74
+ </div>
75
+ </div>
76
+
77
+ {/* Sign Up Button */}
78
+ <button
79
+ type="submit"
80
+ className="w-full px-5 py-3 rounded-lg bg-gradient-to-r from-blue-500 to-gray-500 hover:from-blue-600 hover:to-blue-500 transition shadow-lg shadow-blue-500/50 text-lg font-semibold flex items-center justify-center gap-2 mt-6 text-white"
81
+ >
82
+ <UserPlus className="w-5 h-5" />
83
+ Sign Up
84
+ </button>
85
+ </form>
86
+
87
+ <div className="flex items-center my-6">
88
+ <div className="flex-grow border-t border-slate-700"></div>
89
+ <span className="flex-shrink mx-4 text-sm text-gray-400">OR</span>
90
+ <div className="flex-grow border-t border-slate-700"></div>
91
+ </div>
92
+
93
+ {/* --- Social Sign Up --- */}
94
+ <button
95
+ className="w-full px-5 py-3 rounded-lg border-2 border-blue-400 text-blue-400 hover:bg-blue-400/10 transition-all font-semibold flex items-center justify-center gap-3 bg-slate-900"
96
+ >
97
+ <Chrome className="w-5 h-5" />
98
+ Sign Up with Google
99
+ </button>
100
+
101
+ <p className="mt-8 text-center text-sm text-gray-400">
102
+ Already have an account?
103
+ <button type="button" onClick={onSwitchToSignIn} className="ml-2 font-medium text-blue-400 hover:text-blue-300 transition-colors">
104
+ Sign In
105
+ </button>
106
+ </p>
107
+ </>
108
+ );
109
+ };
110
+
111
+ export default SignUp;
Frontend/src/pages/home.tsx CHANGED
@@ -1,322 +1,351 @@
1
  import React, { useState, useEffect } from 'react';
2
  import { Sparkles, Zap, Target, Clock, Award, ChevronRight, Menu, X } from 'lucide-react';
 
 
 
3
 
4
  interface Feature {
5
- icon: React.ReactNode;
6
- title: string;
7
- description: string;
8
  }
9
 
10
  interface Step {
11
- step: string;
12
- title: string;
13
- desc: string;
14
  }
15
 
16
  const AIInterviewPlatform: React.FC = () => {
17
- const [isMenuOpen, setIsMenuOpen] = useState<boolean>(false);
18
- const [scrolled, setScrolled] = useState<boolean>(false);
19
 
20
- useEffect(() => {
21
- const handleScroll = (): void => {
22
- setScrolled(window.scrollY > 50);
 
 
 
 
 
 
 
23
  };
24
- window.addEventListener('scroll', handleScroll);
25
- return () => window.removeEventListener('scroll', handleScroll);
26
- }, []);
27
 
28
- const features: Feature[] = [
29
- {
30
- icon: <Sparkles className="w-8 h-8" />,
31
- title: "AI-Powered Questions",
32
- description: "Dynamic questions adapted to your skill level and role"
33
- },
34
- {
35
- icon: <Zap className="w-8 h-8" />,
36
- title: "Instant Feedback",
37
- description: "Get real-time analysis and improvement suggestions"
38
- },
39
- {
40
- icon: <Target className="w-8 h-8" />,
41
- title: "Role-Specific Prep",
42
- description: "Tailored scenarios for your target position"
43
- },
44
- {
45
- icon: <Clock className="w-8 h-8" />,
46
- title: "Practice Anytime",
47
- description: "24/7 access to unlimited mock interviews"
48
- },
49
- {
50
- icon: <Award className="w-8 h-8" />,
51
- title: "Performance Analytics",
52
- description: "Track your progress with detailed insights"
53
- }
54
- ];
55
 
56
- const steps: Step[] = [
57
- { step: "01", title: "Choose Your Role", desc: "Select the job position you're preparing for" },
58
- { step: "02", title: "Practice Interview", desc: "Answer AI-generated questions in real-time" },
59
- { step: "03", title: "Get Feedback", desc: "Receive detailed analysis and improvement tips" }
60
- ];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
 
62
- return (
 
 
 
 
 
 
63
  <div className="w-full min-h-screen bg-gradient-to-br from-blue-900 to-gray-400 from-blue-900 text-white **overflow-x-hidden**">
64
- {/* Navigation Bar */}
65
- <nav className={`fixed top-0 left-0 right-0 w-full z-50 transition-all duration-300 ${scrolled ? 'bg-slate-900/95 backdrop-blur-md shadow-xl' : 'bg-slate-900/80 backdrop-blur-sm'}`}>
66
- <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
67
- <div className="flex justify-between items-center h-20">
68
- {/* Logo */}
69
- <div className="flex items-center space-x-3">
70
- <div className="bg-gradient-to-br from-blue-500 to-gray-400 p-2 rounded-lg">
71
- <Sparkles className="w-6 h-6 text-white" />
72
- </div>
73
  <span className="text-2xl font-bold bg-gradient-to-r from-blue-500 to-gray-400 bg-clip-text text-transparent">
74
- InterviewAI
75
- </span>
76
- </div>
77
-
78
  {/* Desktop Navigation */}
79
- <div className="hidden lg:flex items-center space-x-8">
80
- <a href="#home" className="text-gray-200 hover:text-blue-400 transition-colors font-medium">
81
- Home
82
- </a>
83
- <a href="#about" className="text-gray-200 hover:text-blue-400 transition-colors font-medium">
84
- About
85
- </a>
86
- <a href="#features" className="text-gray-200 hover:text-blue-400 transition-colors font-medium">
87
- Features
88
- </a>
89
- <a href="#how-it-works" className="text-gray-200 hover:text-blue-400 transition-colors font-medium">
90
- How It Works
91
- </a>
92
- <button className="px-6 py-2.5 rounded-lg border-2 border-blue-400 text-blue-400 hover:bg-blue-400/10 transition-all font-medium">
93
- Sign In
94
- </button>
95
- <button className="px-6 py-2.5 rounded-lg bg-gradient-to-r from-blue-500 to-blue-500 hover:from-blue-600 hover:to-blue-900 transition-all shadow-lg shadow-blue-500/30 font-medium">
96
- Sign Up
97
- </button>
98
- </div>
99
- {/* Mobile Menu Button */}
100
- <button
101
- className="lg:hidden p-2 rounded-lg hover:bg-white/10 transition-colors"
102
- onClick={() => setIsMenuOpen(!isMenuOpen)}
103
- >
104
- {isMenuOpen ? <X className="w-6 h-6" /> : <Menu className="w-6 h-6" />}
105
- </button>
106
- </div>
107
- </div>
108
  {/* Mobile Menu */}
109
- {isMenuOpen && (
110
- <div className="lg:hidden border-t border-white/10 bg-slate-900/98 backdrop-blur-md">
111
- <div className="px-4 py-4 space-y-3 max-w-7xl mx-auto">
112
- <a
113
- href="#home"
114
- className="block py-3 px-4 rounded-lg text-gray-200 hover:bg-blue-500/10 hover:text-blue-400 transition-all font-medium"
115
- onClick={() => setIsMenuOpen(false)}
116
- >
117
- Home
118
- </a>
119
- <a
120
- href="#about"
121
- className="block py-3 px-4 rounded-lg text-gray-200 hover:bg-blue-500/10 hover:text-blue-400 transition-all font-medium"
122
- onClick={() => setIsMenuOpen(false)}
123
- >
124
- About
125
- </a>
126
- <a
127
- href="#features"
128
- className="block py-3 px-4 rounded-lg text-gray-200 hover:bg-blue-500/10 hover:text-blue-400 transition-all font-medium"
129
- onClick={() => setIsMenuOpen(false)}
130
- >
131
- Features
132
- </a>
133
- <a
134
- href="#how-it-works"
135
- className="block py-3 px-4 rounded-lg text-gray-200 hover:bg-blue-500/10 hover:text-blue-400 transition-all font-medium"
136
- onClick={() => setIsMenuOpen(false)}
137
- >
138
- How It Works
139
- </a>
140
- <button className="w-full py-3 rounded-lg border-2 border-blue-400 text-blue-400 hover:bg-blue-400/10 transition-all font-medium">
141
- Sign In
142
- </button>
143
- <button className="w-full py-3 rounded-lg bg-gradient-to-r from-blue-500 to-gray-500 hover:from-blue-600 hover:to-gray-600 transition-all font-medium">
144
- Sign Up
145
- </button>
146
- </div>
147
- </div>
148
- )}
149
- </nav>
150
- {/* Hero Section */}
151
- <section id="home" className="min-h-screen flex items-center pt-20 pb-20 px-4 sm:px-6 lg:px-8 bg-black">
152
- <div className="max-w-7xl mx-auto text-center">
153
- <div className="inline-block mb-4 px-4 py-2 bg-blue-500/20 rounded-full border border-blue-500/50">
154
- <span className="text-sm font-semibold text-blue-300">✨ AI-Powered Interview Practice</span>
155
- </div>
156
-
157
- <h1 className="text-5xl sm:text-6xl lg:text-7xl font-bold mb-6 leading-tight">
158
- Master Your Next
159
- <span className="block bg-gradient-to-r from-blue-500 via-gray-400 to-blue-500 bg-clip-text text-transparent">
160
- Interview with AI
161
- </span>
162
- </h1>
163
-
164
- <p className="text-xl text-gray-300 mb-10 max-w-3xl mx-auto">
165
- Practice with our intelligent AI interviewer, get instant feedback, and land your dream job with confidence.
166
- </p>
167
-
168
- <div className="flex flex-col sm:flex-row gap-4 justify-center items-center">
169
- <button className="px-8 py-4 rounded-lg bg-gradient-to-r from-blue-500 to-gray-500 hover:from-blue-600 hover:to-blue-500 transition shadow-lg shadow-blue-500/50 flex items-center gap-2 text-lg font-semibold">
170
- Start Free Trial
171
- <ChevronRight className="w-5 h-5" />
172
- </button>
173
- <button className="px-8 py-4 rounded-lg border-2 border-blue-400 hover:bg-blue-400/10 transition text-lg font-semibold">
174
- Watch Demo
175
- </button>
176
- </div>
177
- {/* Stats */}
178
- <div className="mt-20 grid grid-cols-1 sm:grid-cols-3 gap-8 max-w-4xl mx-auto">
179
- <div className="bg-white/5 backdrop-blur-sm rounded-xl p-6 border border-white/10">
180
- <div className="text-4xl font-bold text-blue-600 mb-2">50K+</div>
181
- <div className="text-gray-400">Successful Interviews</div>
182
- </div>
183
- <div className="bg-white/5 backdrop-blur-sm rounded-xl p-6 border border-white/10">
184
- <div className="text-4xl font-bold text-blue-600 mb-2">95%</div>
185
- <div className="text-gray-400">Success Rate</div>
186
- </div>
187
- <div className="bg-white/5 backdrop-blur-sm rounded-xl p-6 border border-white/10">
188
- <div className="text-4xl font-bold text-blue-600 mb-2">24/7</div>
189
- <div className="text-gray-400">AI Availability</div>
190
- </div>
191
- </div>
192
- </div>
193
- </section>
194
- {/* About Section */}
195
- <section id="about" className="py-20 px-4 sm:px-6 lg:px-8 bg-black/40">
196
- <div className="max-w-6xl mx-auto">
197
- <div className="grid grid-cols-1 lg:grid-cols-2 gap-12 items-center">
198
- <div>
199
- <h2 className="text-4xl sm:text-5xl font-bold mb-6">
200
- About InterviewAI
201
- </h2>
202
- <p className="text-lg text-gray-300 mb-6">
203
- We're revolutionizing interview preparation with cutting-edge AI technology. Our platform helps candidates practice, learn, and succeed in their job interviews.
204
- </p>
205
- <p className="text-lg text-gray-300 mb-6">
206
- Founded by industry experts and powered by advanced machine learning, InterviewAI provides personalized interview experiences that adapt to your unique needs and goals.
207
- </p>
208
- <div className="space-y-4">
209
- <div className="flex items-center gap-3">
210
- <div className="w-2 h-2 bg-blue-400 rounded-full"></div>
211
- <span className="text-gray-300">Advanced AI interview simulations</span>
212
- </div>
213
- <div className="flex items-center gap-3">
214
- <div className="w-2 h-2 bg-blue-600 rounded-full"></div>
215
- <span className="text-gray-300">Personalized feedback and coaching</span>
216
- </div>
217
- <div className="flex items-center gap-3">
218
- <div className="w-2 h-2 bg-blue-400 rounded-full"></div>
219
- <span className="text-gray-300">Industry-leading success rates</span>
220
- </div>
221
- </div>
222
- </div>
223
- <div className="bg-gradient-to-br from-blue-900/50 to-gray-900/50 rounded-2xl p-8 border border-gray-200/30">
224
- <div className="space-y-6">
225
- <div className="bg-white/5 backdrop-blur-sm rounded-lg p-6">
226
- <div className="text-3xl font-bold text-blue-400 mb-2">2020</div>
227
- <div className="text-gray-400">Founded</div>
228
- </div>
229
- <div className="bg-white/5 backdrop-blur-sm rounded-lg p-6">
230
- <div className="text-3xl font-bold text-blue-500 mb-2">50K+</div>
231
- <div className="text-gray-400">Happy Users</div>
232
- </div>
233
- <div className="bg-white/5 backdrop-blur-sm rounded-lg p-6">
234
- <div className="text-3xl font-bold text-blue-400 mb-2">500+</div>
235
- <div className="text-gray-400">Companies Trust Us</div>
236
- </div>
237
- </div>
238
- </div>
239
- </div>
240
- </div>
241
- </section>
242
- {/* Features Section */}
243
- <section id="features" className="py-20 px-4 sm:px-6 lg:px-8 bg-black">
244
- <div className="max-w-7xl mx-auto">
245
- <div className="text-center mb-16">
246
- <h2 className="text-4xl sm:text-5xl font-bold mb-4">
247
- Why Choose InterviewAI?
248
- </h2>
249
- <p className="text-xl text-gray-400">
250
- Everything you need to ace your next interview
251
- </p>
252
- </div>
253
- <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
254
- {features.map((feature: Feature, index: number) => (
255
- <div
256
- key={index}
257
- className="bg-gradient-to-br from-blue-900/50 to-gray-900/50 backdrop-blur-sm rounded-xl p-8 border border-blue-500/20 hover:border-gray-500/50 transition-all duration-300 hover:transform hover:scale-105"
258
- >
259
- <div className="bg-gradient-to-br from-blue-500 to-gray-400 w-16 h-16 rounded-lg flex items-center justify-center mb-4 shadow-lg shadow-blue-500/50">
260
- {feature.icon}
261
- </div>
262
- <h3 className="text-xl font-bold mb-3">{feature.title}</h3>
263
- <p className="text-gray-400">{feature.description}</p>
264
- </div>
265
- ))}
266
- </div>
267
- </div>
268
- </section>
269
- {/* How It Works */}
270
- <section id="how-it-works" className="py-20 px-4 sm:px-6 lg:px-8 bg-black/40">
271
- <div className="max-w-7xl mx-auto">
272
- <div className="text-center mb-16">
273
- <h2 className="text-4xl sm:text-5xl font-bold mb-4">
274
- How It Works
275
- </h2>
276
- <p className="text-xl text-gray-400">
277
- Get started in three simple steps
278
- </p>
279
- </div>
280
- <div className="grid grid-cols-1 md:grid-cols-3 gap-8">
281
- {steps.map((item: Step, index: number) => (
282
- <div key={index} className="relative text-center">
283
- <div className="text-7xl font-bold text-blue-500/20 mb-4">{item.step}</div>
284
- <h3 className="text-2xl font-bold mb-3">{item.title}</h3>
285
- <p className="text-gray-400">{item.desc}</p>
286
- {index < 2 && (
287
- <ChevronRight className="hidden md:block absolute top-12 -right-12 w-8 h-8 text-blue-500/50" />
288
- )}
289
- </div>
290
- ))}
291
- </div>
292
- </div>
293
- </section>
294
- {/* CTA Section */}
295
- <section className="py-20 px-4 sm:px-6 lg:px-8 bg-gradient-to-r from-gray-900/50 to-blue-700/50">
296
- <div className="max-w-4xl mx-auto text-center">
297
- <h2 className="text-4xl sm:text-5xl font-bold mb-6">
298
- Ready to Ace Your Interview?
299
- </h2>
300
- <p className="text-xl text-gray-300 mb-10">
301
- Join thousands of successful candidates who prepared with InterviewAI
302
- </p>
303
- <button className="px-10 py-5 rounded-lg bg-gradient-to-r from-blue-400 to-blue-700 hover:from-blue-600 hover:to-blue-900 transition shadow-lg shadow-blue-500/50 text-lg font-semibold">
304
- Start Your Free Trial Today
305
- </button>
306
- </div>
307
- </section>
308
- {/* Footer */}
309
- <footer className="py-12 px-4 sm:px-6 lg:px-8 bg-black">
310
- <div className="max-w-7xl mx-auto text-center text-gray-400">
311
- <div className="flex items-center justify-center space-x-2 mb-4">
312
- <Sparkles className="w-6 h-6 text-blue-400" />
313
- <span className="text-xl font-bold text-white">InterviewAI</span>
314
- </div>
315
- <p>&copy; 2025 InterviewAI. All rights reserved.</p>
316
- </div>
317
- </footer>
318
- </div>
319
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
320
  };
321
 
322
  export default AIInterviewPlatform;
 
1
  import React, { useState, useEffect } from 'react';
2
  import { Sparkles, Zap, Target, Clock, Award, ChevronRight, Menu, X } from 'lucide-react';
3
+ import AuthModal from '../components/AuthModal';
4
+ import SignIn from '../components/auth/SignIn';
5
+ import SignUp from '../components/auth/SignUp';
6
 
7
  interface Feature {
8
+   icon: React.ReactNode;
9
+   title: string;
10
+   description: string;
11
  }
12
 
13
  interface Step {
14
+   step: string;
15
+   title: string;
16
+   desc: string;
17
  }
18
 
19
  const AIInterviewPlatform: React.FC = () => {
20
+   const [isMenuOpen, setIsMenuOpen] = useState<boolean>(false);
21
+   const [scrolled, setScrolled] = useState<boolean>(false);
22
 
23
+   const [modalType, setModalType] = useState<'none' | 'signIn' | 'signUp'>('none');
24
+
25
+     // Handlers for opening/closing modals, now with mobile menu closing logic
26
+     const openSignInModal = () => {
27
+ setModalType('signIn');
28
+ setIsMenuOpen(false); // Close mobile menu when opening modal
29
+ };
30
+     const openSignUpModal = () => {
31
+ setModalType('signUp');
32
+ setIsMenuOpen(false); // Close mobile menu when opening modal
33
  };
34
+     const closeModal = () => setModalType('none');
 
 
35
 
36
+   useEffect(() => {
37
+     const handleScroll = (): void => {
38
+       setScrolled(window.scrollY > 50);
39
+     };
40
+     window.addEventListener('scroll', handleScroll);
41
+     return () => window.removeEventListener('scroll', handleScroll);
42
+   }, []);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
 
44
+   const features: Feature[] = [
45
+     {
46
+       icon: <Sparkles className="w-8 h-8" />,
47
+       title: "AI-Powered Questions",
48
+       description: "Dynamic questions adapted to your skill level and role"
49
+     },
50
+     {
51
+       icon: <Zap className="w-8 h-8" />,
52
+       title: "Instant Feedback",
53
+       description: "Get real-time analysis and improvement suggestions"
54
+     },
55
+     {
56
+       icon: <Target className="w-8 h-8" />,
57
+       title: "Role-Specific Prep",
58
+       description: "Tailored scenarios for your target position"
59
+     },
60
+     {
61
+       icon: <Clock className="w-8 h-8" />,
62
+       title: "Practice Anytime",
63
+       description: "24/7 access to unlimited mock interviews"
64
+     },
65
+     {
66
+       icon: <Award className="w-8 h-8" />,
67
+       title: "Performance Analytics",
68
+       description: "Track your progress with detailed insights"
69
+     }
70
+   ];
71
 
72
+   const steps: Step[] = [
73
+     { step: "01", title: "Choose Your Role", desc: "Select the job position you're preparing for" },
74
+     { step: "02", title: "Practice Interview", desc: "Answer AI-generated questions in real-time" },
75
+     { step: "03", title: "Get Feedback", desc: "Receive detailed analysis and improvement tips" }
76
+   ];
77
+
78
+   return (
79
  <div className="w-full min-h-screen bg-gradient-to-br from-blue-900 to-gray-400 from-blue-900 text-white **overflow-x-hidden**">
80
+       {/* Navigation Bar */}
81
+       <nav className={`fixed top-0 left-0 right-0 w-full z-50 transition-all duration-300 ${scrolled ? 'bg-slate-900/95 backdrop-blur-md shadow-xl' : 'bg-slate-900/80 backdrop-blur-sm'}`}>
82
+         <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
83
+           <div className="flex justify-between items-center h-20">
84
+             {/* Logo */}
85
+             <div className="flex items-center space-x-3">
86
+               <div className="bg-gradient-to-br from-blue-500 to-gray-400 p-2 rounded-lg">
87
+                 <Sparkles className="w-6 h-6 text-white" />
88
+               </div>
89
  <span className="text-2xl font-bold bg-gradient-to-r from-blue-500 to-gray-400 bg-clip-text text-transparent">
90
+                 InterviewAI
91
+               </span>
92
+             </div>
93
+                        
94
  {/* Desktop Navigation */}
95
+             <div className="hidden lg:flex items-center space-x-8">
96
+               <a href="#home" className="text-gray-200 hover:text-blue-400 transition-colors font-medium">
97
+                 Home
98
+               </a>
99
+               <a href="#about" className="text-gray-200 hover:text-blue-400 transition-colors font-medium">
100
+                 About
101
+               </a>
102
+               <a href="#features" className="text-gray-200 hover:text-blue-400 transition-colors font-medium">
103
+                 Features
104
+               </a>
105
+               <a href="#how-it-works" className="text-gray-200 hover:text-blue-400 transition-colors font-medium">
106
+                 How It Works
107
+               </a>
108
+               <button onClick={openSignInModal} className="px-6 py-2.5 rounded-lg border-2 border-blue-400 text-blue-400 hover:bg-blue-400/10 transition-all font-medium">
109
+                 Sign In
110
+               </button>
111
+               <button onClick={openSignUpModal} className="px-6 py-2.5 rounded-lg bg-gradient-to-r from-blue-500 to-blue-500 hover:from-blue-600 hover:to-blue-900 transition-all shadow-lg shadow-blue-500/30 font-medium">
112
+                 Sign Up
113
+               </button>
114
+             </div>
115
+             {/* Mobile Menu Button */}
116
+             <button
117
+               className="lg:hidden p-2 rounded-lg hover:bg-white/10 transition-colors"
118
+               onClick={() => setIsMenuOpen(!isMenuOpen)}
119
+             >
120
+               {isMenuOpen ? <X className="w-6 h-6" /> : <Menu className="w-6 h-6" />}
121
+             </button>
122
+           </div>
123
+         </div>
124
  {/* Mobile Menu */}
125
+         {isMenuOpen && (
126
+           <div className="lg:hidden border-t border-white/10 bg-slate-900/98 backdrop-blur-md">
127
+             <div className="px-4 py-4 space-y-3 max-w-7xl mx-auto">
128
+               <a
129
+                 href="#home"
130
+                 className="block py-3 px-4 rounded-lg text-gray-200 hover:bg-blue-500/10 hover:text-blue-400 transition-all font-medium"
131
+                 onClick={() => setIsMenuOpen(false)}
132
+               >
133
+                 Home
134
+               </a>
135
+               <a
136
+                 href="#about"
137
+                 className="block py-3 px-4 rounded-lg text-gray-200 hover:bg-blue-500/10 hover:text-blue-400 transition-all font-medium"
138
+                 onClick={() => setIsMenuOpen(false)}
139
+               >
140
+                 About
141
+               </a>
142
+               <a
143
+                 href="#features"
144
+                 className="block py-3 px-4 rounded-lg text-gray-200 hover:bg-blue-500/10 hover:text-blue-400 transition-all font-medium"
145
+                 onClick={() => setIsMenuOpen(false)}
146
+               >
147
+                 Features
148
+               </a>
149
+               <a
150
+                 href="#how-it-works"
151
+                 className="block py-3 px-4 rounded-lg text-gray-200 hover:bg-blue-500/10 hover:text-blue-400 transition-all font-medium"
152
+                 onClick={() => setIsMenuOpen(false)}
153
+               >
154
+                 How It Works
155
+               </a>
156
+               <button onClick={openSignInModal} className="w-full py-3 rounded-lg border-2 border-blue-400 text-blue-400 hover:bg-blue-400/10 transition-all font-medium">
157
+                 Sign In
158
+               </button>
159
+               <button onClick={openSignUpModal} className="w-full py-3 rounded-lg bg-gradient-to-r from-blue-500 to-blue-500 hover:from-blue-600 hover:to-blue-900 transition-all font-medium">
160
+                 Sign Up
161
+               </button>
162
+             </div>
163
+           </div>
164
+         )}
165
+       </nav>
166
+       <AuthModal isOpen={modalType === 'signIn'} onClose={closeModal}>
167
+                 <SignIn
168
+                     onClose={closeModal}
169
+                     onSwitchToSignUp={openSignUpModal}
170
+                 />
171
+             </AuthModal>
172
+
173
+             <AuthModal isOpen={modalType === 'signUp'} onClose={closeModal}>
174
+                 <SignUp
175
+                     onClose={closeModal}
176
+                     onSwitchToSignIn={openSignInModal}
177
+                 />
178
+       </AuthModal>
179
+       {/* Hero Section */}
180
+       <section id="home" className="min-h-screen flex items-center pt-20 pb-20 px-4 sm:px-6 lg:px-8 bg-black">
181
+         <div className="max-w-7xl mx-auto text-center">
182
+           <div className="inline-block mb-4 px-4 py-2 bg-blue-500/20 rounded-full border border-blue-500/50">
183
+             <span className="text-sm font-semibold text-blue-300">✨ AI-Powered Interview Practice</span>
184
+           </div>
185
+                    
186
+           <h1 className="text-5xl sm:text-6xl lg:text-7xl font-bold mb-6 leading-tight">
187
+             Master Your Next
188
+             <span className="block bg-gradient-to-r from-blue-500 via-gray-400 to-blue-500 bg-clip-text text-transparent">
189
+               Interview with AI
190
+             </span>
191
+           </h1>
192
+                    
193
+           <p className="text-xl text-gray-300 mb-10 max-w-3xl mx-auto">
194
+             Practice with our intelligent AI interviewer, get instant feedback, and land your dream job with confidence.
195
+           </p>
196
+                    
197
+           <div className="flex flex-col sm:flex-row gap-4 justify-center items-center">
198
+             <button className="px-8 py-4 rounded-lg bg-gradient-to-r from-blue-500 to-gray-500 hover:from-blue-600 hover:to-blue-500 transition shadow-lg shadow-blue-500/50 flex items-center gap-2 text-lg font-semibold">
199
+               Start Free Trial
200
+               <ChevronRight className="w-5 h-5" />
201
+             </button>
202
+             <button className="px-8 py-4 rounded-lg border-2 border-blue-400 hover:bg-blue-400/10 transition text-lg font-semibold">
203
+               Watch Demo
204
+             </button>
205
+           </div>
206
+           {/* Stats */}
207
+           <div className="mt-20 grid grid-cols-1 sm:grid-cols-3 gap-8 max-w-4xl mx-auto">
208
+             <div className="bg-white/5 backdrop-blur-sm rounded-xl p-6 border border-white/10">
209
+               <div className="text-4xl font-bold text-blue-600 mb-2">50K+</div>
210
+               <div className="text-gray-400">Successful Interviews</div>
211
+             </div>
212
+             <div className="bg-white/5 backdrop-blur-sm rounded-xl p-6 border border-white/10">
213
+               <div className="text-4xl font-bold text-blue-600 mb-2">95%</div>
214
+               <div className="text-gray-400">Success Rate</div>
215
+             </div>
216
+             <div className="bg-white/5 backdrop-blur-sm rounded-xl p-6 border border-white/10">
217
+               <div className="text-4xl font-bold text-blue-600 mb-2">24/7</div>
218
+               <div className="text-gray-400">AI Availability</div>
219
+             </div>
220
+           </div>
221
+         </div>
222
+       </section>
223
+       {/* About Section */}
224
+       <section id="about" className="py-20 px-4 sm:px-6 lg:px-8 bg-black/40">
225
+         <div className="max-w-6xl mx-auto">
226
+           <div className="grid grid-cols-1 lg:grid-cols-2 gap-12 items-center">
227
+             <div>
228
+               <h2 className="text-4xl sm:text-5xl font-bold mb-6">
229
+                 About InterviewAI
230
+               </h2>
231
+               <p className="text-lg text-gray-300 mb-6">
232
+                 We're revolutionizing interview preparation with cutting-edge AI technology. Our platform helps candidates practice, learn, and succeed in their job interviews.
233
+               </p>
234
+               <p className="text-lg text-gray-300 mb-6">
235
+                 Founded by industry experts and powered by advanced machine learning, InterviewAI provides personalized interview experiences that adapt to your unique needs and goals.
236
+               </p>
237
+               <div className="space-y-4">
238
+                 <div className="flex items-center gap-3">
239
+                   <div className="w-2 h-2 bg-blue-400 rounded-full"></div>
240
+                   <span className="text-gray-300">Advanced AI interview simulations</span>
241
+                 </div>
242
+                 <div className="flex items-center gap-3">
243
+                   <div className="w-2 h-2 bg-blue-600 rounded-full"></div>
244
+                   <span className="text-gray-300">Personalized feedback and coaching</span>
245
+                 </div>
246
+                 <div className="flex items-center gap-3">
247
+                   <div className="w-2 h-2 bg-blue-400 rounded-full"></div>
248
+                   <span className="text-gray-300">Industry-leading success rates</span>
249
+                 </div>
250
+               </div>
251
+             </div>
252
+             <div className="bg-gradient-to-br from-blue-900/50 to-gray-900/50 rounded-2xl p-8 border border-gray-200/30">
253
+               <div className="space-y-6">
254
+                 <div className="bg-white/5 backdrop-blur-sm rounded-lg p-6">
255
+                   <div className="text-3xl font-bold text-blue-400 mb-2">2020</div>
256
+                   <div className="text-gray-400">Founded</div>
257
+                 </div>
258
+                 <div className="bg-white/5 backdrop-blur-sm rounded-lg p-6">
259
+                   <div className="text-3xl font-bold text-blue-500 mb-2">50K+</div>
260
+                   <div className="text-gray-400">Happy Users</div>
261
+                 </div>
262
+                 <div className="bg-white/5 backdrop-blur-sm rounded-lg p-6">
263
+                   <div className="text-3xl font-bold text-blue-400 mb-2">500+</div>
264
+                   <div className="text-gray-400">Companies Trust Us</div>
265
+                 </div>
266
+               </div>
267
+             </div>
268
+           </div>
269
+         </div>
270
+       </section>
271
+       {/* Features Section */}
272
+       <section id="features" className="py-20 px-4 sm:px-6 lg:px-8 bg-black">
273
+         <div className="max-w-7xl mx-auto">
274
+           <div className="text-center mb-16">
275
+             <h2 className="text-4xl sm:text-5xl font-bold mb-4">
276
+               Why Choose InterviewAI?
277
+             </h2>
278
+             <p className="text-xl text-gray-400">
279
+               Everything you need to ace your next interview
280
+             </p>
281
+           </div>
282
+           <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
283
+             {features.map((feature: Feature, index: number) => (
284
+               <div
285
+                 key={index}
286
+                 className="bg-gradient-to-br from-blue-900/50 to-gray-900/50 backdrop-blur-sm rounded-xl p-8 border border-blue-500/20 hover:border-gray-500/50 transition-all duration-300 hover:transform hover:scale-105"
287
+               >
288
+                 <div className="bg-gradient-to-br from-blue-500 to-gray-400 w-16 h-16 rounded-lg flex items-center justify-center mb-4 shadow-lg shadow-blue-500/50">
289
+                   {feature.icon}
290
+                 </div>
291
+                 <h3 className="text-xl font-bold mb-3">{feature.title}</h3>
292
+                 <p className="text-gray-400">{feature.description}</p>
293
+               </div>
294
+             ))}
295
+           </div>
296
+         </div>
297
+       </section>
298
+       {/* How It Works */}
299
+       <section id="how-it-works" className="py-20 px-4 sm:px-6 lg:px-8 bg-black/40">
300
+         <div className="max-w-7xl mx-auto">
301
+           <div className="text-center mb-16">
302
+             <h2 className="text-4xl sm:text-5xl font-bold mb-4">
303
+               How It Works
304
+             </h2>
305
+             <p className="text-xl text-gray-400">
306
+               Get started in three simple steps
307
+             </p>
308
+           </div>
309
+           <div className="grid grid-cols-1 md:grid-cols-3 gap-8">
310
+             {steps.map((item: Step, index: number) => (
311
+               <div key={index} className="relative text-center">
312
+                 <div className="text-7xl font-bold text-blue-500/20 mb-4">{item.step}</div>
313
+                 <h3 className="text-2xl font-bold mb-3">{item.title}</h3>
314
+                 <p className="text-gray-400">{item.desc}</p>
315
+                 {index < 2 && (
316
+                   <ChevronRight className="hidden md:block absolute top-12 -right-12 w-8 h-8 text-blue-500/50" />
317
+                 )}
318
+               </div>
319
+             ))}
320
+           </div>
321
+         </div>
322
+       </section>
323
+       {/* CTA Section */}
324
+       <section className="py-20 px-4 sm:px-6 lg:px-8 bg-gradient-to-r from-gray-900/50 to-blue-700/50">
325
+         <div className="max-w-4xl mx-auto text-center">
326
+           <h2 className="text-4xl sm:text-5xl font-bold mb-6">
327
+             Ready to Ace Your Interview?
328
+           </h2>
329
+           <p className="text-xl text-gray-300 mb-10">
330
+             Join thousands of successful candidates who prepared with InterviewAI
331
+           </p>
332
+           <button className="px-10 py-5 rounded-lg bg-gradient-to-r from-blue-400 to-blue-700 hover:from-blue-600 hover:to-blue-900 transition shadow-lg shadow-blue-500/50 text-lg font-semibold">
333
+             Start Your Free Trial Today
334
+           </button>
335
+         </div>
336
+       </section>
337
+       {/* Footer */}
338
+       <footer className="py-12 px-4 sm:px-6 lg:px-8 bg-black">
339
+         <div className="max-w-7xl mx-auto text-center text-gray-400">
340
+           <div className="flex items-center justify-center space-x-2 mb-4">
341
+             <Sparkles className="w-6 h-6 text-blue-400" />
342
+             <span className="text-xl font-bold text-white">InterviewAI</span>
343
+           </div>
344
+           <p>&copy; 2025 InterviewAI. All rights reserved.</p>
345
+         </div>
346
+       </footer>
347
+     </div>
348
+   );
349
  };
350
 
351
  export default AIInterviewPlatform;