first commit

This commit is contained in:
Pradeeppon01 2025-02-06 17:28:44 +05:30
commit 6b89b1b6e5
41 changed files with 9862 additions and 0 deletions

24
.gitignore vendored Normal file
View File

@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

8
README.md Normal file
View File

@ -0,0 +1,8 @@
# React + Vite
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Currently, two official plugins are available:
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh

BIN
dist.zip Normal file

Binary file not shown.

38
eslint.config.js Normal file
View File

@ -0,0 +1,38 @@
import js from '@eslint/js'
import globals from 'globals'
import react from 'eslint-plugin-react'
import reactHooks from 'eslint-plugin-react-hooks'
import reactRefresh from 'eslint-plugin-react-refresh'
export default [
{ ignores: ['dist'] },
{
files: ['**/*.{js,jsx}'],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
parserOptions: {
ecmaVersion: 'latest',
ecmaFeatures: { jsx: true },
sourceType: 'module',
},
},
settings: { react: { version: '18.3' } },
plugins: {
react,
'react-hooks': reactHooks,
'react-refresh': reactRefresh,
},
rules: {
...js.configs.recommended.rules,
...react.configs.recommended.rules,
...react.configs['jsx-runtime'].rules,
...reactHooks.configs.recommended.rules,
'react/jsx-no-target-blank': 'off',
'react-refresh/only-export-components': [
'warn',
{ allowConstantExport: true },
],
},
},
]

13
index.html Normal file
View File

@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<!-- <link rel="icon" type="image/svg+xml" href="/vite.svg" /> -->
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>vvet.in</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.jsx"></script>
</body>
</html>

BIN
neuu@122.166.69.162 Normal file

Binary file not shown.

8357
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

37
package.json Normal file
View File

@ -0,0 +1,37 @@
{
"name": "frontend",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"lint": "eslint .",
"preview": "vite preview"
},
"dependencies": {
"@emotion/react": "^11.13.5",
"@emotion/styled": "^11.13.5",
"@mui/icons-material": "^6.1.10",
"@mui/material": "^6.1.10",
"@mui/styles": "^6.1.10",
"bootstrap": "^5.3.3",
"react": "^18.3.1",
"react-bootstrap": "^2.10.7",
"react-dom": "^18.3.1",
"react-router-dom": "^7.0.2",
"survey-react-ui": "^1.12.13"
},
"devDependencies": {
"@eslint/js": "^9.15.0",
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
"@vitejs/plugin-react": "^4.3.4",
"eslint": "^9.15.0",
"eslint-plugin-react": "^7.37.2",
"eslint-plugin-react-hooks": "^5.0.0",
"eslint-plugin-react-refresh": "^0.4.14",
"globals": "^15.12.0",
"vite": "^6.0.1"
}
}

1
public/vite.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

84
src/App.css Normal file
View File

@ -0,0 +1,84 @@
#root {
margin:0px;
padding: 0px;
width: 100%;
text-align: center;
height: 100vh;
background-color: white !important;
}
.logo {
height: 6em;
padding: 1.5em;
will-change: filter;
transition: filter 300ms;
}
.logo:hover {
filter: drop-shadow(0 0 2em #646cffaa);
}
.logo.react:hover {
filter: drop-shadow(0 0 2em #61dafbaa);
}
.heading-border-bottom{
border-bottom:2px solid #343a40;
}
@keyframes logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
@media (prefers-reduced-motion: no-preference) {
a:nth-of-type(2) .logo {
animation: logo-spin infinite 20s linear;
}
}
.card {
padding: 2em;
}
.read-the-docs {
color: #888;
}
body {
font-family: 'Arial', sans-serif;
margin: 0;
padding: 0;
background-color: #f5f5f5;
}
.page {
padding: 20px;
text-align: center;
}
.donate-button {
padding: 10px 20px;
background-color: #28a745;
color: #fff;
border: none;
border-radius: 5px;
cursor: pointer;
}
p{
margin: 0;
line-height: 25px;
}
h2{
margin:10px;
}
h1{
margin:15px;
}

29
src/App.jsx Normal file
View File

@ -0,0 +1,29 @@
import React from 'react';
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
import Navbar from './Components/Navbar';
import Pay from './Components/Register';
import Contact from './Components/Contact';
import Footer from './Components/Footer';
import FormBuilder from './Components/FormBuilder';
import AboutUs from './Components/AboutUs';
import './App.css';
import Home from './Components/Home';
import 'bootstrap/dist/css/bootstrap.min.css';
function App() {
return (
<Router>
<Navbar />
<Routes>
<Route path="/" element={<Home />} />
<Route path="/register" element={<Pay />} />
<Route path="/aboutUs" element={<AboutUs />} />
<Route path="/form" element={<FormBuilder />} />
<Route path="/contact" element={<Contact />} />
</Routes>
</Router>
);
}
export default App;

118
src/Components/AboutUs.jsx Normal file
View File

@ -0,0 +1,118 @@
import React from "react";
import {
Container,
Typography,
Box,
Grid,
Paper,
Button,
Icon,
} from "@mui/material";
import { useNavigate } from "react-router-dom";
const AboutUs = () => {
const navigate = useNavigate();
return (
<div style={{ padding: "40px 0", backgroundColor: "#f9f9f9" }}>
<Container maxWidth="lg">
<h1 className='heading-border-bottom'>About Us</h1>
<Grid container spacing={4}>
{/* History Section */}
<Grid item xs={12} md={12}>
<Box
>
<Typography variant="h5" sx={{ marginBottom: 3, fontWeight: "bold" }}>
Our History
</Typography>
<Typography variant="body1" paragraph>
Vertivel Educational Trust was founded in 2010 with a vision to
provide quality education to underprivileged children in rural
and underserved areas. Over the years, the trust has grown into
a leading educational organization that has impacted the lives
of over 1000 children through various initiatives and
educational programs.
</Typography>
</Box>
</Grid>
{/* Achievements Section */}
<Grid item xs={12} md={12}>
<Box
>
<Typography variant="h5" sx={{ marginBottom: 3, fontWeight: "bold" }}>
Our Achievements
</Typography>
<Typography variant="body1" paragraph>
- Provided scholarships to over 100 students.
<br />
- Established 10 schools across rural regions.
<br />
- Partnered with top universities to offer vocational training.
<br />
- Awarded "Best Educational NGO" in 2018.
<br />
</Typography>
</Box>
</Grid>
</Grid>
{/* Goals Section */}
<Box mt={4}>
<Typography variant="h5" sx={{ marginBottom: 3, fontWeight: "bold" }}>
Our Future Goals
</Typography>
<Typography
variant="body1"
sx={{ fontSize: "1.1rem", lineHeight: 1.6, color: "#555" }}
>
- Expand our reach to more than 1000 students by 2025.
<br />
- Introduce digital classrooms in remote areas.
<br />
- Collaborate with tech companies to provide online learning
platforms.
<br />
- Establish a fund to support education in low-income families.
<br />
</Typography>
</Box>
{/* Call to Action Section */}
<Box
mt={4}
display="flex"
justifyContent="center"
flexDirection="column"
alignItems="center"
>
<Button
sx={{
padding: "12px 30px",
backgroundColor: "#FF5722",
color: "#fff",
"&:hover": { backgroundColor: "#e64a19" },
}}
href="/contact"
>
Contact Us
</Button>
<Box
mt={3}
display="flex"
justifyContent="center"
alignItems="center"
>
{/* <Icon sx={{ fontSize: "50px", color: "#FF5722" }}>school</Icon>
<Typography variant="h6" sx={{ marginLeft: 2 }}>
Join Us in Shaping the Future of Education!
</Typography> */}
</Box>
</Box>
</Container>
</div>
);
};
export default AboutUs;

View File

@ -0,0 +1,50 @@
.carousel {
position: relative;
width: 100%;
margin: 0 auto;
overflow: hidden;
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2);
padding: 20px 0px;
max-height: 600px;
position: relative;
}
.carousel .carousel-slider{
width: 50px;
height: 100%;
position: absolute;
background-color: #343a40;
right: 0;
overflow: hidden;
}
.carousel-image {
width: 100%;
height: auto;
transition: opacity 1s ease-in-out;
}
.carousel-indicators {
position: absolute;
bottom: 10px;
left: 50%;
transform: translateX(-50%);
display: flex;
gap: 5px;
}
.indicator {
width: 10px;
height: 10px;
border-radius: 50%;
background-color: rgba(255, 255, 255, 0.5);
cursor: pointer;
transition: background-color 0.3s;
}
.indicator.active {
background-color: #fff;
}

View File

@ -0,0 +1,35 @@
import React, { useState, useEffect } from 'react';
import './Carousel.css';
const Carousel = ({ images }) => {
const [currentIndex, setCurrentIndex] = useState(0);
useEffect(() => {
const interval = setInterval(() => {
setCurrentIndex((prevIndex) => (prevIndex + 1) % images.length);
}, 3000);
return () => clearInterval(interval);
}, [images.length]);
return (
<div className="carousel">
<div className='carousel-slider'></div>
<img
src={images[currentIndex]}
alt={`Slide ${currentIndex + 1}`}
className="carousel-image"
/>
<div className="carousel-indicators">
{images.map((_, index) => (
<span
key={index}
className={`indicator ${index === currentIndex ? 'active' : ''}`}
onClick={() => setCurrentIndex(index)}
></span>
))}
</div>
</div>
);
};
export default Carousel;

View File

@ -0,0 +1,13 @@
import React from 'react';
const Contact = () => {
return (
<div className="page contact">
<h2>Contact Us</h2>
<p>Email: info@vertiveleducationaltrust.org</p>
<p>Phone: +91 7604883357</p>
</div>
);
};
export default Contact;

View File

@ -0,0 +1,5 @@
.customer-count-card{
background-color: #343a40 !important;
color: white !important;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3); /* Add box shadow */
}

View File

@ -0,0 +1,44 @@
import React from "react";
import { Box, Typography, Grid, Paper } from "@mui/material";
import './CustomerCountCard.css'
const CustomerCountCard = () => {
return (
<Paper
className="customer-count-card"
elevation={3}
sx={{
padding: 4,
textAlign: "center",
backgroundColor: "#f5f5f5",
borderRadius: 2,
}}
>
<Grid container spacing={2} alignItems="center" justifyContent="center">
<Grid item>
<Typography
variant="h2"
sx={{
fontWeight: "bold",
}}
>
110+
</Typography>
</Grid>
<Grid item>
<Typography
variant="h5"
sx={{
fontWeight: "medium",
}}
>
Customers have trusted us <br />
for quality education services.
</Typography>
</Grid>
</Grid>
</Paper>
);
};
export default CustomerCountCard;

View File

@ -0,0 +1,3 @@
.donate-main-container{
padding: 80px 40px;
}

45
src/Components/Donate.jsx Normal file
View File

@ -0,0 +1,45 @@
import React from 'react';
import { useNavigate } from 'react-router-dom';
import { Button, Typography, Box } from '@mui/material';
import './Donate.css'
const Donate = () => {
const navigate = useNavigate();
const handleRegisterClick = () => {
// Navigate to the /register route when the button is clicked
navigate('/register');
};
return (
<Box
className="donate-main-container"
sx={{
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
justifyContent: 'center',
borderRadius: '8px',
margin: 'auto'
}}
>
<h1 className="heading-border-bottom" sx={{ marginBottom: '20px', fontWeight: 'bold' }}>
Your Donation Can Make a Difference
</h1>
<Typography variant="body1" sx={{ marginBottom: '20px' }}>
Join us in our mission to help those in need. By becoming a donor, you can contribute to
creating a positive impact in the lives of many.
</Typography>
<Button
variant="contained"
color="primary"
onClick={handleRegisterClick}
sx={{ padding: '10px 20px', backgroundColor:'rgb(255, 87, 34)' }}
>
Register to Donate
</Button>
</Box>
);
};
export default Donate;

60
src/Components/Footer.css Normal file
View File

@ -0,0 +1,60 @@
/* Footer Container */
.footer-container {
background-color: #343a40;
color: white;
padding: 40px 50px;
}
/* Footer Content */
.footer-content {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
gap: 30px;
}
/* Each Section */
.footer-section {
flex: 1;
min-width: 250px;
}
.footer-section h3 {
color: #f39c12;
margin-bottom: 15px;
}
.footer-section p, .footer-section ul {
font-size: 14px;
line-height: 1.6;
}
.footer-section a {
color: #ecf0f1;
text-decoration: none;
}
.footer-section a:hover {
text-decoration: underline;
}
.footer-section ul {
padding-left: 0;
list-style: none;
width: 100px;
text-align: left;
margin: auto;
}
/* Footer Bottom */
.footer-bottom {
text-align: center;
margin-top: 40px;
font-size: 12px;
color: #bdc3c7;
}
.footer-bottom p {
margin: 0;
}

56
src/Components/Footer.jsx Normal file
View File

@ -0,0 +1,56 @@
import './Footer.css';
const Footer = () => {
return (
<div className="footer-container">
<div className="footer-content">
{/* First Section - Institution Name */}
<div className="footer-section">
<h3>Vetrivel Educational Trust</h3>
<p>
Vetrivel Educational Trust, founded in the year 2010.
The nineteen founder trust members meticulously worked in setting up the best education
institution that can cater to the needs of the students.
</p>
</div>
{/* Second Section - Important Links */}
{/* <div className="footer-section">
<h3>Important Links</h3>
<ul>
<li><a href="/terms-of-use">Terms of Use</a></li>
<li><a href="/privacy-policy">Privacy Policy</a></li>
<li><a href="/disclaimer">Disclaimer</a></li>
<li><a href="/sket-brochure">Sket Brochure</a></li>
</ul>
</div> */}
{/* Third Section - Our Institutions */}
{/* <div className="footer-section">
<h3>Our Institutions</h3>
<p>Sir M Visvesvaraya Institute of Technology</p>
<p>Krishnadevaraya College of Dental Sciences & Hospital</p>
<p>Sir M V School of Architecture</p>
</div> */}
{/* Fourth Section - Contact Us */}
<div className="footer-section">
<h3>Contact Us</h3>
<p>
Vetrivel Educational Trust<br />
Bengaluru,Karnataka - 560080<br />
Phone: (+91) 7604883357
</p>
</div>
</div>
<div className="footer-bottom">
<p>Copyright 2023. All rights reserved. Designed by Outer Circle</p>
</div>
</div>
);
};
export default Footer;

View File

@ -0,0 +1,16 @@
/* Center the complete button */
.sv-footer {
text-align: center !important; /* Center the footer content */
}
.sv-footer .sv-btn {
margin: 0 auto !important; /* Center the button within the footer */
display: block !important;
}
#sv-nav-complete{
display: flex;
justify-content: center;
width: 100%;
}

View File

@ -0,0 +1,43 @@
import React from "react";
import { Model } from "survey-core";
import { Survey } from "survey-react-ui";
import "survey-core/defaultV2.min.css";
import "./FormBuilder.css";
import { json } from "./json";
function FormBuilder() {
const survey = new Model(json);
survey.completedHtml = `
<h3>Thank you for registering!</h3>
<p>We will get back to you with more details soon.</p>
`;
// Callback function for when the form is completed
survey.onComplete.add((sender) => {
const formData = sender.data;
const submitFormData = () => {
const payload = {
formData,
};
fetch(`http://localhost:3333/api/v1/recordFormData`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(payload),
})
.then((response) => console.log("response === ", response))
.catch((error) => console.log("error ==== ", error));
};
submitFormData()
});
return (
<div style={{ textAlign: "center", height: "100%" }}>
<Survey model={survey} />
</div>
);
}
export default FormBuilder;

View File

@ -0,0 +1,44 @@
import './Homesection1.css'
const HomeSection1 = () => {
return (
<div class="home-section">
<div>
<h1 className='heading-border-bottom'>Welcome to Vertivel Educational Trust</h1>
<p>
At <strong>Vertivel Educational Trust</strong>, we believe in the transformative power of education.
Our commitment to excellence drives us to create opportunities for learners of all ages, empowering
them to achieve their dreams and build a brighter future.
</p>
</div>
<div>
<h2>Why Choose Us?</h2>
<p>
<p>
<strong>Quality Education:</strong> We prioritize delivering world-class education that nurtures
curiosity, creativity, and critical thinking.
</p>
<p>
<strong>Holistic Development:</strong> Beyond academics, we focus on the personal and professional
growth of our students through diverse activities and programs.
</p>
<p>
<strong>Inclusive Approach:</strong> Education should be accessible to all. We are dedicated to
supporting students from all backgrounds through scholarships and community initiatives.
</p>
</p>
</div>
<div>
<h2>A Glimpse of Our Initiatives</h2>
<p>
<p>Providing scholarships to meritorious and underprivileged students.</p>
<p>Organizing skill development workshops and career guidance sessions.</p>
<p>Promoting cultural, sports, and extracurricular activities to shape well-rounded individuals.</p>
</p>
</div>
</div>
);
};
export default HomeSection1;

5
src/Components/Home.css Normal file
View File

@ -0,0 +1,5 @@
.home{
display: flex;
justify-content: start;
flex-direction: column;
}

38
src/Components/Home.jsx Normal file
View File

@ -0,0 +1,38 @@
import Navbar from "./Navbar";
import Footer from "./Footer";
import Carousel from "./Carousel";
import HomeSection1 from "./Home-Section-1";
import MissionVision from "./MissionVision";
import CustomerCountCard from "./CustomerCountCard";
import Marquee from "./Marquee";
import StatsCard from "./StatsCard";
import Donate from './Donate'
import HomeMockSection from "./HomeMockSection";
import "./Home.css";
const Home = () => {
const images = [
"https://cdn.pixabay.com/photo/2020/01/09/03/43/mansion-4751778_1280.jpg",
"https://cdn.pixabay.com/photo/2017/07/25/22/16/trinity-college-2539751_1280.jpg",
"https://cdn.pixabay.com/photo/2020/01/09/03/43/mansion-4751778_1280.jpg",
"https://media.istockphoto.com/id/838370892/photo/dublin-ireland-trinity-college.jpg?s=2048x2048&w=is&k=20&c=PzQkgqH3tjpGA2Cac2lmjk70wUQQB1c_YssmCdQ1IGI=",
"https://cdn.pixabay.com/photo/2020/01/09/03/43/mansion-4751778_1280.jpg",
];
return (
<>
<div className="home">
<Carousel images={images} />
<Marquee/>
<HomeSection1 />
<CustomerCountCard/>
<MissionVision/>
<StatsCard/>
<Donate/>
<HomeMockSection/>
</div>
<Footer />
</>
);
};
export default Home;

View File

@ -0,0 +1,90 @@
import React from 'react';
import { Button, Typography, Box, Grid, Icon } from '@mui/material';
import { AccessAlarm, School, CheckCircle } from '@mui/icons-material';
import { useNavigate } from 'react-router-dom';
const HomeMockSection = () => {
const navigate = useNavigate();
const handleRegisterClick = () => {
navigate('/form?type=neetmock');
};
return (
<Box
sx={{
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
justifyContent: 'center',
padding: '60px 20px',
borderRadius: '8px',
margin: 'auto',
}}
>
<h1 className="heading-border-bottom">
NEET Mock Tests Powered by Vidhai
</h1>
<Typography variant="body1" sx={{ marginBottom: '20px' }}>
Prepare for NEET with high-quality mock tests designed to give you the best practice before the big exam.
With Vidhai's mock tests, you can assess your performance and get feedback that helps you improve.
</Typography>
<Grid container spacing={2} sx={{ marginBottom: '20px' }}>
<Grid item xs={12} md={4}>
<Box sx={{ textAlign: 'center' }}>
<Icon sx={{ fontSize: 40, color: '#FF5722' }}>
<School />
</Icon>
<Typography variant="h6" sx={{ marginTop: '10px' }}>
High-Quality Practice
</Typography>
<Typography variant="body2" sx={{ color: 'gray' }}>
Real exam-like questions to give you an accurate experience.
</Typography>
</Box>
</Grid>
<Grid item xs={12} md={4}>
<Box sx={{ textAlign: 'center' }}>
<Icon sx={{ fontSize: 40, color: '#FF5722' }}>
<AccessAlarm />
</Icon>
<Typography variant="h6" sx={{ marginTop: '10px' }}>
Time Management
</Typography>
<Typography variant="body2" sx={{ color: 'gray' }}>
Practice under time constraints to improve your speed and accuracy.
</Typography>
</Box>
</Grid>
<Grid item xs={12} md={4}>
<Box sx={{ textAlign: 'center' }}>
<Icon sx={{ fontSize: 40, color: '#FF5722' }}>
<CheckCircle />
</Icon>
<Typography variant="h6" sx={{ marginTop: '10px' }}>
Instant Results
</Typography>
<Typography variant="body2" sx={{ color: 'gray' }}>
Receive immediate feedback on your performance after each test.
</Typography>
</Box>
</Grid>
</Grid>
<Button
variant="contained"
color="primary"
onClick={handleRegisterClick}
sx={{ padding: '10px 20px', fontSize: '16px',backgroundColor:'rgb(255, 87, 34)' }}
>
Register Now
</Button>
</Box>
);
};
export default HomeMockSection;

View File

@ -0,0 +1,5 @@
.home-section{
padding: 80px 20px;
max-width: 1200px;
margin: auto;
}

View File

@ -0,0 +1,42 @@
.marquee-container {
display: flex;
align-items: center;
justify-content: space-between;
overflow: hidden;
background-color: #343a40;
color: white;
padding: 10px 20px;
position: relative;
}
.marquee-message {
white-space: nowrap;
display: inline-block;
animation: scroll-left 30s linear infinite;
font-size: 16px;
font-weight: bold;
}
.register-button {
background-color: #28a745;
color: white;
border: none;
padding: 10px 20px;
cursor: pointer;
font-size: 16px;
border-radius: 5px;
}
.register-button:hover {
background-color: #218838;
}
@keyframes scroll-left {
0% {
transform: translateX(100%);
}
100% {
transform: translateX(-100%);
}
}

View File

@ -0,0 +1,14 @@
import React from 'react';
import './Marquee.css'; // Import the CSS file for styling
const Marquee = () => {
return (
<div className="marquee-container">
<div className="marquee-message">
Become a trustee by donating things. Your generous contributions will help shape the future of education and make a lasting impact. Click the button below to register and join our mission to provide quality education to all.
</div>
</div>
);
};
export default Marquee;

View File

@ -0,0 +1,29 @@
const MissionVision = () => {
return (
<div style={{padding:"80px 30px",maxWidth:'1200px',margin:'auto'}}>
<div style={{ textAlign: "center", margin: "10px 0" }}>
<h1 className="heading-border-bottom">Our Mission & Vision</h1>
</div>
<div style={{ padding: "0px", lineHeight: "1.6" }}>
<h2>Our Mission</h2>
<p>
At <strong>Vertivel Educational Trust</strong>, our mission is to empower individuals through
quality education, fostering a sense of responsibility, critical thinking, and ethical values.
We strive to provide opportunities that nurture talent, bridge educational gaps, and inspire
lifelong learning in a dynamic and inclusive environment.
</p>
<h2>Our Vision</h2>
<p>
To be a leading institution that transforms lives and communities through education.
Our vision is to create a society where every individual has access to the knowledge,
skills, and opportunities needed to succeed and contribute positively to the world.
We aim to achieve this through innovation, inclusivity, and unwavering dedication
to academic excellence and personal development.
</p>
</div>
</div>
);
};
export default MissionVision;

109
src/Components/Navbar.css Normal file
View File

@ -0,0 +1,109 @@
/* Navbar styling */
.navbar {
display: flex;
justify-content: space-between;
align-items: center;
background-color: #343a40;
color: #fff;
width: 100%;
position: sticky;
padding: 20px !important;
}
.navbar .logo {
width: 80px;
height: auto;
border-radius: 35%;
padding: 20px;
}
.navbar .brand {
font-size: 24px;
font-weight: bold;
cursor: pointer;
display: flex;
justify-content: start;
align-items: center;
}
.navbar .brand-section {
display: flex;
flex-direction: column;
justify-content: start;
align-items: start;
line-height: 15px;
}
.navbar .college-name {
margin: 0;
}
.navbar p {
font-size: 15px;
}
.navbar .links a {
margin: 0 10px;
text-decoration: none;
color: #fff;
font-size: 18px;
}
.navbar .links {
padding: 5px 20px;
}
.navbar .links a:hover {
color: #28a745;
}
.navbar-header {
background-color: rgba(245, 146, 38, 1);
height: 30px;
width: 100%;
}
/* Add hamburger menu for small screens */
.hamburger {
display: none;
font-size: 30px;
cursor: pointer;
}
.navbar p{
margin: 0;
}
/* For screens smaller than 450px */
@media (max-width: 900px) {
.navbar .links {
display: none; /* Hide the links by default */
flex-direction: column;
position: absolute;
top: 60px; /* Adjust the position */
right: 0;
background-color: #343a40;
width: 100%;
padding: 10px 0;
}
.navbar .links.open {
display: flex; /* Show links when the menu is open */
z-index: 10;
position: absolute;
top:100px;
transition: 2s linear ease-in-out;
}
/* Show the hamburger menu on small screens */
.hamburger {
display: block; /* Show hamburger */
color: #fff;
}
.navbar .links a {
padding: 10px 20px;
text-align: center;
}
}

48
src/Components/Navbar.jsx Normal file
View File

@ -0,0 +1,48 @@
import React, { useState } from "react";
import { Link, useNavigate } from "react-router-dom";
import "./Navbar.css";
const Navbar = () => {
const [menuOpen, setMenuOpen] = useState(false); // State to handle the hamburger menu toggle
const navigate = useNavigate();
// Toggle menu visibility
const toggleMenu = () => {
setMenuOpen(!menuOpen);
};
return (
<nav className="navbar-container">
<div className="navbar">
<div className="brand">
<img
className="logo"
src="https://img.freepik.com/premium-vector/college-logo-design-template-vector-illustration_139372-346.jpg"
alt="College Logo"
/>
<div className="brand-section">
<h4 className="college-name" onClick={() => navigate("/")}>
VETRIVEL EDUCATIONAL TRUST
</h4>
<p>A Legacy of Excellence in Education</p>
</div>
</div>
{/* Hamburger icon */}
<div className="hamburger" onClick={toggleMenu}>
&#9776;
</div>
{/* Links */}
<div className={`links ${menuOpen ? "open" : ""}`}>
<Link to="/">Home</Link>
<Link to="/aboutUs">About Us</Link>
<Link to="/register">Register</Link>
<Link to="/contact">Contact</Link>
</div>
</div>
</nav>
);
};
export default Navbar;

154
src/Components/Register.jsx Normal file
View File

@ -0,0 +1,154 @@
import React, { useState } from "react";
import { TextField, Button, Container, Typography, Grid } from "@mui/material";
const Register = () => {
const [step, setStep] = useState(1); // Track the form step (1 for basic info, 2 for donation)
const [userInfo, setUserInfo] = useState({
name: "",
email: "",
phone: "",
donationAmount: "",
});
// Handle changes in input fields
const handleChange = (e) => {
const { name, value } = e.target;
setUserInfo({
...userInfo,
[name]: value,
});
};
const sendOTPviaEmail = () => {
const payload = {
userInfo, // Ensure `userInfo` is defined and contains valid data
};
fetch(`http://localhost:3333/api/v1/sendOTPviaEmail`, { // Correctly points to the backend route
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(payload), // Payload is properly serialized
})
.then((response) => {
console.log("response ==== ", response);
if(response.ok && response.status == 200){
setStep(2)
}
})
.catch((error) => {
console.log("error ===== ", error);
});
};
const handleSubmit = (e) => {
e.preventDefault();
if (step === 1) {
sendOTPviaEmail();
} else {
console.log("Form Data Submitted:", userInfo);
}
};
return (
<Container maxWidth="sm" sx={{ paddingTop: 5 }}>
<Typography variant="h4" gutterBottom>
Register and Donate
</Typography>
<Typography variant="body1" paragraph>
Support our cause by donating. Your contributions help us make education
accessible to all.
</Typography>
<form onSubmit={handleSubmit}>
{step === 1 ? (
<>
<Typography variant="h6" gutterBottom>
Step 1: Basic Information
</Typography>
<Grid container spacing={2}>
<Grid item xs={12}>
<TextField
fullWidth
label="Name"
name="name"
value={userInfo.name}
onChange={handleChange}
required
/>
</Grid>
<Grid item xs={12}>
<TextField
fullWidth
label="Email"
type="email"
name="email"
value={userInfo.email}
onChange={handleChange}
required
/>
</Grid>
<Grid item xs={12}>
<TextField
fullWidth
label="Phone Number"
type="tel"
name="phone"
value={userInfo.phone}
onChange={handleChange}
required
/>
</Grid>
<Grid item xs={12}>
<Button
type="submit"
variant="contained"
color="primary"
fullWidth
>
Next Step
</Button>
</Grid>
</Grid>
</>
) : (
<>
<Typography variant="h6" gutterBottom>
Step 2: Donation Information
</Typography>
<Grid container spacing={2}>
<Grid item xs={12}>
<TextField
fullWidth
label="Donation Amount"
type="number"
name="donationAmount"
value={userInfo.donationAmount}
onChange={handleChange}
required
/>
</Grid>
<Grid item xs={12}>
<Button
type="submit"
variant="contained"
color="primary"
fullWidth
>
Donate Now
</Button>
</Grid>
</Grid>
</>
)}
</form>
</Container>
);
};
export default Register;

View File

@ -0,0 +1,3 @@
.statscard-card{
min-width: 300px;
}

View File

@ -0,0 +1,45 @@
import React from 'react';
import { Card, CardContent, Typography } from '@mui/material';
import { Support, AttachMoney, Group } from '@mui/icons-material'; // Importing specific Material UI icons
import PersonIcon from '@mui/icons-material/Person';
import './StatsCard.css'
const statistics = [
{
label: 'Number of Supporters',
value: '100+',
icon: <PersonIcon style={{ fontSize: '40px', color: '#FF5722' }} /> // Using the actual Support icon
},
{
label: 'Fund Raised',
value: '15 Lakhs',
icon: <AttachMoney style={{ fontSize: '40px', color: '#FF5722' }} /> // Using the AttachMoney icon
},
{
label: 'People Benefited',
value: '158',
icon: <Group style={{ fontSize: '40px', color: '#FF5722' }} /> // Using the Group icon
}
];
const StatsCard = () => {
return (
<div className="d-flex flex-column flex-lg-row gap-3" style={{ margin:'auto',display: 'flex', justifyContent: 'space-around', padding: '20px' }}>
{statistics.map((stat, index) => (
<Card className="statscard-card" key={index} style={{ maxWidth: 200, backgroundColor: '#343a40', color: 'white', textAlign: 'center' }}>
<CardContent>
{stat.icon} {/* Rendering the icon here */}
<Typography variant="h5" style={{ marginTop: '10px' }}>
{stat.value}
</Typography>
<Typography variant="body2" style={{ marginTop: '5px' }}>
{stat.label}
</Typography>
</CardContent>
</Card>
))}
</div>
);
};
export default StatsCard;

71
src/Components/json.js Normal file
View File

@ -0,0 +1,71 @@
export const json = {
"title": "Neet Mock test Registration Form",
"logoPosition": "right",
"pages": [
{
"name": "page1",
"elements": [
{
"type": "text",
"name": "student_name",
"title": "Student Name",
"isRequired": true
},
{
"type": "dropdown",
"name": "standard",
"title": "Standard",
"isRequired": true,
"choices": [
{
"value": "Item 1",
"text": "8th"
},
{
"value": "Item 2",
"text": "9th"
},
{
"value": "Item 3",
"text": "10th"
},
{
"value": "Item 4",
"text": "11th"
},
{
"value": "Item 5",
"text": "12th"
}
]
},
{
"type": "text",
"name": "school_name",
"title": "School Name",
"isRequired": true
},
{
"type": "text",
"name": "pincode",
"title": "Pincode",
"isRequired": true
},
{
"type": "text",
"name": "email_id",
"title": "Email ID",
"isRequired": true,
"inputType": "email"
},
{
"type": "text",
"name": "contact_number",
"title": "Contact Number",
"isRequired": true,
"inputType": "tel"
}
]
}
]
}

1
src/assets/react.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="35.93" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 228"><path fill="#00D8FF" d="M210.483 73.824a171.49 171.49 0 0 0-8.24-2.597c.465-1.9.893-3.777 1.273-5.621c6.238-30.281 2.16-54.676-11.769-62.708c-13.355-7.7-35.196.329-57.254 19.526a171.23 171.23 0 0 0-6.375 5.848a155.866 155.866 0 0 0-4.241-3.917C100.759 3.829 77.587-4.822 63.673 3.233C50.33 10.957 46.379 33.89 51.995 62.588a170.974 170.974 0 0 0 1.892 8.48c-3.28.932-6.445 1.924-9.474 2.98C17.309 83.498 0 98.307 0 113.668c0 15.865 18.582 31.778 46.812 41.427a145.52 145.52 0 0 0 6.921 2.165a167.467 167.467 0 0 0-2.01 9.138c-5.354 28.2-1.173 50.591 12.134 58.266c13.744 7.926 36.812-.22 59.273-19.855a145.567 145.567 0 0 0 5.342-4.923a168.064 168.064 0 0 0 6.92 6.314c21.758 18.722 43.246 26.282 56.54 18.586c13.731-7.949 18.194-32.003 12.4-61.268a145.016 145.016 0 0 0-1.535-6.842c1.62-.48 3.21-.974 4.76-1.488c29.348-9.723 48.443-25.443 48.443-41.52c0-15.417-17.868-30.326-45.517-39.844Zm-6.365 70.984c-1.4.463-2.836.91-4.3 1.345c-3.24-10.257-7.612-21.163-12.963-32.432c5.106-11 9.31-21.767 12.459-31.957c2.619.758 5.16 1.557 7.61 2.4c23.69 8.156 38.14 20.213 38.14 29.504c0 9.896-15.606 22.743-40.946 31.14Zm-10.514 20.834c2.562 12.94 2.927 24.64 1.23 33.787c-1.524 8.219-4.59 13.698-8.382 15.893c-8.067 4.67-25.32-1.4-43.927-17.412a156.726 156.726 0 0 1-6.437-5.87c7.214-7.889 14.423-17.06 21.459-27.246c12.376-1.098 24.068-2.894 34.671-5.345a134.17 134.17 0 0 1 1.386 6.193ZM87.276 214.515c-7.882 2.783-14.16 2.863-17.955.675c-8.075-4.657-11.432-22.636-6.853-46.752a156.923 156.923 0 0 1 1.869-8.499c10.486 2.32 22.093 3.988 34.498 4.994c7.084 9.967 14.501 19.128 21.976 27.15a134.668 134.668 0 0 1-4.877 4.492c-9.933 8.682-19.886 14.842-28.658 17.94ZM50.35 144.747c-12.483-4.267-22.792-9.812-29.858-15.863c-6.35-5.437-9.555-10.836-9.555-15.216c0-9.322 13.897-21.212 37.076-29.293c2.813-.98 5.757-1.905 8.812-2.773c3.204 10.42 7.406 21.315 12.477 32.332c-5.137 11.18-9.399 22.249-12.634 32.792a134.718 134.718 0 0 1-6.318-1.979Zm12.378-84.26c-4.811-24.587-1.616-43.134 6.425-47.789c8.564-4.958 27.502 2.111 47.463 19.835a144.318 144.318 0 0 1 3.841 3.545c-7.438 7.987-14.787 17.08-21.808 26.988c-12.04 1.116-23.565 2.908-34.161 5.309a160.342 160.342 0 0 1-1.76-7.887Zm110.427 27.268a347.8 347.8 0 0 0-7.785-12.803c8.168 1.033 15.994 2.404 23.343 4.08c-2.206 7.072-4.956 14.465-8.193 22.045a381.151 381.151 0 0 0-7.365-13.322Zm-45.032-43.861c5.044 5.465 10.096 11.566 15.065 18.186a322.04 322.04 0 0 0-30.257-.006c4.974-6.559 10.069-12.652 15.192-18.18ZM82.802 87.83a323.167 323.167 0 0 0-7.227 13.238c-3.184-7.553-5.909-14.98-8.134-22.152c7.304-1.634 15.093-2.97 23.209-3.984a321.524 321.524 0 0 0-7.848 12.897Zm8.081 65.352c-8.385-.936-16.291-2.203-23.593-3.793c2.26-7.3 5.045-14.885 8.298-22.6a321.187 321.187 0 0 0 7.257 13.246c2.594 4.48 5.28 8.868 8.038 13.147Zm37.542 31.03c-5.184-5.592-10.354-11.779-15.403-18.433c4.902.192 9.899.29 14.978.29c5.218 0 10.376-.117 15.453-.343c-4.985 6.774-10.018 12.97-15.028 18.486Zm52.198-57.817c3.422 7.8 6.306 15.345 8.596 22.52c-7.422 1.694-15.436 3.058-23.88 4.071a382.417 382.417 0 0 0 7.859-13.026a347.403 347.403 0 0 0 7.425-13.565Zm-16.898 8.101a358.557 358.557 0 0 1-12.281 19.815a329.4 329.4 0 0 1-23.444.823c-7.967 0-15.716-.248-23.178-.732a310.202 310.202 0 0 1-12.513-19.846h.001a307.41 307.41 0 0 1-10.923-20.627a310.278 310.278 0 0 1 10.89-20.637l-.001.001a307.318 307.318 0 0 1 12.413-19.761c7.613-.576 15.42-.876 23.31-.876H128c7.926 0 15.743.303 23.354.883a329.357 329.357 0 0 1 12.335 19.695a358.489 358.489 0 0 1 11.036 20.54a329.472 329.472 0 0 1-11 20.722Zm22.56-122.124c8.572 4.944 11.906 24.881 6.52 51.026c-.344 1.668-.73 3.367-1.15 5.09c-10.622-2.452-22.155-4.275-34.23-5.408c-7.034-10.017-14.323-19.124-21.64-27.008a160.789 160.789 0 0 1 5.888-5.4c18.9-16.447 36.564-22.941 44.612-18.3ZM128 90.808c12.625 0 22.86 10.235 22.86 22.86s-10.235 22.86-22.86 22.86s-22.86-10.235-22.86-22.86s10.235-22.86 22.86-22.86Z"></path></svg>

After

Width:  |  Height:  |  Size: 4.0 KiB

68
src/index.css Normal file
View File

@ -0,0 +1,68 @@
:root {
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
line-height: 1.5;
font-weight: 400;
color-scheme: light dark;
color: rgba(255, 255, 255, 0.87);
background-color: #242424;
font-synthesis: none;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
a {
font-weight: 500;
color: #646cff;
text-decoration: inherit;
}
a:hover {
color: #535bf2;
}
body {
margin: 0;
display: flex;
place-items: center;
min-width: 320px;
min-height: 100vh;
}
h1 {
font-size: 3.2em;
line-height: 1.1;
}
button {
border-radius: 8px;
border: 1px solid transparent;
padding: 0.6em 1.2em;
font-size: 1em;
font-weight: 500;
font-family: inherit;
background-color: #1a1a1a;
cursor: pointer;
transition: border-color 0.25s;
}
button:hover {
border-color: #646cff;
}
button:focus,
button:focus-visible {
outline: 4px auto -webkit-focus-ring-color;
}
@media (prefers-color-scheme: light) {
:root {
color: #213547;
background-color: #ffffff;
}
a:hover {
color: #747bff;
}
button {
background-color: #f9f9f9;
}
}

10
src/main.jsx Normal file
View File

@ -0,0 +1,10 @@
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import './index.css'
import App from './App.jsx'
createRoot(document.getElementById('root')).render(
<StrictMode>
<App />
</StrictMode>,
)

7
vite.config.js Normal file
View File

@ -0,0 +1,7 @@
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
// https://vite.dev/config/
export default defineConfig({
plugins: [react()],
})