├── .eslintrc.json ├── .gitignore ├── README.md ├── app ├── components │ ├── About.jsx │ ├── ChatModal.jsx │ ├── Feature.jsx │ ├── Footer.jsx │ ├── Founders.jsx │ ├── GoogleSignInButton.jsx │ ├── Header.jsx │ ├── Hero.jsx │ ├── Pricing.jsx │ ├── Testimonial.jsx │ ├── sign-in │ │ └── page.jsx │ └── sign-up │ │ └── page.jsx ├── favicon.ico ├── firebase │ └── config.jsx ├── globals.css ├── layout.jsx ├── page.jsx ├── sign-in │ └── page.jsx └── sign-up │ └── page.jsx ├── jsconfig.json ├── next.config.mjs ├── package-lock.json ├── package.json ├── postcss.config.mjs ├── public ├── background-backup.jpg ├── background.jpg ├── background2.jpg ├── himel.jpg ├── mehreen.jpg ├── obidur.jpg └── zaynul.jpg ├── tailwind.config.js └── theme.js /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | .yarn/install-state.gz 8 | 9 | # testing 10 | /coverage 11 | 12 | # next.js 13 | /.next/ 14 | /out/ 15 | 16 | # production 17 | /build 18 | 19 | # misc 20 | .DS_Store 21 | *.pem 22 | 23 | # debug 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # HelpBot 2 | 3 | HelpBot is a cutting-edge AI customer support chatbot built using Next.js and Material-UI (MUI). HelpBot provides a user-friendly and engaging experience for customers seeking assistance. 4 | 5 | Created with 6 | - Next.js 7 | - Tailwind CSS 8 | - Daisy UI 9 | -------------------------------------------------------------------------------- /app/components/About.jsx: -------------------------------------------------------------------------------- 1 | const About = () => { 2 | return ( 3 |
4 |
5 |

6 | About HelpBot 7 |

8 |

9 | HelpBot is an AI-driven customer support platform designed to enhance 10 | your customer service experience. We provide businesses with a 11 | powerful tool that ensures satisfaction through instant, accurate, and 12 | personalized responses. With 24/7 availability and seamless 13 | integration, HelpBot is the ultimate solution for modern customer 14 | support needs. 15 |

16 |
17 |
18 | ) 19 | } 20 | 21 | export default About; 22 | -------------------------------------------------------------------------------- /app/components/ChatModal.jsx: -------------------------------------------------------------------------------- 1 | // components/ChatModal.js 2 | 'use client'; 3 | 4 | import React, { useState } from 'react'; 5 | 6 | const ChatModal = ({ isOpen, onClose }) => { 7 | return ( 8 | <> 9 | {isOpen && ( 10 |
11 |
12 |
13 | 19 |
20 |
21 | {/* Chat messages */} 22 |
23 |
24 |

Hello! How can I help you today?

25 |
26 | {/* Add more messages here */} 27 |
28 |
29 |
30 | 35 | 38 |
39 |
40 |
41 |
42 | )} 43 | 44 | ); 45 | }; 46 | 47 | export default ChatModal; 48 | -------------------------------------------------------------------------------- /app/components/Feature.jsx: -------------------------------------------------------------------------------- 1 | const Features = () => { 2 | const featureData = [ 3 | { 4 | title: "Instant Feedback", 5 | description: "Get instant feedback to all your queries." 6 | }, 7 | { 8 | title: "24/7 Availability", 9 | description: "We are available around the clock." 10 | }, 11 | { 12 | title: "Seamless Integration", 13 | description: "Easily integrate with your existing systems." 14 | } 15 | ]; 16 | 17 | return ( 18 |
19 |
20 | {featureData.map((feature, index) => ( 21 |
22 |
23 |

{feature.title}

24 |

{feature.description}

25 |
26 |
27 | ))} 28 |
29 |
30 | ); 31 | }; 32 | 33 | export default Features; 34 | -------------------------------------------------------------------------------- /app/components/Footer.jsx: -------------------------------------------------------------------------------- 1 | export default function Footer() { 2 | return ( 3 | 47 | ); 48 | } 49 | -------------------------------------------------------------------------------- /app/components/Founders.jsx: -------------------------------------------------------------------------------- 1 | import Image from 'next/image'; 2 | 3 | const founders = [ 4 | { name: 'Obidur Rahman', role: 'CEO & Co-Founder', image: '/obidur.jpg' }, 5 | { name: 'Mehreen Mallick Fiona', role: 'COO & Co-Founder', image: '/mehreen.jpg' }, 6 | { name: 'Hasanul Banna Himel', role: 'CTO & Co-Founder', image: '/himel.jpg' }, 7 | { name: 'Zaynul Abedin Miah', role: 'CMO & Co-Founder', image: '/zaynul.jpg' }, 8 | ]; 9 | 10 | export default function Founders() { 11 | return ( 12 |
13 |
14 | {founders.map((founder, index) => ( 15 |
16 |
17 | {founder.name} 25 |
26 |

27 | {founder.name} 28 |

29 |

{founder.role}

30 |
31 | ))} 32 |
33 |
34 | ); 35 | } 36 | -------------------------------------------------------------------------------- /app/components/GoogleSignInButton.jsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { Button } from '@mui/material'; 4 | import { GoogleAuthProvider, signInWithPopup } from 'firebase/auth'; 5 | import { auth, provider } from '@/app/firebase/config'; 6 | import { useRouter } from 'next/navigation'; 7 | 8 | const GoogleSignInButton = () => { 9 | const router = useRouter(); 10 | 11 | const handleGoogleSignIn = async () => { 12 | try { 13 | const result = await signInWithPopup(auth, provider); 14 | const user = result.user; 15 | if (user) { 16 | sessionStorage.setItem('user', user.email); // Store user email 17 | console.log('Google Sign-In successful:', user.email); 18 | router.push('/'); // Redirect to home page 19 | } 20 | } catch (error) { 21 | console.error('Error during Google Sign-In:', error); 22 | } 23 | }; 24 | 25 | return ( 26 | 33 | ); 34 | }; 35 | 36 | export default GoogleSignInButton; -------------------------------------------------------------------------------- /app/components/Header.jsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { useState } from 'react'; 4 | import { useRouter } from 'next/navigation'; 5 | import Link from 'next/link'; // Import Link from next/link 6 | 7 | export default function Header({ isLoggedIn }) { 8 | const [menuOpen, setMenuOpen] = useState(false); 9 | const router = useRouter(); 10 | 11 | const handleMenuToggle = () => { 12 | setMenuOpen(prev => !prev); 13 | }; 14 | 15 | const handleLogout = async () => { 16 | // Implement logout functionality here 17 | console.log("User logged out"); 18 | }; 19 | 20 | const handleNavigation = (path) => { 21 | router.push(path); 22 | }; 23 | 24 | return ( 25 |
26 |
27 | 28 | HelpBot 29 | 30 |
31 |
32 | 57 |
58 |
59 | ); 60 | } 61 | -------------------------------------------------------------------------------- /app/components/Hero.jsx: -------------------------------------------------------------------------------- 1 | // components/Hero.js 2 | 'use client'; 3 | 4 | import React, { useState } from 'react'; 5 | import ChatModal from './ChatModal'; 6 | 7 | export default function Hero() { 8 | const [isChatOpen, setIsChatOpen] = useState(false); 9 | 10 | const handleOpenChat = () => { 11 | setIsChatOpen(true); 12 | }; 13 | 14 | const handleCloseChat = () => { 15 | setIsChatOpen(false); 16 | }; 17 | 18 | return ( 19 | <> 20 |
24 |
25 |
26 |
27 |

Welcome to HelpBot

28 |

Your personalized AI assistant.

29 | 35 |
36 |
37 |
38 | 39 | 40 | ); 41 | } 42 | -------------------------------------------------------------------------------- /app/components/Pricing.jsx: -------------------------------------------------------------------------------- 1 | const Pricing = () => { 2 | return ( 3 |
4 |

Pricing Plans

5 |
6 | {/* Basic Plan */} 7 |
8 |
9 |

Basic Plan

10 |

Free

11 |

12 | Essential features for small businesses. 13 |

14 | Get Started 15 |
16 |
17 | 18 | {/* Pro Plan */} 19 |
20 |
21 |

Pro Plan

22 |

$49/month

23 |

24 | Advanced features for growing businesses. 25 |

26 | Choose Plan 27 |
28 |
29 | 30 | {/* Enterprise Plan */} 31 |
32 |
33 |

Enterprise Plan

34 |

$99/month

35 |

36 | All features for large enterprises. 37 |

38 | Choose Plan 39 |
40 |
41 |
42 |
43 | ); 44 | }; 45 | 46 | export default Pricing; 47 | -------------------------------------------------------------------------------- /app/components/Testimonial.jsx: -------------------------------------------------------------------------------- 1 | import Image from 'next/image'; 2 | 3 | const testimonials = [ 4 | { name: 'John Doe', image: '/john.jpg', feedback: 'HelpBot has transformed the way we handle customer service. The AI is incredibly accurate and efficient.' }, 5 | { name: 'Jane Smith', image: '/jane.jpg', feedback: 'The 24/7 availability of HelpBot has been a game-changer for our business. Highly recommended!' }, 6 | { name: 'Alice Johnson', image: '/alice.jpg', feedback: 'Integration with HelpBot was seamless and easy. Our customers love the instant responses.' }, 7 | ]; 8 | 9 | export default function TestimonialsSection() { 10 | return ( 11 |
12 |

What Our Customers Say

13 |
14 | {testimonials.map((testimonial, index) => ( 15 |
16 |
17 | {testimonial.name} 24 |
25 |

26 | {testimonial.name} 27 |

28 |

29 | {testimonial.feedback} 30 |

31 |
32 | ))} 33 |
34 |
35 | ); 36 | } 37 | -------------------------------------------------------------------------------- /app/components/sign-in/page.jsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { useState } from 'react'; 4 | import { useSignInWithEmailAndPassword } from 'react-firebase-hooks/auth'; 5 | import { auth } from '@/app/firebase/config'; 6 | import { useRouter } from 'next/navigation'; 7 | import { EyeIcon, EyeSlashIcon } from '@heroicons/react/24/outline'; 8 | import 'daisyui/dist/full.css'; // Ensure DaisyUI styles are included 9 | 10 | const backgroundImageUrl = 'https://media.istockphoto.com/id/1390404138/vector/beautiful-watercolor-sky-and-cloud-background-illustration.jpg?s=612x612&w=0&k=20&c=YNzqdVU9ZPS-OVlddtJyIIb1JCWgZ0LpYHoG2Y_p4og='; 11 | 12 | const SignIn = () => { 13 | const [email, setEmail] = useState(''); 14 | const [password, setPassword] = useState(''); 15 | const [showPassword, setShowPassword] = useState(false); 16 | const [signInWithEmailAndPassword, user, loading, error] = useSignInWithEmailAndPassword(auth); 17 | const router = useRouter(); 18 | 19 | const handleClickShowPassword = () => { 20 | setShowPassword(!showPassword); 21 | }; 22 | 23 | const handleSignIn = async () => { 24 | try { 25 | const res = await signInWithEmailAndPassword(email, password); 26 | if (res) { 27 | sessionStorage.setItem('user', email); 28 | setEmail(''); 29 | setPassword(''); 30 | router.push('/'); 31 | } 32 | } catch (e) { 33 | console.error(e); 34 | } 35 | }; 36 | 37 | return ( 38 |
47 |
48 |

Sign In

49 | setEmail(e.target.value)} 54 | className="input input-bordered w-full mb-4" 55 | /> 56 |
57 | setPassword(e.target.value)} 62 | className="input input-bordered w-full" 63 | /> 64 | 75 |
76 | {error && ( 77 |

78 | {error.message} 79 |

80 | )} 81 | 88 |
89 |
90 | ); 91 | }; 92 | 93 | export default SignIn; 94 | -------------------------------------------------------------------------------- /app/components/sign-up/page.jsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { useState } from 'react'; 4 | import { useCreateUserWithEmailAndPassword } from 'react-firebase-hooks/auth'; 5 | import { auth } from '@/app/firebase/config'; 6 | import { useRouter } from 'next/navigation'; 7 | import { EyeIcon, EyeSlashIcon } from '@heroicons/react/24/outline'; 8 | import zxcvbn from 'zxcvbn'; // Import zxcvbn 9 | import 'daisyui/dist/full.css'; // Ensure DaisyUI styles are included 10 | 11 | const backgroundImageUrl = 'https://media.istockphoto.com/id/1390404138/vector/beautiful-watercolor-sky-and-cloud-background-illustration.jpg?s=612x612&w=0&k=20&c=YNzqdVU9ZPS-OVlddtJyIIb1JCWgZ0LpYHoG2Y_p4og='; 12 | 13 | const SignUp = () => { 14 | const [email, setEmail] = useState(''); 15 | const [password, setPassword] = useState(''); 16 | const [confirmPassword, setConfirmPassword] = useState(''); 17 | const [showPassword, setShowPassword] = useState(false); 18 | const [createUserWithEmailAndPassword, user, loading, error] = useCreateUserWithEmailAndPassword(auth); 19 | const router = useRouter(); 20 | 21 | const handleClickShowPassword = () => { 22 | setShowPassword(!showPassword); 23 | }; 24 | 25 | const handleSignUp = async () => { 26 | if (password !== confirmPassword) { 27 | alert("Passwords do not match!"); 28 | return; 29 | } 30 | try { 31 | const res = await createUserWithEmailAndPassword(email, password); 32 | if (res) { 33 | sessionStorage.setItem('user', email); 34 | setEmail(''); 35 | setPassword(''); 36 | setConfirmPassword(''); 37 | router.push('/sign-in'); 38 | } 39 | } catch (e) { 40 | console.error(e); 41 | } 42 | }; 43 | 44 | const evaluatePasswordStrength = () => { 45 | return zxcvbn(password).score; 46 | }; 47 | 48 | const passwordStrength = evaluatePasswordStrength(); 49 | const strengthLabel = ['Weak', 'Fair', 'Good', 'Strong', 'Very Strong'][passwordStrength]; 50 | 51 | return ( 52 |
61 |
62 |

Sign Up

63 | setEmail(e.target.value)} 68 | className="input input-bordered w-full mb-4" 69 | /> 70 |
71 | setPassword(e.target.value)} 76 | className="input input-bordered w-full" 77 | /> 78 | 89 |
90 |
91 | setConfirmPassword(e.target.value)} 96 | className="input input-bordered w-full" 97 | /> 98 | 109 |
110 | {password && ( 111 |
112 |
113 |
114 |
118 |
119 |

120 | Password strength: {strengthLabel} 121 |

122 |
123 |
124 | )} 125 | {error && ( 126 |

127 | {error.message} 128 |

129 | )} 130 | 137 |
138 |
139 | ); 140 | }; 141 | 142 | export default SignUp; 143 | -------------------------------------------------------------------------------- /app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ashfinn/HelpBot/53df7086b52bc06f90598449e75529224a53cff8/app/favicon.ico -------------------------------------------------------------------------------- /app/firebase/config.jsx: -------------------------------------------------------------------------------- 1 | // firebase/config.js 2 | import { initializeApp, getApps, getApp } from 'firebase/app'; 3 | import { getAuth, GoogleAuthProvider } from 'firebase/auth'; 4 | import { getFirestore } from 'firebase/firestore'; // Import Firestore 5 | 6 | const firebaseConfig = { 7 | apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY, 8 | authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN, 9 | projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID, 10 | storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET, 11 | messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID, 12 | appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID 13 | }; 14 | 15 | // Initialize Firebase 16 | const app = !getApps().length ? initializeApp(firebaseConfig) : getApp(); 17 | 18 | const auth = getAuth(app); 19 | const firestore = getFirestore(app); // Initialize Firestore 20 | const provider = new GoogleAuthProvider(); 21 | 22 | export { app, auth, firestore,provider }; // Export Firestore 23 | 24 | -------------------------------------------------------------------------------- /app/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; -------------------------------------------------------------------------------- /app/layout.jsx: -------------------------------------------------------------------------------- 1 | import { Inter } from "next/font/google"; 2 | import "./globals.css"; 3 | 4 | const inter = Inter({ subsets: ["latin"] }); 5 | 6 | export const metadata = { 7 | title: "HelpBot", 8 | description: "AI customer support chat app", 9 | }; 10 | 11 | export default function RootLayout({ children }) { 12 | return ( 13 | 14 | {children} 15 | 16 | ); 17 | } 18 | -------------------------------------------------------------------------------- /app/page.jsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import { useState, useEffect, useRef } from 'react'; 4 | import { useRouter } from 'next/navigation'; 5 | import Header from './components/Header'; 6 | import Footer from './components/Footer'; 7 | import Feature from './components/Feature'; 8 | import Testimonial from './components/Testimonial'; 9 | import Pricing from './components/Pricing'; 10 | import Founders from './components/Founders'; 11 | import Hero from './components/Hero'; 12 | import About from './components/About'; 13 | import Modal from './components/ChatModal'; 14 | 15 | export default function Home() { 16 | 17 | const [isLoading, setIsLoading] = useState(false); 18 | const [isLoggedIn, setIsLoggedIn] = useState(false); 19 | const [userEmail, setUserEmail] = useState(''); 20 | const [modalOpen, setModalOpen] = useState(false); 21 | const [modalMessage, setModalMessage] = useState(''); 22 | 23 | const router = useRouter(); 24 | const messagesEndRef = useRef(null); 25 | 26 | useEffect(() => { 27 | const checkLoginStatus = () => { 28 | const user = sessionStorage.getItem('user'); 29 | if (user) { 30 | setIsLoggedIn(true); 31 | setUserEmail(user); 32 | } 33 | }; 34 | checkLoginStatus(); 35 | }, []); 36 | 37 | useEffect(() => { 38 | const script = document.createElement('script'); 39 | script.src = "//code.tidio.co/krqixenaacagu6fl0wvcg2h5mf0jjfj2.js"; 40 | script.async = true; 41 | document.body.appendChild(script); 42 | 43 | return () => { 44 | document.body.removeChild(script); 45 | }; 46 | }, []); 47 | 48 | const handleLogout = () => { 49 | sessionStorage.removeItem('user'); 50 | setIsLoggedIn(false); 51 | setUserEmail(''); 52 | router.push('/sign-in'); 53 | }; 54 | 55 | const handleOpenModal = (message) => { 56 | setModalMessage(message); 57 | setModalOpen(true); 58 | }; 59 | 60 | const handleCloseModal = () => setModalOpen(false); 61 | 62 | return ( 63 |
64 |
65 | {isLoggedIn && ( 66 | 69 | )} 70 | 71 | handleOpenModal('This is an error message.')} /> 72 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 |
89 |
90 | ); 91 | } 92 | -------------------------------------------------------------------------------- /app/sign-in/page.jsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { useState } from 'react'; 4 | import { useSignInWithEmailAndPassword } from 'react-firebase-hooks/auth'; 5 | import { auth } from '@/app/firebase/config'; 6 | import { useRouter } from 'next/navigation'; 7 | import Link from 'next/link'; 8 | import { EyeIcon, EyeSlashIcon } from '@heroicons/react/24/outline'; 9 | import 'daisyui/dist/full.css'; // Ensure DaisyUI styles are included 10 | 11 | const backgroundImageUrl = 'https://media.istockphoto.com/id/1390404138/vector/beautiful-watercolor-sky-and-cloud-background-illustration.jpg?s=612x612&w=0&k=20&c=YNzqdVU9ZPS-OVlddtJyIIb1JCWgZ0LpYHoG2Y_p4og='; 12 | 13 | const SignIn = () => { 14 | const [email, setEmail] = useState(''); 15 | const [password, setPassword] = useState(''); 16 | const [showPassword, setShowPassword] = useState(false); 17 | const [signInWithEmailAndPassword, user, loading, error] = useSignInWithEmailAndPassword(auth); 18 | const router = useRouter(); 19 | 20 | const handleClickShowPassword = () => { 21 | setShowPassword(!showPassword); 22 | }; 23 | 24 | const handleSignIn = async () => { 25 | try { 26 | const res = await signInWithEmailAndPassword(email, password); 27 | if (res) { 28 | sessionStorage.setItem('user', email); 29 | setEmail(''); 30 | setPassword(''); 31 | router.push('/'); 32 | } 33 | } catch (e) { 34 | console.error(e); 35 | } 36 | }; 37 | 38 | return ( 39 |
48 |
49 |

Sign In

50 | setEmail(e.target.value)} 55 | className="input input-bordered w-full mb-4" 56 | /> 57 |
58 | setPassword(e.target.value)} 63 | className="input input-bordered w-full" 64 | /> 65 | 76 |
77 | {error && ( 78 |

79 | {error.message} 80 |

81 | )} 82 | 89 |

90 | Don't have an account?{' '} 91 | Sign Up 92 |

93 |
94 |
95 | ); 96 | }; 97 | 98 | export default SignIn; 99 | -------------------------------------------------------------------------------- /app/sign-up/page.jsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { useState } from 'react'; 4 | import { useCreateUserWithEmailAndPassword } from 'react-firebase-hooks/auth'; 5 | import { auth } from '@/app/firebase/config'; 6 | import { useRouter } from 'next/navigation'; 7 | import Link from 'next/link'; 8 | import { EyeIcon, EyeSlashIcon } from '@heroicons/react/24/outline'; 9 | import 'daisyui/dist/full.css'; // Ensure DaisyUI styles are included 10 | 11 | const backgroundImageUrl = 'https://media.istockphoto.com/id/1390404138/vector/beautiful-watercolor-sky-and-cloud-background-illustration.jpg?s=612x612&w=0&k=20&c=YNzqdVU9ZPS-OVlddtJyIIb1JCWgZ0LpYHoG2Y_p4og='; 12 | 13 | const SignUp = () => { 14 | const [email, setEmail] = useState(''); 15 | const [password, setPassword] = useState(''); 16 | const [confirmPassword, setConfirmPassword] = useState(''); 17 | const [showPassword, setShowPassword] = useState(false); 18 | const [createUserWithEmailAndPassword, user, loading, error] = useCreateUserWithEmailAndPassword(auth); 19 | const router = useRouter(); 20 | 21 | const handleClickShowPassword = () => { 22 | setShowPassword(!showPassword); 23 | }; 24 | 25 | const handleSignUp = async () => { 26 | if (password !== confirmPassword) { 27 | alert("Passwords do not match!"); 28 | return; 29 | } 30 | try { 31 | const res = await createUserWithEmailAndPassword(email, password); 32 | if (res) { 33 | sessionStorage.setItem('user', email); 34 | setEmail(''); 35 | setPassword(''); 36 | setConfirmPassword(''); 37 | router.push('/'); 38 | } 39 | } catch (e) { 40 | console.error(e); 41 | } 42 | }; 43 | 44 | return ( 45 |
54 |
55 |

Sign Up

56 | setEmail(e.target.value)} 61 | className="input input-bordered w-full mb-4" 62 | /> 63 |
64 | setPassword(e.target.value)} 69 | className="input input-bordered w-full" 70 | /> 71 | 82 |
83 |
84 | setConfirmPassword(e.target.value)} 89 | className="input input-bordered w-full" 90 | /> 91 | 102 |
103 | {error && ( 104 |

105 | {error.message} 106 |

107 | )} 108 | 115 |

116 | Already have an account?{' '} 117 | Sign In 118 |

119 |
120 |
121 | ); 122 | }; 123 | 124 | export default SignUp; 125 | -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "paths": { 4 | "@/*": ["./*"] 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = {}; 3 | 4 | export default nextConfig; 5 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "helpbot", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "@heroicons/react": "^2.1.5", 13 | "daisyui": "^4.12.10", 14 | "firebase": "^10.13.0", 15 | "next": "14.2.6", 16 | "react": "^18", 17 | "react-dom": "^18", 18 | "react-firebase-hooks": "^5.1.1", 19 | "zxcvbn": "^4.4.2" 20 | }, 21 | "devDependencies": { 22 | "eslint": "^8", 23 | "eslint-config-next": "14.2.6", 24 | "postcss": "^8", 25 | "tailwindcss": "^3.4.1" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /public/background-backup.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ashfinn/HelpBot/53df7086b52bc06f90598449e75529224a53cff8/public/background-backup.jpg -------------------------------------------------------------------------------- /public/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ashfinn/HelpBot/53df7086b52bc06f90598449e75529224a53cff8/public/background.jpg -------------------------------------------------------------------------------- /public/background2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ashfinn/HelpBot/53df7086b52bc06f90598449e75529224a53cff8/public/background2.jpg -------------------------------------------------------------------------------- /public/himel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ashfinn/HelpBot/53df7086b52bc06f90598449e75529224a53cff8/public/himel.jpg -------------------------------------------------------------------------------- /public/mehreen.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ashfinn/HelpBot/53df7086b52bc06f90598449e75529224a53cff8/public/mehreen.jpg -------------------------------------------------------------------------------- /public/obidur.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ashfinn/HelpBot/53df7086b52bc06f90598449e75529224a53cff8/public/obidur.jpg -------------------------------------------------------------------------------- /public/zaynul.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ashfinn/HelpBot/53df7086b52bc06f90598449e75529224a53cff8/public/zaynul.jpg -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | content: [ 3 | "./app/**/*.{js,ts,jsx,tsx}", 4 | "./pages/**/*.{js,ts,jsx,tsx}", 5 | "./components/**/*.{js,ts,jsx,tsx}", 6 | ], 7 | theme: { 8 | extend: {}, 9 | }, 10 | plugins: [require("daisyui")], 11 | }; 12 | -------------------------------------------------------------------------------- /theme.js: -------------------------------------------------------------------------------- 1 | import { createTheme } from '@mui/material/styles'; 2 | 3 | const theme = createTheme({ 4 | palette: { 5 | primary: { 6 | main: '#1976d2', 7 | light: '#63a4ff', 8 | dark: '#004ba0', 9 | contrastText: '#fff', 10 | }, 11 | secondary: { 12 | main: '#dc004e', 13 | light: '#ff5c8d', 14 | dark: '#9a0036', 15 | contrastText: '#fff', 16 | }, 17 | }, 18 | }); 19 | 20 | export default theme; 21 | --------------------------------------------------------------------------------