Prakhar Singh commited on
Commit
10e2cf8
·
1 Parent(s): 3e76c6c

fix the UI color combination

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,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React from 'react';
2
+ import { Mail, Lock, LogIn, Chrome, X } from 'lucide-react';
3
+
4
+ // Added onClose prop to handle form-internal links/closing
5
+ interface SignInProps {
6
+ onClose: () => void;
7
+ onSwitchToSignUp: () => void;
8
+ }
9
+
10
+ const SignIn: React.FC<SignInProps> = ({ onClose, onSwitchToSignUp }) => {
11
+ return (
12
+ // Note: The outer 'div' styling has been removed, as the modal wrapper provides the background and padding.
13
+ // The inner container's styling is now applied by the AuthModal.tsx parent.
14
+ <>
15
+ <h2 className="text-3xl font-bold mb-8 text-center text-white">
16
+ Welcome Back
17
+ </h2>
18
+
19
+ {/* --- Sign In Form --- */}
20
+ <form className="space-y-5">
21
+ {/* Email Input */}
22
+ <div>
23
+ <label htmlFor="email" className="block text-sm font-medium mb-1 text-gray-300">Email Address</label>
24
+ <div className="relative">
25
+ <Mail className="w-5 h-5 absolute left-3 top-1/2 transform -translate-y-1/2 text-blue-400" />
26
+ <input
27
+ id="email"
28
+ type="email"
29
+ placeholder="you@example.com"
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
+ {/* Password Input */}
36
+ <div>
37
+ <label htmlFor="password" className="block text-sm font-medium mb-1 text-gray-300">Password</label>
38
+ <div className="relative">
39
+ <Lock className="w-5 h-5 absolute left-3 top-1/2 transform -translate-y-1/2 text-blue-400" />
40
+ <input
41
+ id="password"
42
+ type="password"
43
+ placeholder="••••••••"
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
+ {/* Sign In Button */}
50
+ <button
51
+ type="submit"
52
+ 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"
53
+ >
54
+ <LogIn className="w-5 h-5" />
55
+ Sign In
56
+ </button>
57
+ </form>
58
+
59
+ <div className="flex items-center my-6">
60
+ <div className="flex-grow border-t border-slate-700"></div>
61
+ <span className="flex-shrink mx-4 text-sm text-gray-400">OR</span>
62
+ <div className="flex-grow border-t border-slate-700"></div>
63
+ </div>
64
+
65
+ {/* --- Social Sign In --- */}
66
+ <button
67
+ 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"
68
+ >
69
+ <Chrome className="w-5 h-5" />
70
+ Sign In with Google
71
+ </button>
72
+
73
+ <p className="mt-8 text-center text-sm text-gray-400">
74
+ Don't have an account?
75
+ <button type="button" onClick={onSwitchToSignUp} className="ml-2 font-medium text-blue-400 hover:text-blue-300 transition-colors">
76
+ Sign Up
77
+ </button>
78
+ </p>
79
+ </>
80
+ );
81
+ };
82
+
83
+ export default SignIn;
Frontend/src/components/auth/SignUp.tsx ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React from 'react';
2
+ import { User, Mail, Lock, UserPlus, Chrome, X } from 'lucide-react';
3
+
4
+ // Added onClose prop to handle form-internal links/closing
5
+ interface SignUpProps {
6
+ onClose: () => void;
7
+ onSwitchToSignIn: () => void;
8
+ }
9
+
10
+ const SignUp: React.FC<SignUpProps> = ({ onClose, onSwitchToSignIn }) => {
11
+ return (
12
+ // Note: The outer 'div' styling has been removed, as the modal wrapper provides the background and padding.
13
+ <>
14
+ <h2 className="text-3xl font-bold mb-8 text-center text-white">
15
+ Create Your Account
16
+ </h2>
17
+ {/* --- Sign Up Form --- */}
18
+ <form className="space-y-5">
19
+ {/* Name Input */}
20
+ <div>
21
+ <label htmlFor="name" className="block text-sm font-medium mb-1 text-gray-300">Full Name</label>
22
+ <div className="relative">
23
+ <User className="w-5 h-5 absolute left-3 top-1/2 transform -translate-y-1/2 text-blue-400" />
24
+ <input
25
+ id="name"
26
+ type="text"
27
+ placeholder="John Doe"
28
+ 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"
29
+ />
30
+ </div>
31
+ </div>
32
+
33
+ {/* Email Input */}
34
+ <div>
35
+ <label htmlFor="email" className="block text-sm font-medium mb-1 text-gray-300">Email Address</label>
36
+ <div className="relative">
37
+ <Mail className="w-5 h-5 absolute left-3 top-1/2 transform -translate-y-1/2 text-blue-400" />
38
+ <input
39
+ id="email"
40
+ type="email"
41
+ placeholder="you@example.com"
42
+ 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"
43
+ />
44
+ </div>
45
+ </div>
46
+
47
+ {/* Password Input */}
48
+ <div>
49
+ <label htmlFor="password" className="block text-sm font-medium mb-1 text-gray-300">Password</label>
50
+ <div className="relative">
51
+ <Lock className="w-5 h-5 absolute left-3 top-1/2 transform -translate-y-1/2 text-blue-400" />
52
+ <input
53
+ id="password"
54
+ type="password"
55
+ placeholder="••••••••"
56
+ 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"
57
+ />
58
+ </div>
59
+ </div>
60
+
61
+ {/* Confirm Password Input */}
62
+ <div>
63
+ <label htmlFor="confirm-password" className="block text-sm font-medium mb-1 text-gray-300">Confirm Password</label>
64
+ <div className="relative">
65
+ <Lock className="w-5 h-5 absolute left-3 top-1/2 transform -translate-y-1/2 text-blue-400" />
66
+ <input
67
+ id="confirm-password"
68
+ type="password"
69
+ placeholder="••••••••"
70
+ 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"
71
+ />
72
+ </div>
73
+ </div>
74
+
75
+ {/* Sign Up Button */}
76
+ <button
77
+ type="submit"
78
+ 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"
79
+ >
80
+ <UserPlus className="w-5 h-5" />
81
+ Sign Up
82
+ </button>
83
+ </form>
84
+
85
+ <div className="flex items-center my-6">
86
+ <div className="flex-grow border-t border-slate-700"></div>
87
+ <span className="flex-shrink mx-4 text-sm text-gray-400">OR</span>
88
+ <div className="flex-grow border-t border-slate-700"></div>
89
+ </div>
90
+
91
+ {/* --- Social Sign Up --- */}
92
+ <button
93
+ 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"
94
+ >
95
+ <Chrome className="w-5 h-5" />
96
+ Sign Up with Google
97
+ </button>
98
+
99
+ <p className="mt-8 text-center text-sm text-gray-400">
100
+ Already have an account?
101
+ <button type="button" onClick={onSwitchToSignIn} className="ml-2 font-medium text-blue-400 hover:text-blue-300 transition-colors">
102
+ Sign In
103
+ </button>
104
+ </p>
105
+ </>
106
+ );
107
+ };
108
+
109
+ export default SignUp;
Frontend/src/pages/home.tsx CHANGED
@@ -1,322 +1,359 @@
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 (FIXED) */}
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
+ {/* FIX: Added onClick={openSignInModal} */}
157
+               <button
158
+ onClick={openSignInModal}
159
+ className="w-full py-3 rounded-lg border-2 border-blue-400 text-blue-400 hover:bg-blue-400/10 transition-all font-medium"
160
+ >
161
+                 Sign In
162
+               </button>
163
+ {/* FIX: Added onClick={openSignUpModal} and updated gradient to match desktop style closer */}
164
+               <button
165
+ onClick={openSignUpModal}
166
+ 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"
167
+ >
168
+                 Sign Up
169
+               </button>
170
+             </div>
171
+           </div>
172
+         )}
173
+       </nav>
174
+       <AuthModal isOpen={modalType === 'signIn'} onClose={closeModal}>
175
+                 <SignIn
176
+                     onClose={closeModal}
177
+                     onSwitchToSignUp={openSignUpModal}
178
+                 />
179
+             </AuthModal>
180
+
181
+             <AuthModal isOpen={modalType === 'signUp'} onClose={closeModal}>
182
+                 <SignUp
183
+                     onClose={closeModal}
184
+                     onSwitchToSignIn={openSignInModal}
185
+                 />
186
+       </AuthModal>
187
+       {/* Hero Section */}
188
+       <section id="home" className="min-h-screen flex items-center pt-20 pb-20 px-4 sm:px-6 lg:px-8 bg-black">
189
+         <div className="max-w-7xl mx-auto text-center">
190
+           <div className="inline-block mb-4 px-4 py-2 bg-blue-500/20 rounded-full border border-blue-500/50">
191
+             <span className="text-sm font-semibold text-blue-300">✨ AI-Powered Interview Practice</span>
192
+           </div>
193
+                    
194
+           <h1 className="text-5xl sm:text-6xl lg:text-7xl font-bold mb-6 leading-tight">
195
+             Master Your Next
196
+             <span className="block bg-gradient-to-r from-blue-500 via-gray-400 to-blue-500 bg-clip-text text-transparent">
197
+               Interview with AI
198
+             </span>
199
+           </h1>
200
+                    
201
+           <p className="text-xl text-gray-300 mb-10 max-w-3xl mx-auto">
202
+             Practice with our intelligent AI interviewer, get instant feedback, and land your dream job with confidence.
203
+           </p>
204
+                    
205
+           <div className="flex flex-col sm:flex-row gap-4 justify-center items-center">
206
+             <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">
207
+               Start Free Trial
208
+               <ChevronRight className="w-5 h-5" />
209
+             </button>
210
+             <button className="px-8 py-4 rounded-lg border-2 border-blue-400 hover:bg-blue-400/10 transition text-lg font-semibold">
211
+               Watch Demo
212
+             </button>
213
+           </div>
214
+           {/* Stats */}
215
+           <div className="mt-20 grid grid-cols-1 sm:grid-cols-3 gap-8 max-w-4xl mx-auto">
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">50K+</div>
218
+               <div className="text-gray-400">Successful Interviews</div>
219
+             </div>
220
+             <div className="bg-white/5 backdrop-blur-sm rounded-xl p-6 border border-white/10">
221
+               <div className="text-4xl font-bold text-blue-600 mb-2">95%</div>
222
+               <div className="text-gray-400">Success Rate</div>
223
+             </div>
224
+             <div className="bg-white/5 backdrop-blur-sm rounded-xl p-6 border border-white/10">
225
+               <div className="text-4xl font-bold text-blue-600 mb-2">24/7</div>
226
+               <div className="text-gray-400">AI Availability</div>
227
+             </div>
228
+           </div>
229
+         </div>
230
+       </section>
231
+       {/* About Section */}
232
+       <section id="about" className="py-20 px-4 sm:px-6 lg:px-8 bg-black/40">
233
+         <div className="max-w-6xl mx-auto">
234
+           <div className="grid grid-cols-1 lg:grid-cols-2 gap-12 items-center">
235
+             <div>
236
+               <h2 className="text-4xl sm:text-5xl font-bold mb-6">
237
+                 About InterviewAI
238
+               </h2>
239
+               <p className="text-lg text-gray-300 mb-6">
240
+                 We're revolutionizing interview preparation with cutting-edge AI technology. Our platform helps candidates practice, learn, and succeed in their job interviews.
241
+               </p>
242
+               <p className="text-lg text-gray-300 mb-6">
243
+                 Founded by industry experts and powered by advanced machine learning, InterviewAI provides personalized interview experiences that adapt to your unique needs and goals.
244
+               </p>
245
+               <div className="space-y-4">
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">Advanced AI interview simulations</span>
249
+                 </div>
250
+                 <div className="flex items-center gap-3">
251
+                   <div className="w-2 h-2 bg-blue-600 rounded-full"></div>
252
+                   <span className="text-gray-300">Personalized feedback and coaching</span>
253
+                 </div>
254
+                 <div className="flex items-center gap-3">
255
+                   <div className="w-2 h-2 bg-blue-400 rounded-full"></div>
256
+                   <span className="text-gray-300">Industry-leading success rates</span>
257
+                 </div>
258
+               </div>
259
+             </div>
260
+             <div className="bg-gradient-to-br from-blue-900/50 to-gray-900/50 rounded-2xl p-8 border border-gray-200/30">
261
+               <div className="space-y-6">
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">2020</div>
264
+                   <div className="text-gray-400">Founded</div>
265
+                 </div>
266
+                 <div className="bg-white/5 backdrop-blur-sm rounded-lg p-6">
267
+                   <div className="text-3xl font-bold text-blue-500 mb-2">50K+</div>
268
+                   <div className="text-gray-400">Happy Users</div>
269
+                 </div>
270
+                 <div className="bg-white/5 backdrop-blur-sm rounded-lg p-6">
271
+                   <div className="text-3xl font-bold text-blue-400 mb-2">500+</div>
272
+                   <div className="text-gray-400">Companies Trust Us</div>
273
+                 </div>
274
+               </div>
275
+             </div>
276
+           </div>
277
+         </div>
278
+       </section>
279
+       {/* Features Section */}
280
+       <section id="features" className="py-20 px-4 sm:px-6 lg:px-8 bg-black">
281
+         <div className="max-w-7xl mx-auto">
282
+           <div className="text-center mb-16">
283
+             <h2 className="text-4xl sm:text-5xl font-bold mb-4">
284
+               Why Choose InterviewAI?
285
+             </h2>
286
+             <p className="text-xl text-gray-400">
287
+               Everything you need to ace your next interview
288
+             </p>
289
+           </div>
290
+           <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
291
+             {features.map((feature: Feature, index: number) => (
292
+               <div
293
+                 key={index}
294
+                 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"
295
+               >
296
+                 <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">
297
+                   {feature.icon}
298
+                 </div>
299
+                 <h3 className="text-xl font-bold mb-3">{feature.title}</h3>
300
+                 <p className="text-gray-400">{feature.description}</p>
301
+               </div>
302
+             ))}
303
+           </div>
304
+         </div>
305
+       </section>
306
+       {/* How It Works */}
307
+       <section id="how-it-works" className="py-20 px-4 sm:px-6 lg:px-8 bg-black/40">
308
+         <div className="max-w-7xl mx-auto">
309
+           <div className="text-center mb-16">
310
+             <h2 className="text-4xl sm:text-5xl font-bold mb-4">
311
+               How It Works
312
+             </h2>
313
+             <p className="text-xl text-gray-400">
314
+               Get started in three simple steps
315
+             </p>
316
+           </div>
317
+           <div className="grid grid-cols-1 md:grid-cols-3 gap-8">
318
+             {steps.map((item: Step, index: number) => (
319
+               <div key={index} className="relative text-center">
320
+                 <div className="text-7xl font-bold text-blue-500/20 mb-4">{item.step}</div>
321
+                 <h3 className="text-2xl font-bold mb-3">{item.title}</h3>
322
+                 <p className="text-gray-400">{item.desc}</p>
323
+                 {index < 2 && (
324
+                   <ChevronRight className="hidden md:block absolute top-12 -right-12 w-8 h-8 text-blue-500/50" />
325
+                 )}
326
+               </div>
327
+             ))}
328
+           </div>
329
+         </div>
330
+       </section>
331
+       {/* CTA Section */}
332
+       <section className="py-20 px-4 sm:px-6 lg:px-8 bg-gradient-to-r from-gray-900/50 to-blue-700/50">
333
+         <div className="max-w-4xl mx-auto text-center">
334
+           <h2 className="text-4xl sm:text-5xl font-bold mb-6">
335
+             Ready to Ace Your Interview?
336
+           </h2>
337
+           <p className="text-xl text-gray-300 mb-10">
338
+             Join thousands of successful candidates who prepared with InterviewAI
339
+           </p>
340
+           <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">
341
+             Start Your Free Trial Today
342
+           </button>
343
+         </div>
344
+       </section>
345
+       {/* Footer */}
346
+       <footer className="py-12 px-4 sm:px-6 lg:px-8 bg-black">
347
+         <div className="max-w-7xl mx-auto text-center text-gray-400">
348
+           <div className="flex items-center justify-center space-x-2 mb-4">
349
+             <Sparkles className="w-6 h-6 text-blue-400" />
350
+             <span className="text-xl font-bold text-white">InterviewAI</span>
351
+           </div>
352
+           <p>&copy; 2025 InterviewAI. All rights reserved.</p>
353
+         </div>
354
+       </footer>
355
+     </div>
356
+   );
357
  };
358
 
359
  export default AIInterviewPlatform;