fix : changed layout of header and added a logo

This commit is contained in:
hardik 2025-08-02 07:19:30 +00:00
parent d0dc2e8ff2
commit efcd9290bc
76 changed files with 13746 additions and 18081 deletions

View File

@ -1,50 +1,50 @@
kind: pipeline kind: pipeline
name: Build Image name: Build Image
steps: steps:
# - name: Lint Check # - name: Lint Check
# image: node:21-alpine # image: node:21-alpine
# commands: # commands:
# - yarn install # - yarn install
# # - yarn lint # # - yarn lint
- name: Build Docker Image - name: Build Docker Image
image: plugins/docker image: plugins/docker
settings: settings:
build_args: "API_BASE_URL=https://quadraedge-api.midastix.com" build_args: "API_BASE_URL=https://quadraedge-api.midastix.com"
username: username:
from_secret: docker_username from_secret: docker_username
password: password:
from_secret: docker_password from_secret: docker_password
repo: git.midastix.com/ci-docker-repo-user/quadraedge repo: git.midastix.com/ci-docker-repo-user/quadraedge
registry: git.midastix.com registry: git.midastix.com
when: when:
branch: branch:
- main - main
event: event:
- push - push
- name: Deploy image - name: Deploy image
image: appleboy/drone-ssh image: appleboy/drone-ssh
settings: settings:
host: quadraedge.in host: quadraedge.in
username: quadraedge username: quadraedge
key: key:
from_secret: server_ssh_pkey from_secret: server_ssh_pkey
port: 22 port: 22
command_timeout: 3m command_timeout: 3m
script: script:
- echo "Deploying image" - echo "Deploying image"
- sudo /opt/deployable/quadraedge/docker/deploy.sh - sudo /opt/deployable/quadraedge/docker/deploy.sh
- echo "Completed Deployment" - echo "Completed Deployment"
when: when:
branch: branch:
- main - main
event: event:
- push - push
# trigger: # trigger:
# branch: # branch:
# - main # - main
# - feature/env_api_url # - feature/env_api_url
# event: # event:
# - push # - push

46
.gitignore vendored
View File

@ -1,23 +1,23 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies # dependencies
/node_modules /node_modules
/.pnp /.pnp
.pnp.js .pnp.js
# testing # testing
/coverage /coverage
# production # production
/build /build
# misc # misc
.DS_Store .DS_Store
.env.local .env.local
.env.development.local .env.development.local
.env.test.local .env.test.local
.env.production.local .env.production.local
npm-debug.log* npm-debug.log*
yarn-debug.log* yarn-debug.log*
yarn-error.log* yarn-error.log*

View File

@ -1 +1 @@
nodeLinker: node-modules nodeLinker: node-modules

View File

@ -1,31 +1,31 @@
FROM node:24-alpine AS builder FROM node:24-alpine AS builder
ARG API_BASE_URL="https://mfs-api.midastix.com" ARG API_BASE_URL="https://mfs-api.midastix.com"
ENV REACT_APP_API_BASE_URL $API_BASE_URL ENV REACT_APP_API_BASE_URL $API_BASE_URL
WORKDIR /app WORKDIR /app
COPY package.json package.json COPY package.json package.json
COPY yarn.lock yarn.lock COPY yarn.lock yarn.lock
# RUN yarn install --frozen-lockfile # RUN yarn install --frozen-lockfile
RUN yarn install RUN yarn install
# COPY . . # COPY . .
COPY public public COPY public public
COPY src src COPY src src
COPY tsconfig.json tsconfig.json COPY tsconfig.json tsconfig.json
# COPY .yarnrc.yml .yarnrc.yml # COPY .yarnrc.yml .yarnrc.yml
RUN yarn build RUN yarn build
FROM scratch FROM scratch
WORKDIR /app WORKDIR /app
COPY --from=builder /app/build ./build COPY --from=builder /app/build ./build
CMD ["sh"] CMD ["sh"]

View File

@ -1,46 +1,46 @@
# Getting Started with Create React App # Getting Started with Create React App
This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
## Available Scripts ## Available Scripts
In the project directory, you can run: In the project directory, you can run:
### `yarn start` ### `yarn start`
Runs the app in the development mode.\ Runs the app in the development mode.\
Open [http://localhost:3000](http://localhost:3000) to view it in the browser. Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
The page will reload if you make edits.\ The page will reload if you make edits.\
You will also see any lint errors in the console. You will also see any lint errors in the console.
### `yarn test` ### `yarn test`
Launches the test runner in the interactive watch mode.\ Launches the test runner in the interactive watch mode.\
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
### `yarn build` ### `yarn build`
Builds the app for production to the `build` folder.\ Builds the app for production to the `build` folder.\
It correctly bundles React in production mode and optimizes the build for the best performance. It correctly bundles React in production mode and optimizes the build for the best performance.
The build is minified and the filenames include the hashes.\ The build is minified and the filenames include the hashes.\
Your app is ready to be deployed! Your app is ready to be deployed!
See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
### `yarn eject` ### `yarn eject`
**Note: this is a one-way operation. Once you `eject`, you cant go back!** **Note: this is a one-way operation. Once you `eject`, you cant go back!**
If you arent satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. If you arent satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point youre on your own. Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point youre on your own.
You dont have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldnt feel obligated to use this feature. However we understand that this tool wouldnt be useful if you couldnt customize it when you are ready for it. You dont have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldnt feel obligated to use this feature. However we understand that this tool wouldnt be useful if you couldnt customize it when you are ready for it.
## Learn More ## Learn More
You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
To learn React, check out the [React documentation](https://reactjs.org/). To learn React, check out the [React documentation](https://reactjs.org/).

View File

@ -1,62 +1,63 @@
{ {
"name": "edfechfrontend", "name": "edfechfrontend",
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"dependencies": { "dependencies": {
"@emotion/react": "^11.14.0", "@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.1", "@emotion/styled": "^11.14.1",
"@mui/icons-material": "^6.4.12", "@mui/icons-material": "^6.4.12",
"@mui/material": "^6.4.12", "@mui/material": "^6.4.12",
"@mui/styled-engine-sc": "^6.1.2", "@mui/styled-engine-sc": "^6.1.2",
"@mui/types": "^7.2.17", "@mui/types": "^7.2.17",
"@testing-library/jest-dom": "^5.14.1", "@testing-library/jest-dom": "^5.14.1",
"@testing-library/react": "^13.0.0", "@testing-library/react": "^13.0.0",
"@testing-library/user-event": "^13.2.1", "@testing-library/user-event": "^13.2.1",
"@types/jest": "^27.0.1", "@types/jest": "^27.0.1",
"@types/node": "^16.7.13", "@types/node": "^16.7.13",
"@types/react": "^18.3.11", "@types/react": "^18.3.11",
"@types/react-dom": "^18.0.0", "@types/react-dom": "^18.0.0",
"framer-motion": "^12.23.0", "framer-motion": "^12.23.0",
"next": "^15.1.6", "next": "^15.1.6",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
"react-icons": "^5.5.0", "react-icons": "^5.5.0",
"react-intersection-observer": "^9.15.1", "react-intersection-observer": "^9.15.1",
"react-router-dom": "^6.27.0", "react-router-dom": "^6.27.0",
"react-scripts": "5.0.1", "react-scripts": "5.0.1",
"react-slick": "^0.30.3", "react-slick": "^0.30.3",
"slick-carousel": "^1.8.1", "slick-carousel": "^1.8.1",
"styled-components": "^6.1.13", "styled-components": "^6.1.13",
"typed.js": "^2.1.0", "typed.js": "^2.1.0",
"typescript": "^4.4.2", "typescript": "^4.4.2",
"web-vitals": "^2.1.0" "web-vitals": "^2.1.0"
}, },
"scripts": { "scripts": {
"start": "react-scripts start", "start": "react-scripts start",
"build": "react-scripts build", "build": "react-scripts build",
"test": "react-scripts test", "test": "react-scripts test",
"eject": "react-scripts eject" "eject": "react-scripts eject"
}, },
"eslintConfig": { "eslintConfig": {
"extends": [ "extends": [
"react-app", "react-app",
"react-app/jest" "react-app/jest"
] ]
}, },
"browserslist": { "browserslist": {
"production": [ "production": [
">0.2%", ">0.2%",
"not dead", "not dead",
"not op_mini all" "not op_mini all"
], ],
"development": [ "development": [
"last 1 chrome version", "last 1 chrome version",
"last 1 firefox version", "last 1 firefox version",
"last 1 safari version" "last 1 safari version"
] ]
}, },
"devDependencies": { "devDependencies": {
"@types/react-icons": "^2.2.7", "@types/react-icons": "^2.2.7",
"@types/react-slick": "^0.23.13" "@types/react-slick": "^0.23.13"
} },
} "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
}

View File

@ -1,22 +1,22 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Quadra Edge</title> <title>Quadra Edge</title>
</head> </head>
<body style="margin:0"> <body style="margin:0">
<div id="root"></div> <div id="root"></div>
</body> </body>
</html> </html>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Quadra Edge</title> <title>Quadra Edge</title>
</head> </head>
<body style="margin:0"> <body style="margin:0">
<div id="root"></div> <div id="root"></div>
</body> </body>
</html> </html>

View File

@ -1,25 +1,25 @@
{ {
"short_name": "React App", "short_name": "React App",
"name": "Create React App Sample", "name": "Create React App Sample",
"icons": [ "icons": [
{ {
"src": "favicon.ico", "src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16", "sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon" "type": "image/x-icon"
}, },
{ {
"src": "logo192.png", "src": "logo192.png",
"type": "image/png", "type": "image/png",
"sizes": "192x192" "sizes": "192x192"
}, },
{ {
"src": "logo512.png", "src": "logo512.png",
"type": "image/png", "type": "image/png",
"sizes": "512x512" "sizes": "512x512"
} }
], ],
"start_url": ".", "start_url": ".",
"display": "standalone", "display": "standalone",
"theme_color": "#000000", "theme_color": "#000000",
"background_color": "#ffffff" "background_color": "#ffffff"
} }

View File

@ -1,3 +1,3 @@
# https://www.robotstxt.org/robotstxt.html # https://www.robotstxt.org/robotstxt.html
User-agent: * User-agent: *
Disallow: Disallow:

View File

@ -1,38 +1,38 @@
.App { .App {
text-align: center; text-align: center;
} }
.App-logo { .App-logo {
height: 40vmin; height: 40vmin;
pointer-events: none; pointer-events: none;
} }
@media (prefers-reduced-motion: no-preference) { @media (prefers-reduced-motion: no-preference) {
.App-logo { .App-logo {
animation: App-logo-spin infinite 20s linear; animation: App-logo-spin infinite 20s linear;
} }
} }
.App-header { .App-header {
background-color: #282c34; background-color: #282c34;
min-height: 100vh; min-height: 100vh;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
font-size: calc(10px + 2vmin); font-size: calc(10px + 2vmin);
color: white; color: white;
} }
.App-link { .App-link {
color: #61dafb; color: #61dafb;
} }
@keyframes App-logo-spin { @keyframes App-logo-spin {
from { from {
transform: rotate(0deg); transform: rotate(0deg);
} }
to { to {
transform: rotate(360deg); transform: rotate(360deg);
} }
} }

View File

@ -1,9 +1,9 @@
import React from 'react'; import React from 'react';
import { render, screen } from '@testing-library/react'; import { render, screen } from '@testing-library/react';
import App from './App'; import App from './App';
test('renders learn react link', () => { test('renders learn react link', () => {
render(<App />); render(<App />);
const linkElement = screen.getByText(/learn react/i); const linkElement = screen.getByText(/learn react/i);
expect(linkElement).toBeInTheDocument(); expect(linkElement).toBeInTheDocument();
}); });

View File

@ -1,24 +1,24 @@
// import AboutUsPage from "./components/aboutus"; // import AboutUsPage from "./components/aboutus";
import AboutUs from "./components/aboutus/aboutus"; import AboutUs from "./components/aboutus/aboutus";
import Footer from "./components/footer/footer"; import Footer from "./components/footer/footer";
import Header from "./components/header/header"; import Header from "./components/header/header";
import Hero from "./components/hero/hero"; import Hero from "./components/hero/hero";
import OurWorks from "./components/ourwork/ourwork"; import OurWorks from "./components/ourwork/ourwork";
import Services from "./components/services/services"; import Services from "./components/services/services";
import Testimonials from "./components/testomonials/testomonias"; import Testimonials from "./components/testomonials/testomonias";
function App() { function App() {
return ( return (
<div> <div>
<Header /> <Header />
<Hero /> <Hero />
<Services /> <Services />
<OurWorks /> <OurWorks />
<AboutUs /> <AboutUs />
<Testimonials /> <Testimonials />
<Footer /> <Footer />
</div> </div>
); );
} }
export default App; export default App;

View File

@ -1,152 +1,152 @@
import { useState } from "react"; import { useState } from "react";
import { AppBar, Toolbar, IconButton, Box, Typography, Container } from "@mui/material"; import { AppBar, Toolbar, IconButton, Box, Typography, Container } from "@mui/material";
import { motion } from "framer-motion"; import { motion } from "framer-motion";
import { Outlet } from "react-router-dom"; import { Outlet } from "react-router-dom";
import MenuIcon from "@mui/icons-material/Menu"; import MenuIcon from "@mui/icons-material/Menu";
import CloseIcon from "@mui/icons-material/Close"; import CloseIcon from "@mui/icons-material/Close";
import smallone from "../qsmall.png"; import smallone from "../qsmall.png";
import big from "../QUDRAEDGELOGOTRANSPARENTBLACKfinal.png"; import big from "../QUDRAEDGELOGOTRANSPARENTBLACKfinal.png";
export default function Layout() { export default function Layout() {
const [menuOpen, setMenuOpen] = useState(false); const [menuOpen, setMenuOpen] = useState(false);
return ( return (
<Box sx={{ minHeight: "100vh", display: "flex", flexDirection: "column" }}> <Box sx={{ minHeight: "100vh", display: "flex", flexDirection: "column" }}>
{/* HEADER */} {/* HEADER */}
<AppBar position="static" sx={{ background: "transparent", boxShadow: "none", overflow: "hidden", paddingRight: '0px' }}> <AppBar position="static" sx={{ background: "transparent", boxShadow: "none", overflow: "hidden", paddingRight: '0px' }}>
<Toolbar sx={{ position: "relative", height: "64px", display: "flex", justifyContent: "space-between", alignItems: "center", paddingRight: '0px' }}> <Toolbar sx={{ position: "relative", height: "64px", display: "flex", justifyContent: "space-between", alignItems: "center", paddingRight: '0px' }}>
{/* Expanding Menu Animation (Right to Left) */} {/* Expanding Menu Animation (Right to Left) */}
<motion.div <motion.div
initial={{ width: "0%", right: 0 }} initial={{ width: "0%", right: 0 }}
animate={{ width: menuOpen ? "100%" : "0%" }} animate={{ width: menuOpen ? "100%" : "0%" }}
transition={{ duration: 0.5 }} transition={{ duration: 0.5 }}
style={{ style={{
position: "absolute", position: "absolute",
top: 0, top: 0,
right: 0, right: 0,
height: "100%", height: "100%",
background: "black", background: "black",
zIndex: -1, zIndex: -1,
display: "flex", display: "flex",
alignItems: "center", alignItems: "center",
justifyContent: "flex-end", justifyContent: "flex-end",
overflow: "hidden", overflow: "hidden",
}} }}
> >
{/* Menu Items - Now Horizontal */} {/* Menu Items - Now Horizontal */}
{menuOpen && ( {menuOpen && (
<motion.div <motion.div
initial={{ opacity: 0, x: 20 }} initial={{ opacity: 0, x: 20 }}
animate={{ opacity: 1, x: 0 }} animate={{ opacity: 1, x: 0 }}
transition={{ delay: 0.2, duration: 0.5 }} transition={{ delay: 0.2, duration: 0.5 }}
style={{ style={{
display: "flex", display: "flex",
flexDirection: "row", flexDirection: "row",
alignItems: "center", alignItems: "center",
gap: "40px", gap: "40px",
color: "white", color: "white",
paddingRight: "90px" paddingRight: "90px"
}} }}
> >
<Typography <Typography
variant="h6" variant="h6"
component="a" component="a"
href="#" href="#"
sx={{ sx={{
color:'white', color:'white',
cursor: "pointer", cursor: "pointer",
"&:hover": { color: "#f5a623" }, "&:hover": { color: "#f5a623" },
whiteSpace: "nowrap" whiteSpace: "nowrap"
}} }}
> >
Home Home
</Typography> </Typography>
<Typography <Typography
variant="h6" variant="h6"
component="a" component="a"
href="#" href="#"
sx={{ sx={{
color:'white', color:'white',
cursor: "pointer", cursor: "pointer",
"&:hover": { color: "#f5a623" }, "&:hover": { color: "#f5a623" },
whiteSpace: "nowrap" whiteSpace: "nowrap"
}} }}
> >
About About
</Typography> </Typography>
<Typography <Typography
variant="h6" variant="h6"
component="a" component="a"
href="#" href="#"
sx={{ sx={{
color:'white', color:'white',
cursor: "pointer", cursor: "pointer",
"&:hover": { color: "#f5a623" }, "&:hover": { color: "#f5a623" },
whiteSpace: "nowrap" whiteSpace: "nowrap"
}} }}
> >
Services Services
</Typography> </Typography>
<Typography <Typography
variant="h6" variant="h6"
component="a" component="a"
href="#" href="#"
sx={{ sx={{
color:'white', color:'white',
cursor: "pointer", cursor: "pointer",
"&:hover": { color: "#f5a623" }, "&:hover": { color: "#f5a623" },
whiteSpace: "nowrap" whiteSpace: "nowrap"
}} }}
> >
Contact Contact
</Typography> </Typography>
</motion.div> </motion.div>
)} )}
</motion.div> </motion.div>
{/* Left Side Logo Animation */} {/* Left Side Logo Animation */}
<Box <Box
sx={{ position: "relative", width: 50, height: 50, overflow: "hidden" }} sx={{ position: "relative", width: 50, height: 50, overflow: "hidden" }}
onMouseEnter={(e) => (e.currentTarget.style.width = "120px")} onMouseEnter={(e) => (e.currentTarget.style.width = "120px")}
onMouseLeave={(e) => (e.currentTarget.style.width = "40px")} onMouseLeave={(e) => (e.currentTarget.style.width = "40px")}
> >
<img src={smallone} alt="Logo" width={50} height={50} /> <img src={smallone} alt="Logo" width={50} height={50} />
<motion.div <motion.div
initial={{ opacity: 0 }} initial={{ opacity: 0 }}
animate={{ opacity: 1 }} animate={{ opacity: 1 }}
transition={{ duration: 0.3 }} transition={{ duration: 0.3 }}
style={{ position: "absolute", top: 0, left: 50 }} style={{ position: "absolute", top: 0, left: 50 }}
> >
<img src={big} alt="Full Logo" width={100} height={50} /> <img src={big} alt="Full Logo" width={100} height={50} />
</motion.div> </motion.div>
</Box> </Box>
{/* Right Side Menu Button */} {/* Right Side Menu Button */}
<IconButton onClick={() => setMenuOpen(!menuOpen)}> <IconButton onClick={() => setMenuOpen(!menuOpen)}>
<motion.div animate={{ rotate: menuOpen ? 135 : 0 }} transition={{ duration: 0.5 }}> <motion.div animate={{ rotate: menuOpen ? 135 : 0 }} transition={{ duration: 0.5 }}>
{menuOpen ? <CloseIcon sx={{ color: "white" }} /> : <MenuIcon />} {menuOpen ? <CloseIcon sx={{ color: "white" }} /> : <MenuIcon />}
</motion.div> </motion.div>
</IconButton> </IconButton>
</Toolbar> </Toolbar>
</AppBar> </AppBar>
{/* MAIN CONTENT */} {/* MAIN CONTENT */}
<Box sx={{ flexGrow: 1 }}> <Box sx={{ flexGrow: 1 }}>
<Outlet /> <Outlet />
</Box> </Box>
{/* FOOTER */} {/* FOOTER */}
<Box sx={{ backgroundColor: "black", color: "white", textAlign: "center", padding: "10px 0", marginTop: "auto" }}> <Box sx={{ backgroundColor: "black", color: "white", textAlign: "center", padding: "10px 0", marginTop: "auto" }}>
<Container> <Container>
<Typography variant="body2"> <Typography variant="body2">
© {new Date().getFullYear()} QudraEdge. All Rights Reserved. © {new Date().getFullYear()} QudraEdge. All Rights Reserved.
</Typography> </Typography>
</Container> </Container>
</Box> </Box>
</Box> </Box>
); );
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 311 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 422 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 619 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 626 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 472 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1017 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 549 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 580 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 671 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 336 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 536 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 716 B

File diff suppressed because it is too large Load Diff

View File

@ -1,44 +1,44 @@
import { Box, Typography, Button } from "@mui/material"; import { Box, Typography, Button } from "@mui/material";
import ArrowOutwardIcon from "@mui/icons-material/ArrowOutward"; import ArrowOutwardIcon from "@mui/icons-material/ArrowOutward";
const AboutUs = () => { const AboutUs = () => {
return ( return (
<Box sx={{ backgroundColor: "#1d2733", color: "#fff", py: 10, px: 3 }}> <Box sx={{ backgroundColor: "#1d2733", color: "#fff", py: 10, px: 3 }}>
<Box textAlign="center" maxWidth={800} mx="auto"> <Box textAlign="center" maxWidth={800} mx="auto">
<Typography variant="h4" fontWeight="bold" gutterBottom> <Typography variant="h4" fontWeight="bold" gutterBottom>
About Us About Us
</Typography> </Typography>
<Typography variant="body1" paragraph> <Typography variant="body1" paragraph>
Lorem ipsum dolor sit amet consectetur. Nisl sed sed tortor eros. Enim Lorem ipsum dolor sit amet consectetur. Nisl sed sed tortor eros. Enim
hendrerit elit interdum malesuada sit dis est pharetra suspendisse. In hendrerit elit interdum malesuada sit dis est pharetra suspendisse. In
dolor venenatis ultricies aliquet lacinia. Faucibus commodo eu gravida dolor venenatis ultricies aliquet lacinia. Faucibus commodo eu gravida
auctor eu et sit ut. Sed praesent sed odio aliquam in fermentum. Sit auctor eu et sit ut. Sed praesent sed odio aliquam in fermentum. Sit
vitae morbi sodales sem velit eu tempus velit nunc. Turpis in in vitae morbi sodales sem velit eu tempus velit nunc. Turpis in in
luctus et nulla purus nibh ut. Enim sed fermentum purus molestie luctus et nulla purus nibh ut. Enim sed fermentum purus molestie
parturient morbi nunc aliquet. Aliquam sed etiam turpis non lectus parturient morbi nunc aliquet. Aliquam sed etiam turpis non lectus
commodo cras leo gravida. commodo cras leo gravida.
</Typography> </Typography>
<Button <Button
variant="outlined" variant="outlined"
endIcon={<ArrowOutwardIcon />} endIcon={<ArrowOutwardIcon />}
sx={{ sx={{
mt: 2, mt: 2,
borderColor: "#00FFD1", borderColor: "#00FFD1",
color: "#00FFD1", color: "#00FFD1",
borderRadius: "30px", borderRadius: "30px",
fontWeight: "bold", fontWeight: "bold",
px: 4, px: 4,
"&:hover": { "&:hover": {
backgroundColor: "#00FFD1", backgroundColor: "#00FFD1",
color: "#000", color: "#000",
}, },
}} }}
> >
GET IN TOUCH GET IN TOUCH
</Button> </Button>
</Box> </Box>
</Box> </Box>
); );
}; };
export default AboutUs; export default AboutUs;

View File

@ -1,96 +1,96 @@
import React from 'react'; import React from 'react';
import { import {
Box, Container, Grid, Typography, Link, Divider, Stack, useMediaQuery, useTheme Box, Container, Grid, Typography, Link, Divider, Stack, useMediaQuery, useTheme
} from '@mui/material'; } from '@mui/material';
import { import {
Instagram, YouTube, Facebook, LinkedIn Instagram, YouTube, Facebook, LinkedIn
} from '@mui/icons-material'; } from '@mui/icons-material';
import { motion } from 'framer-motion'; import { motion } from 'framer-motion';
export default function Footer() { export default function Footer() {
const theme = useTheme(); const theme = useTheme();
const isMobile = useMediaQuery(theme.breakpoints.down('sm')); const isMobile = useMediaQuery(theme.breakpoints.down('sm'));
return ( return (
<Box sx={{ backgroundColor: '#0F111A', color: '#fff', pt: 6, pb: 2 }}> <Box sx={{ backgroundColor: '#0F111A', color: '#fff', pt: 6, pb: 2 }}>
<Container maxWidth="lg"> <Container maxWidth="lg">
<motion.div <motion.div
initial={{ opacity: 0, y: 10 }} initial={{ opacity: 0, y: 10 }}
animate={{ opacity: 1, y: 0 }} animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.8 }} transition={{ duration: 0.8 }}
> >
<Grid container spacing={4}> <Grid container spacing={4}>
{/* Column 1: Explore Links */} {/* Column 1: Explore Links */}
<Grid item xs={12} sm={6} md={3}> <Grid item xs={12} sm={6} md={3}>
<Stack spacing={1}> <Stack spacing={1}>
<Link href="#" color="inherit" underline="hover">About Us</Link> <Link href="#" color="inherit" underline="hover">About Us</Link>
<Link href="#" color="inherit" underline="hover">Portfolio</Link> <Link href="#" color="inherit" underline="hover">Portfolio</Link>
<Link href="#" color="inherit" underline="hover">Blogs</Link> <Link href="#" color="inherit" underline="hover">Blogs</Link>
<Link href="#" color="inherit" underline="hover">Services</Link> <Link href="#" color="inherit" underline="hover">Services</Link>
</Stack> </Stack>
</Grid> </Grid>
{/* Column 2: Support Links */} {/* Column 2: Support Links */}
<Grid item xs={12} sm={6} md={3}> <Grid item xs={12} sm={6} md={3}>
<Stack spacing={1}> <Stack spacing={1}>
<Link href="#" color="inherit" underline="hover">FAQs</Link> <Link href="#" color="inherit" underline="hover">FAQs</Link>
<Link href="#" color="inherit" underline="hover">Terms & Conditions</Link> <Link href="#" color="inherit" underline="hover">Terms & Conditions</Link>
<Link href="#" color="inherit" underline="hover">Privacy Policy</Link> <Link href="#" color="inherit" underline="hover">Privacy Policy</Link>
</Stack> </Stack>
</Grid> </Grid>
{/* Column 3: Logo (only visible on md+) */} {/* Column 3: Logo (only visible on md+) */}
{!isMobile && ( {!isMobile && (
<Grid item xs={12} sm={6} md={3}> <Grid item xs={12} sm={6} md={3}>
<Box sx={{ display: 'flex', justifyContent: { sm: 'center', md: 'flex-end' }, mb: 2 }}> <Box sx={{ display: 'flex', justifyContent: { sm: 'center', md: 'flex-end' }, mb: 2 }}>
<img <img
src="/logo.png" // Replace with actual logo src="/logo.png" // Replace with actual logo
alt="Quadra Edge" alt="Quadra Edge"
style={{ maxWidth: '180px', height: 'auto' }} style={{ maxWidth: '180px', height: 'auto' }}
/> />
</Box> </Box>
</Grid> </Grid>
)} )}
{/* Column 4: Contact Info + Socials */} {/* Column 4: Contact Info + Socials */}
<Grid item xs={12} sm={6} md={3}> <Grid item xs={12} sm={6} md={3}>
{/* Mobile: show logo here instead */} {/* Mobile: show logo here instead */}
{isMobile && ( {isMobile && (
<Box sx={{ display: 'flex', justifyContent: 'flex-end', mb: 2 }}> <Box sx={{ display: 'flex', justifyContent: 'flex-end', mb: 2 }}>
<img <img
src="/logo.png" // Replace with actual logo src="/logo.png" // Replace with actual logo
alt="Quadra Edge" alt="Quadra Edge"
style={{ maxWidth: '180px', height: 'auto' }} style={{ maxWidth: '180px', height: 'auto' }}
/> />
</Box> </Box>
)} )}
<Typography fontWeight={600} gutterBottom>Contact Us</Typography> <Typography fontWeight={600} gutterBottom>Contact Us</Typography>
<Typography variant="body2" mb={1}>Number</Typography> <Typography variant="body2" mb={1}>Number</Typography>
<Typography variant="body2">Address</Typography> <Typography variant="body2">Address</Typography>
<Stack <Stack
direction="row" direction="row"
spacing={2} spacing={2}
sx={{ mt: 2 }} sx={{ mt: 2 }}
> >
<Link href="#"><Instagram sx={{ color: '#00E0FF' }} /></Link> <Link href="#"><Instagram sx={{ color: '#00E0FF' }} /></Link>
<Link href="#"><YouTube sx={{ color: '#00E0FF' }} /></Link> <Link href="#"><YouTube sx={{ color: '#00E0FF' }} /></Link>
<Link href="#"><Facebook sx={{ color: '#00E0FF' }} /></Link> <Link href="#"><Facebook sx={{ color: '#00E0FF' }} /></Link>
<Link href="#"><LinkedIn sx={{ color: '#00E0FF' }} /></Link> <Link href="#"><LinkedIn sx={{ color: '#00E0FF' }} /></Link>
</Stack> </Stack>
</Grid> </Grid>
</Grid> </Grid>
<Divider sx={{ my: 4, borderColor: '#00E0FF' }} /> <Divider sx={{ my: 4, borderColor: '#00E0FF' }} />
<Box textAlign="center"> <Box textAlign="center">
<Typography variant="body2" sx={{ color: '#00E0FF' }}> <Typography variant="body2" sx={{ color: '#00E0FF' }}>
Copyright © 2025 QuadraEdge Copyright © 2025 QuadraEdge
</Typography> </Typography>
</Box> </Box>
</motion.div> </motion.div>
</Container> </Container>
</Box> </Box>
); );
} }

View File

@ -1,151 +1,201 @@
import React, { useState } from "react"; import React, { useState } from "react";
import { import {
AppBar, AppBar,
Toolbar, Toolbar,
Typography, IconButton,
IconButton, Drawer,
Drawer, List,
List, ListItemText,
ListItem, Button,
ListItemText, useMediaQuery,
Button, useTheme,
useMediaQuery, Box,
useTheme, Container,
Box, ListItemButton,
Container, Divider,
ListItemButton, } from "@mui/material";
} from "@mui/material"; import MenuIcon from "@mui/icons-material/Menu";
import MenuIcon from "@mui/icons-material/Menu"; import { motion } from "framer-motion";
import { motion } from "framer-motion"; import HomeIcon from "@mui/icons-material/Home";
import BuildIcon from "@mui/icons-material/Build";
const navItems = ["Home", "Services", "Portfolio", "About Us", "Blog"]; import WorkIcon from "@mui/icons-material/Work";
import InfoIcon from "@mui/icons-material/Info";
const Header = () => { import ArticleIcon from "@mui/icons-material/Article";
const [mobileOpen, setMobileOpen] = useState(false); import logo from "../QE Website design/Logo.png";
const theme = useTheme();
const isMobile = useMediaQuery(theme.breakpoints.down("md")); const navItems = [
{ label: "Home", icon: <HomeIcon />, href: "#" },
const toggleDrawer = () => { { label: "Services", icon: <BuildIcon />, href: "#" },
setMobileOpen(!mobileOpen); { label: "Portfolio", icon: <WorkIcon />, href: "#" },
}; { label: "About Us", icon: <InfoIcon />, href: "#" },
{ label: "Blog", icon: <ArticleIcon />, href: "#" },
const drawer = ( ];
<Box sx={{ width: 250, backgroundColor: "#000" }} onClick={toggleDrawer}>
<List> const Header = () => {
{navItems.map((item) => ( const [mobileOpen, setMobileOpen] = useState(false);
<ListItemButton component="a" href="#" key={item}> const theme = useTheme();
<ListItemText primary={item} sx={{ color: "#fff" }} /> const isMobile = useMediaQuery(theme.breakpoints.down("md"));
</ListItemButton>
))} const toggleDrawer = () => setMobileOpen(!mobileOpen);
<ListItem disablePadding>
<Button const drawer = (
variant="outlined" <Box
fullWidth sx={{ width: 260, height: "100%", backgroundColor: "#000" }}
sx={{ onClick={toggleDrawer}
borderColor: "#00E0FF", >
color: "#00E0FF", <ListItemButton
backgroundColor: "transparent", component="a"
borderRadius: "8px", href="#"
m: 2, sx={{ justifyContent: "center", my: 2 }}
"&:hover": { >
backgroundColor: "#00E0FF", <Box component="img" src={logo} alt="Logo" sx={{ height: 40 }} />
color: "#000", </ListItemButton>
}, <Divider sx={{ backgroundColor: "#444" }} />
}} <Box>
> {navItems.map((item) => (
Contact Us <ListItemButton component="a" href={item.href} key={item.label}>
</Button> <Box
</ListItem> sx={{ display: "flex", alignItems: "center", color: "#00E0FF" }}
</List> >
</Box> <Box sx={{ mr: 2 }}>{item.icon}</Box>
); <ListItemText primary={item.label} sx={{ color: "#fff" }} />
</Box>
return ( </ListItemButton>
<AppBar ))}
position="sticky" </Box>
sx={{ backgroundColor: "#000", boxShadow: "none" }} <Divider sx={{ backgroundColor: "#444", my: 2 }} />
> <Box px={2}>
<Container maxWidth="lg"> <Button
<Toolbar sx={{ justifyContent: "space-between", padding: "16px 0" }}> variant="outlined"
<motion.div fullWidth
initial={{ opacity: 0, y: -10 }} sx={{
animate={{ opacity: 1, y: 0 }} borderColor: "#00E0FF",
transition={{ duration: 0.6 }} color: "#00E0FF",
> borderRadius: "24px",
<Typography variant="h6" sx={{ fontWeight: 700, color: "#fff" }}> fontWeight: 600,
QUADRA EDGE textTransform: "none",
</Typography> "&:hover": {
</motion.div> backgroundColor: "#00E0FF",
color: "#000",
{isMobile ? ( },
<> }}
<IconButton color="inherit" edge="end" onClick={toggleDrawer}> >
<MenuIcon sx={{ color: "#fff" }} /> Contact Us
</IconButton> </Button>
<Drawer </Box>
anchor="right" </Box>
open={mobileOpen} );
onClose={toggleDrawer}
sx={{ "& .MuiDrawer-paper": { backgroundColor: "#000" } }} return (
> <AppBar
{drawer} position="sticky"
</Drawer> sx={{ backgroundColor: "#000", boxShadow: "none" }}
</> >
) : ( <Container maxWidth="lg">
<Box sx={{ display: "flex", gap: 4, alignItems: "center" }}> <Toolbar sx={{ justifyContent: "space-between", py: 1.5 }}>
{navItems.map((item, index) => ( {isMobile ? (
<motion.div <>
key={item} <IconButton edge="end" onClick={toggleDrawer}>
initial={{ opacity: 0, y: -5 }} <MenuIcon sx={{ color: "#fff" }} />
animate={{ opacity: 1, y: 0 }} </IconButton>
transition={{ delay: 0.1 * index }} <Drawer
> anchor="right"
<Typography open={mobileOpen}
variant="body1" onClose={toggleDrawer}
component="a" sx={{ "& .MuiDrawer-paper": { backgroundColor: "#000" } }}
href="#" >
sx={{ {drawer}
color: "#fff", </Drawer>
textDecoration: "none", </>
"&:hover": { ) : (
color: "#00E0FF", <Box
}, sx={{
}} display: "flex",
> justifyContent: "space-between",
{item} alignItems: "center",
</Typography> width: "100%",
</motion.div> }}
))} >
<motion.div {/* Left - Logo */}
initial={{ opacity: 0, y: -5 }} <motion.div
animate={{ opacity: 1, y: 0 }} initial={{ opacity: 0, x: -10 }}
transition={{ delay: 0.5 }} animate={{ opacity: 1, x: 0 }}
> transition={{ duration: 0.6 }}
<Button >
variant="outlined" <Box
sx={{ component="a"
borderColor: "#00E0FF", href="#"
color: "#00E0FF", sx={{ display: "flex", alignItems: "center" }}
backgroundColor: "transparent", >
borderRadius: "8px", <Box
textTransform: "none", component="img"
padding: "8px 24px", src={logo}
"&:hover": { alt="Logo"
backgroundColor: "#00E0FF", sx={{ height: 40, width: "auto", objectFit: "contain" }}
color: "#000", />
borderColor: "#00E0FF", </Box>
}, </motion.div>
}}
> {/* Center - Navigation */}
Contact Us <Box sx={{ display: "flex", gap: 4, alignItems: "center" }}>
</Button> {navItems.map((item, index) => (
</motion.div> <motion.div
</Box> key={item.label}
)} initial={{ opacity: 0, y: -5 }}
</Toolbar> animate={{ opacity: 1, y: 0 }}
</Container> transition={{ delay: 0.1 * index }}
</AppBar> >
); <Box
}; component="a"
href={item.href}
export default Header; sx={{
color: "#fff",
textDecoration: "none",
fontWeight: 500,
fontSize: "1rem",
"&:hover": {
color: "#00E0FF",
},
}}
>
{item.label}
</Box>
</motion.div>
))}
</Box>
{/* Right - Contact Us */}
<motion.div
initial={{ opacity: 0, x: 10 }}
animate={{ opacity: 1, x: 0 }}
transition={{ duration: 0.6 }}
>
<Button
variant="outlined"
sx={{
borderColor: "#00E0FF",
color: "#00E0FF",
borderRadius: "24px",
textTransform: "none",
fontWeight: 600,
px: 3,
py: 1,
"&:hover": {
backgroundColor: "#00E0FF",
color: "#000",
borderColor: "#00E0FF",
},
}}
>
Contact Us
</Button>
</motion.div>
</Box>
)}
</Toolbar>
</Container>
</AppBar>
);
};
export default Header;

View File

@ -1,49 +1,49 @@
import { Box, Button, Container, Grid, Typography } from "@mui/material"; import { Box, Button, Container, Grid, Typography } from "@mui/material";
import { motion } from "framer-motion"; import { motion } from "framer-motion";
import backgroundImg from "../hero/Frame 22.png"; import backgroundImg from "../hero/Frame 22.png";
export default function Hero() { export default function Hero() {
return ( return (
<Box sx={{ backgroundColor: "#0F111A", color: "#fff", py: 10 }}> <Box sx={{ backgroundColor: "#0F111A", color: "#fff", py: 10 }}>
<Container maxWidth="lg"> <Container maxWidth="lg">
<motion.div <motion.div
initial={{ opacity: 0, y: -20 }} initial={{ opacity: 0, y: -20 }}
animate={{ opacity: 1, y: 0 }} animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.8 }} transition={{ duration: 0.8 }}
> >
<Grid container> <Grid container>
<Grid item md={6}> <Grid item md={6}>
<Typography variant="h3" fontWeight="bold" gutterBottom> <Typography variant="h3" fontWeight="bold" gutterBottom>
We Create <br /> We Create <br />
Brands That Stick Brands That Stick
</Typography> </Typography>
</Grid> </Grid>
<Grid item md={6}> <Grid item md={6}>
<Typography variant="body1" maxWidth="sm"> <Typography variant="body1" maxWidth="sm">
We help founders grow through bold design, sharp strategy, and We help founders grow through bold design, sharp strategy, and
smart marketing that drives recognition, engagement and smart marketing that drives recognition, engagement and
long-term brand loyalty. long-term brand loyalty.
</Typography> </Typography>
<Button <Button
variant="outlined" variant="outlined"
sx={{ sx={{
mt: 4, mt: 4,
borderColor: "#00E0FF", borderColor: "#00E0FF",
color: "#00E0FF", color: "#00E0FF",
"&:hover": { "&:hover": {
backgroundColor: "#00E0FF", backgroundColor: "#00E0FF",
color: "#000", color: "#000",
}, },
}} }}
> >
Get in Touch Get in Touch
</Button> </Button>
</Grid> </Grid>
</Grid> </Grid>
</motion.div> </motion.div>
</Container> </Container>
<Box width="100%"> <Box width="100%">
<img src={backgroundImg} alt="" width={"100%"} /> <img src={backgroundImg} alt="" width={"100%"} />
</Box> </Box>
</Box> </Box>
); );
} }

View File

@ -1,33 +1,33 @@
import React from 'react'; import React from 'react';
// import AppRoutes from './routes'; // import AppRoutes from './routes';
// import Header from './components/landingpage/landingpagecomponents/header'; // import Header from './components/landingpage/landingpagecomponents/header';
import { Box } from '@mui/material'; import { Box } from '@mui/material';
import HeroSection from './landingpagecomponents/CarouselSection'; import HeroSection from './landingpagecomponents/CarouselSection';
import WhoWeAre from './landingpagecomponents/whoweare'; import WhoWeAre from './landingpagecomponents/whoweare';
import OurExpertise from './landingpagecomponents/ourexperties'; import OurExpertise from './landingpagecomponents/ourexperties';
import TopBrands from './landingpagecomponents/brands'; import TopBrands from './landingpagecomponents/brands';
import CaseStudies from './landingpagecomponents/casestudy'; import CaseStudies from './landingpagecomponents/casestudy';
import StatsSection from './landingpagecomponents/scrollanimationsection'; import StatsSection from './landingpagecomponents/scrollanimationsection';
import ContactForm from './landingpagecomponents/contactus'; import ContactForm from './landingpagecomponents/contactus';
// import router from './routes'; // import router from './routes';
const LandingPage: React.FC = () => { const LandingPage: React.FC = () => {
return ( return (
<Box> <Box>
{/* <AnimatedHeader /> */} {/* <AnimatedHeader /> */}
<HeroSection /> <HeroSection />
<WhoWeAre /> <WhoWeAre />
<OurExpertise /> <OurExpertise />
<TopBrands /> <TopBrands />
<StatsSection/> <StatsSection/>
<CaseStudies/> <CaseStudies/>
<ContactForm /> <ContactForm />
</Box> </Box>
); );
}; };
export default LandingPage; export default LandingPage;

View File

@ -1,12 +1,12 @@
import React from 'react'; import React from 'react';
import { Outlet } from 'react-router-dom'; import { Outlet } from 'react-router-dom';
import { Box } from '@mui/material'; import { Box } from '@mui/material';
// import CopyrightFooter from '../../assets/copyright'; // import CopyrightFooter from '../../assets/copyright';
export const LandingBase: React.FC = () => { export const LandingBase: React.FC = () => {
return ( return (
<Box> <Box>
<Outlet /> <Outlet />
</Box> </Box>
); );
}; };

View File

@ -1,99 +1,99 @@
import React from "react"; import React from "react";
import { Box, Button, Grid, Typography } from "@mui/material"; import { Box, Button, Grid, Typography } from "@mui/material";
import background from "../../../image-removebg-preview (21).png"; import background from "../../../image-removebg-preview (21).png";
const HeroSection: React.FC = () => { const HeroSection: React.FC = () => {
return ( return (
<Box <Box
sx={{ sx={{
display: "flex", display: "flex",
alignItems: "center", alignItems: "center",
justifyContent: "center", justifyContent: "center",
height: { md: "90vh", xs: "80vh" }, height: { md: "90vh", xs: "80vh" },
backgroundColor: "#f5f5f5", backgroundColor: "#f5f5f5",
padding: { xs: 3, md: 9 }, padding: { xs: 3, md: 9 },
}} }}
> >
<Grid <Grid
container container
spacing={2} spacing={2}
sx={{ sx={{
alignItems: "center", alignItems: "center",
justifyContent: { xs: "center", md: "space-between" }, justifyContent: { xs: "center", md: "space-between" },
textAlign: { xs: "center", md: "left" }, textAlign: { xs: "center", md: "left" },
}} }}
> >
{/* Left Content */} {/* Left Content */}
<Grid item xs={12} md={8}> <Grid item xs={12} md={8}>
<Typography <Typography
variant="h3" variant="h3"
sx={{ fontSize: { xs: "2rem", md: "3rem" } }} sx={{ fontSize: { xs: "2rem", md: "3rem" } }}
> >
We Dont Just Market. We Make You <b>Unstoppable</b>. We Dont Just Market. We Make You <b>Unstoppable</b>.
</Typography> </Typography>
{/* <Typography {/* <Typography
variant="h3" variant="h3"
sx={{ sx={{
fontWeight: 200, fontWeight: 200,
fontSize: { xs: "2rem", md: "3rem" }, fontSize: { xs: "2rem", md: "3rem" },
mt: 1, mt: 1,
}} }}
> >
DIGITAL AGENCY DIGITAL AGENCY
</Typography> */} </Typography> */}
<Typography <Typography
variant="body1" variant="body1"
sx={{ sx={{
mt: 2, mt: 2,
fontSize: { xs: "1rem", md: "1.2rem" }, fontSize: { xs: "1rem", md: "1.2rem" },
color: "#666", color: "#666",
maxWidth: "90%", maxWidth: "90%",
}} }}
> >
Cut through the noise with strategies that deliver measurable success. Lets make it happen. Cut through the noise with strategies that deliver measurable success. Lets make it happen.
</Typography> </Typography>
<Button <Button
variant="outlined" variant="outlined"
sx={{ sx={{
mt: 3, mt: 3,
borderColor: "black", borderColor: "black",
color: "black", color: "black",
fontSize: "1rem", fontSize: "1rem",
padding: "10px 20px", padding: "10px 20px",
borderRadius: "50px", borderRadius: "50px",
fontWeight: "bold", fontWeight: "bold",
"&:hover": { "&:hover": {
borderColor: "black", borderColor: "black",
backgroundColor: "#e0e0e0", backgroundColor: "#e0e0e0",
}, },
}} }}
> >
WATCH VIDEO WATCH VIDEO
</Button> </Button>
</Grid> </Grid>
{/* Right Image */} {/* Right Image */}
<Grid <Grid
item item
xs={12} xs={12}
md={4} md={4}
sx={{ sx={{
display: "flex", display: "flex",
justifyContent: "center", justifyContent: "center",
}} }}
> >
<Box <Box
component="img" component="img"
src={background} src={background}
alt="Coffee Cup" alt="Coffee Cup"
sx={{ sx={{
width: { xs: "200px", md: "90%" }, width: { xs: "200px", md: "90%" },
}} }}
/> />
</Grid> </Grid>
</Grid> </Grid>
</Box> </Box>
); );
}; };
export default HeroSection; export default HeroSection;

View File

@ -1,47 +1,47 @@
import React from "react"; import React from "react";
import { Box, Typography, Grid, Card, CardMedia } from "@mui/material"; import { Box, Typography, Grid, Card, CardMedia } from "@mui/material";
import brandimage from "../../../brandimage.jpg" import brandimage from "../../../brandimage.jpg"
const brands = [ const brands = [
{ name: "Hockey India", img: brandimage }, { name: "Hockey India", img: brandimage },
{ name: "J. Hampstead", img: brandimage }, { name: "J. Hampstead", img: brandimage },
{ name: "Tim Hortons", img: brandimage }, { name: "Tim Hortons", img: brandimage },
{ name: "Brand 4", img: brandimage }, { name: "Brand 4", img: brandimage },
{ name: "Brand 5", img: brandimage }, { name: "Brand 5", img: brandimage },
{ name: "Brand 6", img: brandimage }, { name: "Brand 6", img: brandimage },
{ name: "Hockey India", img: brandimage }, { name: "Hockey India", img: brandimage },
{ name: "J. Hampstead", img: brandimage }, { name: "J. Hampstead", img: brandimage },
{ name: "Tim Hortons", img: brandimage }, { name: "Tim Hortons", img: brandimage },
]; ];
const TopBrands = () => { const TopBrands = () => {
return ( return (
<Box sx={{ backgroundColor: "#16110f", py: 6, textAlign: "center" }}> <Box sx={{ backgroundColor: "#16110f", py: 6, textAlign: "center" }}>
<Typography variant="h4" sx={{ color: "white", display: "inline-block", pb: 1 }}> <Typography variant="h4" sx={{ color: "white", display: "inline-block", pb: 1 }}>
TOP <span style={{ fontWeight: "bold" }}>BRANDS</span> TOP <span style={{ fontWeight: "bold" }}>BRANDS</span>
</Typography> </Typography>
<Typography sx={{ color: "#A0A0A0", maxWidth: "1200px", mx: "auto", mt: 2, lineHeight: 1.9 }}> <Typography sx={{ color: "#A0A0A0", maxWidth: "1200px", mx: "auto", mt: 2, lineHeight: 1.9 }}>
Here's a look at the clients we've worked with. If you'd like to work with the Here's a look at the clients we've worked with. If you'd like to work with the
best digital agency too, we'd love to hear from you. Drop us a line and we'll best digital agency too, we'd love to hear from you. Drop us a line and we'll
look forward to brewing something fresh for you! look forward to brewing something fresh for you!
</Typography> </Typography>
<Grid container spacing={2} justifyContent="center" sx={{ mt: 9 }}> <Grid container spacing={2} justifyContent="center" sx={{ mt: 9 }}>
{brands.map((brand, index) => ( {brands.map((brand, index) => (
<Grid item xs={12} sm={6} md={4} key={index}> <Grid item xs={12} sm={6} md={4} key={index}>
<Card sx={{ backgroundColor: "#EAEAEA", p: 2, display: "flex", justifyContent: "center", maxWidth: "320px", mx: "auto" }}> <Card sx={{ backgroundColor: "#EAEAEA", p: 2, display: "flex", justifyContent: "center", maxWidth: "320px", mx: "auto" }}>
<CardMedia <CardMedia
component="img" component="img"
src={brand.img} src={brand.img}
alt={brand.name} alt={brand.name}
sx={{ maxWidth: "100%", objectFit: "contain" }} sx={{ maxWidth: "100%", objectFit: "contain" }}
/> />
</Card> </Card>
</Grid> </Grid>
))} ))}
</Grid> </Grid>
</Box> </Box>
); );
}; };
export default TopBrands; export default TopBrands;

View File

@ -1,106 +1,106 @@
import React, { useState } from "react"; import React, { useState } from "react";
import { Box, Card, Grid, Typography, Button } from "@mui/material"; import { Box, Card, Grid, Typography, Button } from "@mui/material";
import background from "../../../dark-background.jpg"; import background from "../../../dark-background.jpg";
const CaseStudies: React.FC = () => { const CaseStudies: React.FC = () => {
return ( return (
<Box sx={{ px: 5, py: 3, height: "900px", marginTop: 20 }}> <Box sx={{ px: 5, py: 3, height: "900px", marginTop: 20 }}>
<Grid container spacing={5} justifyContent="center"> <Grid container spacing={5} justifyContent="center">
{/* First Card */} {/* First Card */}
<Grid item xs={12} md={5.5}> <Grid item xs={12} md={5.5}>
<HoverCard <HoverCard
title="It All Starts At Kaziranga University" title="It All Starts At Kaziranga University"
description="Kaziranga University, A Prestigious Educational..." description="Kaziranga University, A Prestigious Educational..."
image={background} image={background}
/> />
{/* Bottom Section */} {/* Bottom Section */}
<Box textAlign="left" mt={4}> <Box textAlign="left" mt={4}>
<Typography variant="body1"> <Typography variant="body1">
Check out more digital marketing case studies Check out more digital marketing case studies
</Typography> </Typography>
<Button <Button
variant="outlined" variant="outlined"
sx={{ mt: 2, borderRadius: "50px", px: 4, py: 1 }} sx={{ mt: 2, borderRadius: "50px", px: 4, py: 1 }}
> >
VIEW MORE VIEW MORE
</Button> </Button>
</Box> </Box>
</Grid> </Grid>
{/* Second Card with Heading */} {/* Second Card with Heading */}
<Grid item xs={12} md={5.5}> <Grid item xs={12} md={5.5}>
<Typography variant="h4" fontWeight="bold" sx={{ mb: 3, mt: 4 }}> <Typography variant="h4" fontWeight="bold" sx={{ mb: 3, mt: 4 }}>
CASE <span style={{ fontWeight: "normal" }}>STUDIES</span> CASE <span style={{ fontWeight: "normal" }}>STUDIES</span>
</Typography> </Typography>
<HoverCard <HoverCard
title="Instagram AR Filter" title="Instagram AR Filter"
description="We Came Up With A Unique AR Filter On..." description="We Came Up With A Unique AR Filter On..."
image={background} image={background}
/> />
</Grid> </Grid>
</Grid> </Grid>
</Box> </Box>
); );
}; };
const HoverCard: React.FC<{ title: string; description: string; image: string }> = ({ const HoverCard: React.FC<{ title: string; description: string; image: string }> = ({
title, title,
description, description,
image, image,
}) => { }) => {
const [hover, setHover] = useState(false); const [hover, setHover] = useState(false);
return ( return (
<Card <Card
sx={{ sx={{
position: "relative", position: "relative",
borderRadius: 2, borderRadius: 2,
overflow: "hidden", overflow: "hidden",
boxShadow: 3, boxShadow: 3,
height: "90vh", height: "90vh",
width: "30vw", width: "30vw",
cursor: "pointer", cursor: "pointer",
transition: "0.5s", transition: "0.5s",
}} }}
onMouseEnter={() => setHover(true)} onMouseEnter={() => setHover(true)}
onMouseLeave={() => setHover(false)} onMouseLeave={() => setHover(false)}
> >
<Box <Box
component="img" component="img"
src={image} src={image}
alt={title} alt={title}
sx={{ sx={{
width: "100%", width: "100%",
height: "100%", height: "100%",
objectFit: "cover", objectFit: "cover",
position: "absolute", position: "absolute",
top: 0, top: 0,
left: 0, left: 0,
transition: "0.5s", transition: "0.5s",
filter: hover ? "brightness(0.5)" : "brightness(1)", filter: hover ? "brightness(0.5)" : "brightness(1)",
}} }}
/> />
{hover && ( {hover && (
<Box <Box
sx={{ sx={{
position: "absolute", position: "absolute",
bottom: 0, bottom: 0,
width: "100%", width: "100%",
background: "rgba(0, 0, 0, 0.6)", background: "rgba(0, 0, 0, 0.6)",
color: "white", color: "white",
p: 3, p: 3,
opacity: hover ? 1 : 0, opacity: hover ? 1 : 0,
transition: "opacity 0.3s ease-in-out", transition: "opacity 0.3s ease-in-out",
}} }}
> >
<Typography variant="h6" fontWeight="bold"> <Typography variant="h6" fontWeight="bold">
{title} {title}
</Typography> </Typography>
<Typography variant="body2">{description}</Typography> <Typography variant="body2">{description}</Typography>
</Box> </Box>
)} )}
</Card> </Card>
); );
}; };
export default CaseStudies; export default CaseStudies;

View File

@ -1,116 +1,116 @@
import React, { useState, useEffect } from "react"; import React, { useState, useEffect } from "react";
import { TextField, Button, Box, Typography, Grid, InputAdornment, IconButton } from "@mui/material"; import { TextField, Button, Box, Typography, Grid, InputAdornment, IconButton } from "@mui/material";
import { Person, Phone, Email, Chat, Facebook, Twitter, LinkedIn, Instagram } from "@mui/icons-material"; import { Person, Phone, Email, Chat, Facebook, Twitter, LinkedIn, Instagram } from "@mui/icons-material";
const changingTexts = ["Strategy", "Innovation", "Growth", "Transformation", "Impact"]; const changingTexts = ["Strategy", "Innovation", "Growth", "Transformation", "Impact"];
const ContactForm: React.FC = () => { const ContactForm: React.FC = () => {
const [currentText, setCurrentText] = useState<string>(changingTexts[0]); const [currentText, setCurrentText] = useState<string>(changingTexts[0]);
useEffect(() => { useEffect(() => {
const interval = setInterval(() => { const interval = setInterval(() => {
setCurrentText((prevText) => { setCurrentText((prevText) => {
const currentIndex = changingTexts.indexOf(prevText); const currentIndex = changingTexts.indexOf(prevText);
return changingTexts[(currentIndex + 1) % changingTexts.length]; return changingTexts[(currentIndex + 1) % changingTexts.length];
}); });
}, 1000); }, 1000);
return () => clearInterval(interval); return () => clearInterval(interval);
}, []); }, []);
return ( return (
<Box sx={{ minHeight: "100vh", width: "100%", display: "flex", alignItems: "center", justifyContent: "center", bgcolor: "#16110f", color: "white", p: 4 }}> <Box sx={{ minHeight: "100vh", width: "100%", display: "flex", alignItems: "center", justifyContent: "center", bgcolor: "#16110f", color: "white", p: 4 }}>
<Grid container spacing={4} alignItems="center" justifyContent="space-between"> <Grid container spacing={4} alignItems="center" justifyContent="space-between">
{/* Left Side */} {/* Left Side */}
<Grid item xs={12} md={5}> <Grid item xs={12} md={5}>
<Typography variant="h1" fontWeight="bold">Let's Talk</Typography> <Typography variant="h1" fontWeight="bold">Let's Talk</Typography>
<Typography variant="h1" fontWeight="bold" color="orange" sx={{ transition: "all 0.5s ease-in-out" }}> <Typography variant="h1" fontWeight="bold" color="orange" sx={{ transition: "all 0.5s ease-in-out" }}>
{currentText} {currentText}
</Typography> </Typography>
<Typography variant="h6" mt={2}> <Typography variant="h6" mt={2}>
Let's discuss your project at <span style={{ color: "orange" }}>ideas@digitallatte.in</span> Let's discuss your project at <span style={{ color: "orange" }}>ideas@digitallatte.in</span>
</Typography> </Typography>
{/* Social Media Icons */} {/* Social Media Icons */}
<Box sx={{ display: "flex", gap: 2, mt: 3 }}> <Box sx={{ display: "flex", gap: 2, mt: 3 }}>
<IconButton sx={{ color: "white" }}><Facebook /></IconButton> <IconButton sx={{ color: "white" }}><Facebook /></IconButton>
<IconButton sx={{ color: "white" }}><Twitter /></IconButton> <IconButton sx={{ color: "white" }}><Twitter /></IconButton>
<IconButton sx={{ color: "white" }}><LinkedIn /></IconButton> <IconButton sx={{ color: "white" }}><LinkedIn /></IconButton>
<IconButton sx={{ color: "white" }}><Instagram /></IconButton> <IconButton sx={{ color: "white" }}><Instagram /></IconButton>
</Box> </Box>
</Grid> </Grid>
{/* Right Side - Contact Form */} {/* Right Side - Contact Form */}
<Grid item xs={12} md={6}> <Grid item xs={12} md={6}>
<Box component="form" sx={{ bgcolor: "#16110f", p: 4, borderRadius: 2 }}> <Box component="form" sx={{ bgcolor: "#16110f", p: 4, borderRadius: 2 }}>
<TextField <TextField
fullWidth fullWidth
variant="standard" variant="standard"
placeholder="Name*" placeholder="Name*"
InputProps={{ InputProps={{
startAdornment: ( startAdornment: (
<InputAdornment position="start"> <InputAdornment position="start">
<Person sx={{ color: "orange" }} /> <Person sx={{ color: "orange" }} />
</InputAdornment> </InputAdornment>
), ),
}} }}
sx={{ mb: 4, input: { color: "orange" }, "& .MuiInput-underline:before": { borderBottomColor: "white" }, "& .MuiInput-underline:after": { borderBottomColor: "white" } }} sx={{ mb: 4, input: { color: "orange" }, "& .MuiInput-underline:before": { borderBottomColor: "white" }, "& .MuiInput-underline:after": { borderBottomColor: "white" } }}
/> />
<Box sx={{ display: "flex", gap: 2, alignItems: "center" }}> <Box sx={{ display: "flex", gap: 2, alignItems: "center" }}>
<TextField <TextField
sx={{ flex: 1, input: { color: "orange" }, "& .MuiInput-underline:before": { borderBottomColor: "white" }, "& .MuiInput-underline:after": { borderBottomColor: "white" } }} sx={{ flex: 1, input: { color: "orange" }, "& .MuiInput-underline:before": { borderBottomColor: "white" }, "& .MuiInput-underline:after": { borderBottomColor: "white" } }}
variant="standard" variant="standard"
placeholder="Contact*" placeholder="Contact*"
InputProps={{ InputProps={{
startAdornment: ( startAdornment: (
<InputAdornment position="start"> <InputAdornment position="start">
<Phone sx={{ color: "orange" }} /> <Phone sx={{ color: "orange" }} />
</InputAdornment> </InputAdornment>
), ),
}} }}
/> />
<TextField <TextField
sx={{ flex: 1, input: { color: "orange" }, "& .MuiInput-underline:before": { borderBottomColor: "white" }, "& .MuiInput-underline:after": { borderBottomColor: "white" } }} sx={{ flex: 1, input: { color: "orange" }, "& .MuiInput-underline:before": { borderBottomColor: "white" }, "& .MuiInput-underline:after": { borderBottomColor: "white" } }}
variant="standard" variant="standard"
placeholder="Email*" placeholder="Email*"
InputProps={{ InputProps={{
startAdornment: ( startAdornment: (
<InputAdornment position="start"> <InputAdornment position="start">
<Email sx={{ color: "orange" }} /> <Email sx={{ color: "orange" }} />
</InputAdornment> </InputAdornment>
), ),
}} }}
/> />
</Box> </Box>
<TextField <TextField
fullWidth fullWidth
variant="standard" variant="standard"
placeholder="Message*" placeholder="Message*"
multiline multiline
rows={4} rows={4}
InputProps={{ InputProps={{
startAdornment: ( startAdornment: (
<InputAdornment position="start"> <InputAdornment position="start">
<Chat sx={{ color: "orange" }} /> <Chat sx={{ color: "orange" }} />
</InputAdornment> </InputAdornment>
), ),
}} }}
sx={{ mb: 3, input: { color: "orange" }, "& .MuiInput-underline:before": { borderBottomColor: "white" }, "& .MuiInput-underline:after": { borderBottomColor: "white" } }} sx={{ mb: 3, input: { color: "orange" }, "& .MuiInput-underline:before": { borderBottomColor: "white" }, "& .MuiInput-underline:after": { borderBottomColor: "white" } }}
/> />
<Button variant="contained" sx={{ bgcolor: "orange", color: "black", fontWeight: "bold", borderRadius: "20px", py: 1.5 }}> <Button variant="contained" sx={{ bgcolor: "orange", color: "black", fontWeight: "bold", borderRadius: "20px", py: 1.5 }}>
SEND MESSAGE SEND MESSAGE
</Button> </Button>
</Box> </Box>
</Grid> </Grid>
</Grid> </Grid>
</Box> </Box>
); );
}; };
export default ContactForm; export default ContactForm;

View File

@ -1,117 +1,117 @@
import React, { useState, useEffect } from "react"; import React, { useState, useEffect } from "react";
import { Box, Grid, Typography } from "@mui/material"; import { Box, Grid, Typography } from "@mui/material";
import { Computer, Brush, Code } from "@mui/icons-material"; // Import relevant icons import { Computer, Brush, Code } from "@mui/icons-material"; // Import relevant icons
const expertiseCategories = ["DIGITAL", "DESIGN", "DEVELOPMENT"]; const expertiseCategories = ["DIGITAL", "DESIGN", "DEVELOPMENT"];
const OurExpertise: React.FC = () => { const OurExpertise: React.FC = () => {
const [currentText, setCurrentText] = useState(expertiseCategories[0]); const [currentText, setCurrentText] = useState(expertiseCategories[0]);
useEffect(() => { useEffect(() => {
const interval = setInterval(() => { const interval = setInterval(() => {
setCurrentText((prevText) => { setCurrentText((prevText) => {
const currentIndex = expertiseCategories.indexOf(prevText); const currentIndex = expertiseCategories.indexOf(prevText);
const nextIndex = (currentIndex + 1) % expertiseCategories.length; const nextIndex = (currentIndex + 1) % expertiseCategories.length;
return expertiseCategories[nextIndex]; return expertiseCategories[nextIndex];
}); });
}, 2000); }, 2000);
return () => clearInterval(interval); return () => clearInterval(interval);
}, []); }, []);
return ( return (
<Box <Box
sx={{ sx={{
backgroundColor: "#ffffff", backgroundColor: "#ffffff",
color: "#000000", color: "#000000",
minHeight: "100vh", minHeight: "100vh",
display: "flex", display: "flex",
flexDirection: "column", flexDirection: "column",
alignItems: "center", alignItems: "center",
justifyContent: "center", justifyContent: "center",
padding: "60px 20px", padding: "60px 20px",
}} }}
> >
<Typography variant="h3" fontWeight={700} gutterBottom sx={{ color: "#333" }}> <Typography variant="h3" fontWeight={700} gutterBottom sx={{ color: "#333" }}>
OUR <span style={{ fontWeight: 300 }}>EXPERTISE</span> OUR <span style={{ fontWeight: 300 }}>EXPERTISE</span>
</Typography> </Typography>
<Typography variant="body1" sx={{ color: "#666", textAlign: "center", marginBottom: 3, maxWidth: "800px" }}> <Typography variant="body1" sx={{ color: "#666", textAlign: "center", marginBottom: 3, maxWidth: "800px" }}>
We combine data insights with design thinking to build strategies and experiences that transform businesses. We combine data insights with design thinking to build strategies and experiences that transform businesses.
</Typography> </Typography>
<Typography variant="h4" fontWeight={700} sx={{ marginBottom: 5, textTransform: "uppercase", color: "#555", fontSize: "3rem" }}> <Typography variant="h4" fontWeight={700} sx={{ marginBottom: 5, textTransform: "uppercase", color: "#555", fontSize: "3rem" }}>
{currentText} {currentText}
</Typography> </Typography>
<Grid container justifyContent="center" sx={{ maxWidth: "1000px", margin: "0 auto" }}> <Grid container justifyContent="center" sx={{ maxWidth: "1000px", margin: "0 auto" }}>
{[ {[
{ {
title: "Content Marketing", title: "Content Marketing",
icon: <Computer sx={{ fontSize: 50, color: "#F7931E" }} />, // Digital icon icon: <Computer sx={{ fontSize: 50, color: "#F7931E" }} />, // Digital icon
bgColor: "#16110f", bgColor: "#16110f",
items: [ items: [
"Blog & article writing", "Blog & article writing",
"Website copy & landing pages", "Website copy & landing pages",
"Video content & infographics", "Video content & infographics",
"Email & newsletter marketing", "Email & newsletter marketing",
], ],
}, },
{ {
title: "Web Design & Development", title: "Web Design & Development",
icon: <Brush sx={{ fontSize: 50, color: "#F7931E" }} />, // Design icon icon: <Brush sx={{ fontSize: 50, color: "#F7931E" }} />, // Design icon
bgColor: "#49332a", bgColor: "#49332a",
items: [ items: [
"Custom website design", "Custom website design",
"WordPress & eCommerce development", "WordPress & eCommerce development",
"Speed optimization & mobile-first design", "Speed optimization & mobile-first design",
"UX/UI improvements", "UX/UI improvements",
], ],
}, },
{ {
title: "DEVELOPMENT", title: "DEVELOPMENT",
icon: <Code sx={{ fontSize: 50, color: "#F7931E" }} />, // Development icon icon: <Code sx={{ fontSize: 50, color: "#F7931E" }} />, // Development icon
bgColor: "#16110f", bgColor: "#16110f",
items: [ items: [
"Website & Microsite Development", "Website & Microsite Development",
"Mobile Apps & Websites", "Mobile Apps & Websites",
"Content Management Systems (CMS)", "Content Management Systems (CMS)",
"Website Maintenance & Security", "Website Maintenance & Security",
"Ecommerce Solutions", "Ecommerce Solutions",
"Digital Strategy Consulting", "Digital Strategy Consulting",
"Video Content Creation", "Video Content Creation",
], ],
}, },
].map((category, index) => ( ].map((category, index) => (
<Grid item xs={12} sm={6} md={4} key={index} sx={{ display: "flex" }}> <Grid item xs={12} sm={6} md={4} key={index} sx={{ display: "flex" }}>
<Box <Box
sx={{ sx={{
backgroundColor: category.bgColor, backgroundColor: category.bgColor,
flex: 1, flex: 1,
padding: "40px 20px", padding: "40px 20px",
textAlign: "center", textAlign: "center",
boxShadow: "0 4px 10px rgba(0, 0, 0, 0.1)", boxShadow: "0 4px 10px rgba(0, 0, 0, 0.1)",
color: "#fff", color: "#fff",
minHeight: "500px", minHeight: "500px",
display: "flex", display: "flex",
flexDirection: "column", flexDirection: "column",
justifyContent: "center", justifyContent: "center",
alignItems: "center", alignItems: "center",
}} }}
> >
{category.icon} {/* Render the icon above the title */} {category.icon} {/* Render the icon above the title */}
<Typography variant="h6" fontWeight={700} color="#F7931E" gutterBottom sx={{ marginTop: 2 }}> <Typography variant="h6" fontWeight={700} color="#F7931E" gutterBottom sx={{ marginTop: 2 }}>
{category.title} {category.title}
</Typography> </Typography>
{category.items.map((item, i) => ( {category.items.map((item, i) => (
<Typography key={i} variant="body2" sx={{ color: "#ddd", marginBottom: 1 }}> <Typography key={i} variant="body2" sx={{ color: "#ddd", marginBottom: 1 }}>
{item} {item}
</Typography> </Typography>
))} ))}
</Box> </Box>
</Grid> </Grid>
))} ))}
</Grid> </Grid>
</Box> </Box>
); );
}; };
export default OurExpertise; export default OurExpertise;

View File

@ -1,83 +1,83 @@
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { Box, Grid, Typography } from "@mui/material"; import { Box, Grid, Typography } from "@mui/material";
import { motion, useAnimation } from "framer-motion"; import { motion, useAnimation } from "framer-motion";
import { useInView } from "react-intersection-observer"; import { useInView } from "react-intersection-observer";
import darkbackground from "../../../dark-background.jpg" import darkbackground from "../../../dark-background.jpg"
// Counter Component // Counter Component
const Counter = ({ target, label, icon }: { target: number; label: string; icon: React.ReactNode }) => { const Counter = ({ target, label, icon }: { target: number; label: string; icon: React.ReactNode }) => {
const controls = useAnimation(); const controls = useAnimation();
const [count, setCount] = useState(0); const [count, setCount] = useState(0);
const { ref, inView } = useInView({ triggerOnce: true }); const { ref, inView } = useInView({ triggerOnce: true });
useEffect(() => { useEffect(() => {
if (inView) { if (inView) {
let start = 0; let start = 0;
const step = Math.ceil(target / 50); const step = Math.ceil(target / 50);
const interval = setInterval(() => { const interval = setInterval(() => {
start += step; start += step;
setCount(start > target ? target : start); setCount(start > target ? target : start);
if (start >= target) clearInterval(interval); if (start >= target) clearInterval(interval);
}, 20); }, 20);
} }
}, [inView, target]); }, [inView, target]);
return ( return (
<motion.div ref={ref} animate={controls} initial={{ opacity: 0, y: 20 }} whileInView={{ opacity: 1, y: 0 }} transition={{ duration: 0.6 }}> <motion.div ref={ref} animate={controls} initial={{ opacity: 0, y: 20 }} whileInView={{ opacity: 1, y: 0 }} transition={{ duration: 0.6 }}>
<Box textAlign="center"> <Box textAlign="center">
{icon} {icon}
<Typography variant="h6" color="white" sx={{ mt: 1 }}> <Typography variant="h6" color="white" sx={{ mt: 1 }}>
{label} {label}
</Typography> </Typography>
<Typography variant="h4" fontWeight="bold" color="white"> <Typography variant="h4" fontWeight="bold" color="white">
{count} {count}
</Typography> </Typography>
</Box> </Box>
</motion.div> </motion.div>
); );
}; };
const StatsSection = () => { const StatsSection = () => {
return ( return (
<Box <Box
sx={{ sx={{
position: "relative", position: "relative",
backgroundImage: `url(${darkbackground})`, backgroundImage: `url(${darkbackground})`,
backgroundSize: "cover", backgroundSize: "cover",
backgroundAttachment: "fixed", backgroundAttachment: "fixed",
backgroundPosition: "center", backgroundPosition: "center",
minHeight: "80vh", minHeight: "80vh",
display: "flex", display: "flex",
alignItems: "center", alignItems: "center",
justifyContent: "center", justifyContent: "center",
color: "white", color: "white",
py: 10, py: 10,
}} }}
> >
<Grid container spacing={1} justifyContent="center"> <Grid container spacing={1} justifyContent="center">
{/* Coffee Cups */} {/* Coffee Cups */}
<Grid item xs={6} md={3}> <Grid item xs={6} md={3}>
<Counter target={20800} label="COFFEE CUPS" icon={<Typography fontSize={40}></Typography>} /> <Counter target={20800} label="COFFEE CUPS" icon={<Typography fontSize={40}></Typography>} />
</Grid> </Grid>
{/* Projects */} {/* Projects */}
<Grid item xs={6} md={3}> <Grid item xs={6} md={3}>
<Counter target={575} label="PROJECTS" icon={<Typography fontSize={40}>💼</Typography>} /> <Counter target={575} label="PROJECTS" icon={<Typography fontSize={40}>💼</Typography>} />
</Grid> </Grid>
{/* Working Days */} {/* Working Days */}
<Grid item xs={6} md={3}> <Grid item xs={6} md={3}>
<Counter target={4412} label="WORKING DAYS" icon={<Typography fontSize={40}>🖱</Typography>} /> <Counter target={4412} label="WORKING DAYS" icon={<Typography fontSize={40}>🖱</Typography>} />
</Grid> </Grid>
{/* Clients */} {/* Clients */}
<Grid item xs={6} md={3}> <Grid item xs={6} md={3}>
<Counter target={498} label="CLIENTS" icon={<Typography fontSize={40}>👥</Typography>} /> <Counter target={498} label="CLIENTS" icon={<Typography fontSize={40}>👥</Typography>} />
</Grid> </Grid>
</Grid> </Grid>
</Box> </Box>
); );
}; };
export default StatsSection; export default StatsSection;

View File

@ -1,75 +1,75 @@
import React from "react"; import React from "react";
import { Box, Grid, Typography, Link } from "@mui/material"; import { Box, Grid, Typography, Link } from "@mui/material";
import coffeeCharacter from "../../../imagetwo.png"; import coffeeCharacter from "../../../imagetwo.png";
import brainLightbulb from "../../../imageone.png"; import brainLightbulb from "../../../imageone.png";
const WhoWeAre: React.FC = () => { const WhoWeAre: React.FC = () => {
return ( return (
<Box <Box
sx={{ sx={{
backgroundColor: "#15100E", backgroundColor: "#15100E",
color: "white", color: "white",
minHeight: "100vh", minHeight: "100vh",
display: "flex", display: "flex",
alignItems: "center", alignItems: "center",
justifyContent: "center", justifyContent: "center",
padding: { xs: "40px 20px", md: "80px 100px" }, padding: { xs: "40px 20px", md: "80px 100px" },
}} }}
> >
<Grid container spacing={6} alignItems="center"> <Grid container spacing={6} alignItems="center">
{/* Left Text Content */} {/* Left Text Content */}
<Grid item xs={12} md={6}> <Grid item xs={12} md={6}>
<Typography variant="h3" fontWeight={700} gutterBottom> <Typography variant="h3" fontWeight={700} gutterBottom>
WHO <span style={{ fontWeight: 300 }}>WE ARE</span> WHO <span style={{ fontWeight: 300 }}>WE ARE</span>
</Typography> </Typography>
<Typography <Typography
variant="body1" variant="body1"
sx={{ color: "#b0b0b0", lineHeight: 1.8, marginBottom: 2, letterSpacing: "0.05em", wordSpacing: "0.1em" }} sx={{ color: "#b0b0b0", lineHeight: 1.8, marginBottom: 2, letterSpacing: "0.05em", wordSpacing: "0.1em" }}
> >
At <b>Quadraedge</b>, we believe that true marketing success comes from mastering all four edgesPR, Marketing, Tech, and Media. As a team of three passionate marketers, we built Quadraedge to be a powerhouse that integrates these four pillars, ensuring brands dont just exist online but thrive. At <b>Quadraedge</b>, we believe that true marketing success comes from mastering all four edgesPR, Marketing, Tech, and Media. As a team of three passionate marketers, we built Quadraedge to be a powerhouse that integrates these four pillars, ensuring brands dont just exist online but thrive.
</Typography> </Typography>
<Typography <Typography
variant="body1" variant="body1"
sx={{ color: "#b0b0b0", lineHeight: 1.8, marginBottom: 3, letterSpacing: "0.05em", wordSpacing: "0.1em" }} sx={{ color: "#b0b0b0", lineHeight: 1.8, marginBottom: 3, letterSpacing: "0.05em", wordSpacing: "0.1em" }}
> >
We saw a gap in the industrybusinesses struggling to balance visibility, technology, engagement, and storytelling. So, we combined our expertise to create a <b>360-degree marketing approach</b> that brings together: We saw a gap in the industrybusinesses struggling to balance visibility, technology, engagement, and storytelling. So, we combined our expertise to create a <b>360-degree marketing approach</b> that brings together:
</Typography> </Typography>
<Link href="#" underline="hover" sx={{ color: "#b0b0b0", fontSize: "1rem", fontWeight: 600 }}> <Link href="#" underline="hover" sx={{ color: "#b0b0b0", fontSize: "1rem", fontWeight: 600 }}>
READ MORE READ MORE
</Link> </Link>
</Grid> </Grid>
{/* Right Image Section */} {/* Right Image Section */}
<Grid item xs={12} md={6} container spacing={2} justifyContent="center"> <Grid item xs={12} md={6} container spacing={2} justifyContent="center">
<Grid item xs={6}> <Grid item xs={6}>
<Box <Box
component="img" component="img"
src={brainLightbulb} src={brainLightbulb}
alt="Brain Lightbulb" alt="Brain Lightbulb"
sx={{ sx={{
width: "95%", width: "95%",
boxShadow: "10px 10px 20px rgba(0, 0, 0, 0.3)", boxShadow: "10px 10px 20px rgba(0, 0, 0, 0.3)",
transform: "rotate(-5deg)", transform: "rotate(-5deg)",
}} }}
/> />
</Grid> </Grid>
<Grid item xs={6}> <Grid item xs={6}>
<Box <Box
component="img" component="img"
src={coffeeCharacter} src={coffeeCharacter}
alt="Coffee Character" alt="Coffee Character"
sx={{ sx={{
width: "95%", width: "95%",
boxShadow: "10px 10px 20px rgba(0, 0, 0, 0.3)", boxShadow: "10px 10px 20px rgba(0, 0, 0, 0.3)",
transform: "rotate(5deg)", transform: "rotate(5deg)",
}} }}
/> />
</Grid> </Grid>
</Grid> </Grid>
</Grid> </Grid>
</Box> </Box>
); );
}; };
export default WhoWeAre; export default WhoWeAre;

View File

@ -1,61 +1,61 @@
import { Box, Typography, Container } from "@mui/material"; import { Box, Typography, Container } from "@mui/material";
import mottoimage from "../../whowearemotto.png" import mottoimage from "../../whowearemotto.png"
const MottoSection: React.FC = () => { const MottoSection: React.FC = () => {
return ( return (
<Box> <Box>
{/* Top Section */} {/* Top Section */}
<Box sx={{ backgroundColor: "#F7F7F7", py: 6, pl: 5, textAlign: "left" }}> <Box sx={{ backgroundColor: "#F7F7F7", py: 6, pl: 5, textAlign: "left" }}>
<Typography <Typography
variant="h3" variant="h3"
sx={{ sx={{
fontWeight: 500, fontWeight: 500,
fontSize: { xs: "2rem", md: "3.5rem" }, fontSize: { xs: "2rem", md: "3.5rem" },
letterSpacing: 2, letterSpacing: 2,
}} }}
> >
OUR <span style={{ fontWeight: "bold" }}>MOTTO</span> OUR <span style={{ fontWeight: "bold" }}>MOTTO</span>
</Typography> </Typography>
</Box> </Box>
{/* Bottom Black Section */} {/* Bottom Black Section */}
<Box sx={{ backgroundColor: "#15100E", py: 6 }}> <Box sx={{ backgroundColor: "#15100E", py: 6 }}>
<Container maxWidth="md"> <Container maxWidth="md">
<Typography <Typography
variant="body1" variant="body1"
sx={{ sx={{
color: "#A0A0A0", color: "#A0A0A0",
fontSize: { xs: "1rem", md: "1.25rem" }, fontSize: { xs: "1rem", md: "1.25rem" },
textAlign: "center", textAlign: "center",
lineHeight: 1.8, lineHeight: 1.8,
}} }}
> >
Ideas excite us, they shape the future, add value, and signal change. Ideas excite us, they shape the future, add value, and signal change.
Through fresh ideas, we blend together beautiful designs, functional Through fresh ideas, we blend together beautiful designs, functional
digital strategies, and engaging experiences. digital strategies, and engaging experiences.
<br /> <br />
Here are values that define us, principles that guide us, and words Here are values that define us, principles that guide us, and words
that we live by. that we live by.
</Typography> </Typography>
</Container> </Container>
</Box> </Box>
{/* Image Section */} {/* Image Section */}
<Box <Box
sx={{ sx={{
display: "flex", display: "flex",
justifyContent: "center", justifyContent: "center",
alignItems: "center", alignItems: "center",
}} }}
> >
<img <img
src={mottoimage} src={mottoimage}
alt="Motto Image" alt="Motto Image"
style={{ maxWidth: "90%", height: "auto", borderRadius: "8px" }} style={{ maxWidth: "90%", height: "auto", borderRadius: "8px" }}
/> />
</Box> </Box>
</Box> </Box>
); );
}; };
export default MottoSection; export default MottoSection;

View File

@ -1,12 +1,12 @@
import React from 'react'; import React from 'react';
import { Outlet } from 'react-router-dom'; import { Outlet } from 'react-router-dom';
import { Box } from '@mui/material'; import { Box } from '@mui/material';
// import CopyrightFooter from '../../assets/copyright'; // import CopyrightFooter from '../../assets/copyright';
export const MottoBase: React.FC = () => { export const MottoBase: React.FC = () => {
return ( return (
<Box> <Box>
<Outlet /> <Outlet />
</Box> </Box>
); );
}; };

View File

@ -1,116 +1,116 @@
import { import {
Box, Box,
Card, Card,
CardContent, CardContent,
CardMedia, CardMedia,
Grid, Grid,
Typography, Typography,
Button, Button,
} from "@mui/material"; } from "@mui/material";
import portfolioImg from "../ourwork/Rectangle 6.png"; import portfolioImg from "../ourwork/Rectangle 6.png";
const works = [ const works = [
{ {
title: "Project Name", title: "Project Name",
image: portfolioImg, image: portfolioImg,
}, },
{ {
title: "Project Name", title: "Project Name",
image: portfolioImg, image: portfolioImg,
}, },
{ {
title: "Project Name", title: "Project Name",
image: portfolioImg, image: portfolioImg,
}, },
]; ];
const OurWorks = () => { const OurWorks = () => {
return ( return (
<Box sx={{ backgroundColor: "#1d2733", color: "#fff", py: 8, px: 2 }}> <Box sx={{ backgroundColor: "#1d2733", color: "#fff", py: 8, px: 2 }}>
<Typography variant="h4" align="center" fontWeight="bold" gutterBottom> <Typography variant="h4" align="center" fontWeight="bold" gutterBottom>
Our Works Our Works
</Typography> </Typography>
<Typography variant="subtitle1" align="center" mb={6}> <Typography variant="subtitle1" align="center" mb={6}>
Weve helped brands grow through bold strategy and creative execution. Weve helped brands grow through bold strategy and creative execution.
Explore our recent success stories. Explore our recent success stories.
</Typography> </Typography>
<Grid container spacing={4} justifyContent="center"> <Grid container spacing={4} justifyContent="center">
{works.map((work, index) => ( {works.map((work, index) => (
<Grid item xs={12} sm={6} md={4} key={index}> <Grid item xs={12} sm={6} md={4} key={index}>
<Card <Card
sx={{ sx={{
borderRadius: 3, borderRadius: 3,
overflow: "hidden", overflow: "hidden",
bgcolor: "#fff", bgcolor: "#fff",
maxWidth: 320, maxWidth: 320,
margin: "0 auto", margin: "0 auto",
}} }}
elevation={3} elevation={3}
> >
<CardContent> <CardContent>
<Typography <Typography
variant="subtitle1" variant="subtitle1"
fontWeight="bold" fontWeight="bold"
color="Black" color="Black"
gutterBottom gutterBottom
> >
{work.title} {work.title}
</Typography> </Typography>
</CardContent> </CardContent>
<CardMedia <CardMedia
component="img" component="img"
image={work.image} image={work.image}
alt={work.title} alt={work.title}
sx={{ sx={{
objectFit: "contain", objectFit: "contain",
height: 250, height: 250,
px: 2, px: 2,
}} }}
/> />
<CardContent> <CardContent>
<Button <Button
variant="contained" variant="contained"
fullWidth fullWidth
sx={{ sx={{
backgroundColor: "#000", backgroundColor: "#000",
color: "#00FFD1", color: "#00FFD1",
fontWeight: "bold", fontWeight: "bold",
"&:hover": { "&:hover": {
backgroundColor: "#333", backgroundColor: "#333",
}, },
borderRadius: "30px", borderRadius: "30px",
}} }}
> >
VIEW DEMO VIEW DEMO
</Button> </Button>
</CardContent> </CardContent>
</Card> </Card>
</Grid> </Grid>
))} ))}
</Grid> </Grid>
<Box mt={6} display="flex" justifyContent="center"> <Box mt={6} display="flex" justifyContent="center">
<Button <Button
variant="outlined" variant="outlined"
sx={{ sx={{
borderRadius: "30px", borderRadius: "30px",
borderColor: "#00FFD1", borderColor: "#00FFD1",
color: "#00FFD1", color: "#00FFD1",
px: 4, px: 4,
py: 1.5, py: 1.5,
fontWeight: "bold", fontWeight: "bold",
"&:hover": { "&:hover": {
backgroundColor: "#00FFD1", backgroundColor: "#00FFD1",
color: "#000", color: "#000",
}, },
}} }}
> >
VIEW FULL PORTFOLIO VIEW FULL PORTFOLIO
</Button> </Button>
</Box> </Box>
</Box> </Box>
); );
}; };
export default OurWorks; export default OurWorks;

View File

@ -1,238 +1,238 @@
import { import {
Box, Box,
Card, Card,
CardContent, CardContent,
CardMedia, CardMedia,
Typography, Typography,
Container, Container,
useMediaQuery, useMediaQuery,
useTheme, useTheme,
} from "@mui/material"; } from "@mui/material";
import { motion, AnimatePresence, PanInfo } from "framer-motion"; import { motion, AnimatePresence, PanInfo } from "framer-motion";
import { useState } from "react"; import { useState } from "react";
import serviceImage from "../services/Image Wrapper.png"; import serviceImage from "../services/Image Wrapper.png";
const services = [ const services = [
{ {
title: "Design", title: "Design",
description: description:
"Lorem ipsum dolor sit amet consectetur. Non aliquam justo hendrerit vitae lacus. Cursus purus dictumst scelerisque vitae ultricies turpis aliquam turpis.", "Lorem ipsum dolor sit amet consectetur. Non aliquam justo hendrerit vitae lacus. Cursus purus dictumst scelerisque vitae ultricies turpis aliquam turpis.",
image: `${serviceImage}`, image: `${serviceImage}`,
}, },
{ {
title: "Development", title: "Development",
description: description:
"Lorem ipsum dolor sit amet consectetur. Non aliquam justo hendrerit vitae lacus. Cursus purus dictumst scelerisque vitae ultricies turpis aliquam turpis.", "Lorem ipsum dolor sit amet consectetur. Non aliquam justo hendrerit vitae lacus. Cursus purus dictumst scelerisque vitae ultricies turpis aliquam turpis.",
image: `${serviceImage}`, image: `${serviceImage}`,
}, },
{ {
title: "Marketing", title: "Marketing",
description: description:
"Lorem ipsum dolor sit amet consectetur. Non aliquam justo hendrerit vitae lacus. Cursus purus dictumst scelerisque vitae ultricies turpis aliquam turpis.", "Lorem ipsum dolor sit amet consectetur. Non aliquam justo hendrerit vitae lacus. Cursus purus dictumst scelerisque vitae ultricies turpis aliquam turpis.",
image: `${serviceImage}`, image: `${serviceImage}`,
}, },
]; ];
const Services = () => { const Services = () => {
const theme = useTheme(); const theme = useTheme();
const isMobile = useMediaQuery(theme.breakpoints.down("sm")); const isMobile = useMediaQuery(theme.breakpoints.down("sm"));
const [currentIndex, setCurrentIndex] = useState(0); const [currentIndex, setCurrentIndex] = useState(0);
const handleDragEnd = ( const handleDragEnd = (
event: MouseEvent | TouchEvent | PointerEvent, event: MouseEvent | TouchEvent | PointerEvent,
info: PanInfo info: PanInfo
) => { ) => {
if (info.offset.x > 50) { if (info.offset.x > 50) {
// Swiped right // Swiped right
setCurrentIndex((prev) => (prev === 0 ? services.length - 1 : prev - 1)); setCurrentIndex((prev) => (prev === 0 ? services.length - 1 : prev - 1));
} else if (info.offset.x < -50) { } else if (info.offset.x < -50) {
// Swiped left // Swiped left
setCurrentIndex((prev) => (prev === services.length - 1 ? 0 : prev + 1)); setCurrentIndex((prev) => (prev === services.length - 1 ? 0 : prev + 1));
} }
}; };
return ( return (
<Box sx={{ backgroundColor: "#1d2733", color: "#fff", py: 8 }}> <Box sx={{ backgroundColor: "#1d2733", color: "#fff", py: 8 }}>
<Container maxWidth="lg"> <Container maxWidth="lg">
<motion.div <motion.div
initial={{ opacity: 0, y: -20 }} initial={{ opacity: 0, y: -20 }}
whileInView={{ opacity: 1, y: 0 }} whileInView={{ opacity: 1, y: 0 }}
transition={{ duration: 0.6 }} transition={{ duration: 0.6 }}
viewport={{ once: true }} viewport={{ once: true }}
> >
<Typography <Typography
variant="h4" variant="h4"
align="center" align="center"
fontWeight="bold" fontWeight="bold"
gutterBottom gutterBottom
> >
Services Services
</Typography> </Typography>
<Typography variant="subtitle1" align="center" mb={6}> <Typography variant="subtitle1" align="center" mb={6}>
We offer design, development & marketing services We offer design, development & marketing services
</Typography> </Typography>
</motion.div> </motion.div>
{isMobile ? ( {isMobile ? (
<Box sx={{ position: "relative", height: 400, overflow: "hidden" }}> <Box sx={{ position: "relative", height: 400, overflow: "hidden" }}>
<AnimatePresence initial={false}> <AnimatePresence initial={false}>
<motion.div <motion.div
key={currentIndex} key={currentIndex}
drag="x" drag="x"
onDragEnd={handleDragEnd} onDragEnd={handleDragEnd}
dragConstraints={{ left: 0, right: 0 }} dragConstraints={{ left: 0, right: 0 }}
initial={{ x: 300, opacity: 0 }} initial={{ x: 300, opacity: 0 }}
animate={{ x: 0, opacity: 1 }} animate={{ x: 0, opacity: 1 }}
exit={{ x: -300, opacity: 0 }} exit={{ x: -300, opacity: 0 }}
transition={{ type: "spring", stiffness: 300, damping: 30 }} transition={{ type: "spring", stiffness: 300, damping: 30 }}
style={{ style={{
position: "absolute", position: "absolute",
width: "100%", width: "100%",
padding: "0 16px", padding: "0 16px",
}} }}
> >
<Card <Card
sx={{ sx={{
borderRadius: 5, borderRadius: 5,
overflow: "hidden", overflow: "hidden",
height: "100%", height: "100%",
bgcolor: "#fff", bgcolor: "#fff",
display: "flex", display: "flex",
flexDirection: "column", flexDirection: "column",
maxWidth: 345, maxWidth: 345,
mx: "auto", mx: "auto",
}} }}
elevation={3} elevation={3}
> >
<Box <Box
sx={{ sx={{
height: 200, height: 200,
display: "flex", display: "flex",
alignItems: "center", alignItems: "center",
justifyContent: "center", justifyContent: "center",
overflow: "hidden", overflow: "hidden",
}} }}
> >
<CardMedia <CardMedia
component="img" component="img"
image={services[currentIndex].image} image={services[currentIndex].image}
alt={services[currentIndex].title} alt={services[currentIndex].title}
sx={{ sx={{
objectFit: "contain", objectFit: "contain",
width: "100%", width: "100%",
height: "100%", height: "100%",
}} }}
/> />
</Box> </Box>
<CardContent sx={{ flexGrow: 1 }}> <CardContent sx={{ flexGrow: 1 }}>
<Typography <Typography
variant="h6" variant="h6"
fontWeight="bold" fontWeight="bold"
gutterBottom gutterBottom
color="black" color="black"
> >
{services[currentIndex].title} {services[currentIndex].title}
</Typography> </Typography>
<Typography variant="body2" color="black"> <Typography variant="body2" color="black">
{services[currentIndex].description} {services[currentIndex].description}
</Typography> </Typography>
</CardContent> </CardContent>
</Card> </Card>
</motion.div> </motion.div>
</AnimatePresence> </AnimatePresence>
{/* Dots indicator */} {/* Dots indicator */}
<Box <Box
sx={{ sx={{
display: "flex", display: "flex",
justifyContent: "center", justifyContent: "center",
mt: 2, mt: 2,
gap: 1, gap: 1,
}} }}
> >
{services.map((_, index) => ( {services.map((_, index) => (
<Box <Box
key={index} key={index}
onClick={() => setCurrentIndex(index)} onClick={() => setCurrentIndex(index)}
sx={{ sx={{
width: 10, width: 10,
height: 10, height: 10,
borderRadius: "50%", borderRadius: "50%",
bgcolor: index === currentIndex ? "#00E0FF" : "#ffffff80", bgcolor: index === currentIndex ? "#00E0FF" : "#ffffff80",
cursor: "pointer", cursor: "pointer",
}} }}
/> />
))} ))}
</Box> </Box>
</Box> </Box>
) : ( ) : (
<Box <Box
sx={{ sx={{
display: "grid", display: "grid",
gridTemplateColumns: "repeat(auto-fit, minmax(300px, 1fr))", gridTemplateColumns: "repeat(auto-fit, minmax(300px, 1fr))",
gap: 4, gap: 4,
}} }}
> >
{services.map((service, index) => ( {services.map((service, index) => (
<motion.div <motion.div
key={index} key={index}
whileHover={{ y: -5 }} whileHover={{ y: -5 }}
transition={{ duration: 0.3 }} transition={{ duration: 0.3 }}
> >
<Card <Card
sx={{ sx={{
borderRadius: 5, borderRadius: 5,
overflow: "hidden", overflow: "hidden",
height: "100%", height: "100%",
bgcolor: "#fff", bgcolor: "#fff",
display: "flex", display: "flex",
flexDirection: "column", flexDirection: "column",
}} }}
elevation={3} elevation={3}
> >
<Box <Box
sx={{ sx={{
height: 200, height: 200,
display: "flex", display: "flex",
alignItems: "center", alignItems: "center",
justifyContent: "center", justifyContent: "center",
overflow: "hidden", overflow: "hidden",
}} }}
> >
<motion.div whileHover={{ scale: 1.05 }}> <motion.div whileHover={{ scale: 1.05 }}>
<CardMedia <CardMedia
component="img" component="img"
image={service.image} image={service.image}
alt={service.title} alt={service.title}
sx={{ sx={{
objectFit: "contain", objectFit: "contain",
width: "100%", width: "100%",
height: "100%", height: "100%",
}} }}
/> />
</motion.div> </motion.div>
</Box> </Box>
<CardContent sx={{ flexGrow: 1 }}> <CardContent sx={{ flexGrow: 1 }}>
<Typography <Typography
variant="h6" variant="h6"
fontWeight="bold" fontWeight="bold"
gutterBottom gutterBottom
color="black" color="black"
> >
{service.title} {service.title}
</Typography> </Typography>
<Typography variant="body2" color="black"> <Typography variant="body2" color="black">
{service.description} {service.description}
</Typography> </Typography>
</CardContent> </CardContent>
</Card> </Card>
</motion.div> </motion.div>
))} ))}
</Box> </Box>
)} )}
</Container> </Container>
</Box> </Box>
); );
}; };
export default Services; export default Services;

View File

@ -1,100 +1,100 @@
import { import {
Avatar, Avatar,
Box, Box,
Card, Card,
CardContent, CardContent,
Grid, Grid,
Typography, Typography,
} from "@mui/material"; } from "@mui/material";
import testimonialImg from "../testomonials/b7bef0298c881712fbc6437106d2aaef27c4fad8.jpg"; import testimonialImg from "../testomonials/b7bef0298c881712fbc6437106d2aaef27c4fad8.jpg";
const testimonials = [ const testimonials = [
{ {
name: "Name", name: "Name",
role: "Role", role: "Role",
company: "Company Name & Logo", company: "Company Name & Logo",
feedback: feedback:
"Lorem ipsum dolor sit amet consectetur. Vitae dictum quam senectus posuere sit justo est turpis interdum. Ut vitae platea et adipiscing nisl.", "Lorem ipsum dolor sit amet consectetur. Vitae dictum quam senectus posuere sit justo est turpis interdum. Ut vitae platea et adipiscing nisl.",
rating: 5, rating: 5,
}, },
{ {
name: "John Dae", name: "John Dae",
role: "Sr Manager", role: "Sr Manager",
company: "Wells Fargo", company: "Wells Fargo",
feedback: feedback:
"Lorem ipsum dolor sit amet consectetur. Vitae dictum quam senectus posuere sit justo est turpis interdum. Ut vitae platea et adipiscing nisl.", "Lorem ipsum dolor sit amet consectetur. Vitae dictum quam senectus posuere sit justo est turpis interdum. Ut vitae platea et adipiscing nisl.",
rating: 5, rating: 5,
}, },
{ {
name: "Name", name: "Name",
role: "Role", role: "Role",
company: "Company Name & Logo", company: "Company Name & Logo",
feedback: feedback:
"Lorem ipsum dolor sit amet consectetur. Vitae dictum quam senectus posuere sit justo est turpis interdum. Ut vitae platea et adipiscing nisl.", "Lorem ipsum dolor sit amet consectetur. Vitae dictum quam senectus posuere sit justo est turpis interdum. Ut vitae platea et adipiscing nisl.",
rating: 4, rating: 4,
}, },
]; ];
const Testimonials = () => { const Testimonials = () => {
return ( return (
<Box sx={{ backgroundColor: "#1d2733", color: "#fff", py: 10, px: 3 }}> <Box sx={{ backgroundColor: "#1d2733", color: "#fff", py: 10, px: 3 }}>
<Box textAlign="center" mb={6}> <Box textAlign="center" mb={6}>
<Typography variant="h4" fontWeight="bold" gutterBottom> <Typography variant="h4" fontWeight="bold" gutterBottom>
Testimonials Testimonials
</Typography> </Typography>
<Typography variant="subtitle1"> <Typography variant="subtitle1">
Dont just take our word for it -- hear directly from our clients Dont just take our word for it -- hear directly from our clients
</Typography> </Typography>
</Box> </Box>
<Grid container spacing={4} justifyContent="center"> <Grid container spacing={4} justifyContent="center">
{testimonials.map((t, idx) => ( {testimonials.map((t, idx) => (
<Grid item xs={12} sm={6} md={4} key={idx}> <Grid item xs={12} sm={6} md={4} key={idx}>
<Card <Card
sx={{ sx={{
borderRadius: 3, borderRadius: 3,
maxWidth: 320, maxWidth: 320,
margin: "0 auto", margin: "0 auto",
textAlign: "center", textAlign: "center",
py: 3, py: 3,
}} }}
> >
<Avatar <Avatar
src={testimonialImg} src={testimonialImg}
alt={t.name} alt={t.name}
sx={{ width: 100, height: 100, margin: "0 auto", mb: 2 }} sx={{ width: 100, height: 100, margin: "0 auto", mb: 2 }}
/> />
<CardContent> <CardContent>
<Typography variant="subtitle1" fontWeight="bold"> <Typography variant="subtitle1" fontWeight="bold">
{t.name} ,{" "} {t.name} ,{" "}
<span style={{ fontWeight: "normal" }}>{t.role}</span> <span style={{ fontWeight: "normal" }}>{t.role}</span>
</Typography> </Typography>
<Typography variant="body2" color="text.secondary" mb={1}> <Typography variant="body2" color="text.secondary" mb={1}>
{t.company} {t.company}
</Typography> </Typography>
<Typography variant="body2" color="text.secondary" mb={2}> <Typography variant="body2" color="text.secondary" mb={2}>
{t.feedback} {t.feedback}
</Typography> </Typography>
<Box> <Box>
{Array.from({ length: 5 }).map((_, i) => ( {Array.from({ length: 5 }).map((_, i) => (
<span <span
key={i} key={i}
style={{ style={{
color: i < t.rating ? "#00FFD1" : "#ccc", color: i < t.rating ? "#00FFD1" : "#ccc",
fontSize: "1.2rem", fontSize: "1.2rem",
}} }}
> >
</span> </span>
))} ))}
</Box> </Box>
</CardContent> </CardContent>
</Card> </Card>
</Grid> </Grid>
))} ))}
</Grid> </Grid>
</Box> </Box>
); );
}; };
export default Testimonials; export default Testimonials;

View File

@ -1,13 +1,13 @@
body { body {
margin: 0; margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
sans-serif; sans-serif;
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
} }
code { code {
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
monospace; monospace;
} }

View File

@ -1,15 +1,15 @@
import React from 'react'; import React from 'react';
import ReactDOM from 'react-dom/client'; import ReactDOM from 'react-dom/client';
import App from './App'; import App from './App';
import { CssBaseline, ThemeProvider } from '@mui/material'; import { CssBaseline, ThemeProvider } from '@mui/material';
import theme from './theme'; import theme from './theme';
const root = ReactDOM.createRoot(document.getElementById('root')!); const root = ReactDOM.createRoot(document.getElementById('root')!);
root.render( root.render(
<React.StrictMode> <React.StrictMode>
<ThemeProvider theme={theme}> <ThemeProvider theme={theme}>
<CssBaseline /> <CssBaseline />
<App /> <App />
</ThemeProvider> </ThemeProvider>
</React.StrictMode> </React.StrictMode>
); );

View File

@ -1 +1 @@
/// <reference types="react-scripts" /> /// <reference types="react-scripts" />

View File

@ -1,15 +1,15 @@
import { ReportHandler } from 'web-vitals'; import { ReportHandler } from 'web-vitals';
const reportWebVitals = (onPerfEntry?: ReportHandler) => { const reportWebVitals = (onPerfEntry?: ReportHandler) => {
if (onPerfEntry && onPerfEntry instanceof Function) { if (onPerfEntry && onPerfEntry instanceof Function) {
import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
getCLS(onPerfEntry); getCLS(onPerfEntry);
getFID(onPerfEntry); getFID(onPerfEntry);
getFCP(onPerfEntry); getFCP(onPerfEntry);
getLCP(onPerfEntry); getLCP(onPerfEntry);
getTTFB(onPerfEntry); getTTFB(onPerfEntry);
}); });
} }
}; };
export default reportWebVitals; export default reportWebVitals;

View File

@ -1,56 +1,56 @@
import { createBrowserRouter, Navigate } from "react-router-dom"; import { createBrowserRouter, Navigate } from "react-router-dom";
import Layout from "./components/Layout"; import Layout from "./components/Layout";
import LandingPage from "./components/landingpage/landingpage"; import LandingPage from "./components/landingpage/landingpage";
import { LandingBase } from "./components/landingpage/landingpagebase"; import { LandingBase } from "./components/landingpage/landingpagebase";
import { MottoBase } from "./components/mottopage/mottobase"; import { MottoBase } from "./components/mottopage/mottobase";
import MottoSection from "./components/mottopage/MottoSection"; import MottoSection from "./components/mottopage/MottoSection";
import AboutUsPage from "./components/aboutus"; import AboutUsPage from "./components/aboutus";
const router = createBrowserRouter([ const router = createBrowserRouter([
{ {
path: '', path: '',
element: <Layout />, element: <Layout />,
children: [ children: [
{ {
index: true, index: true,
element: <Navigate to='home' />, element: <Navigate to='home' />,
}, },
{ {
path: 'home', path: 'home',
element: <LandingBase />, element: <LandingBase />,
children: [ children: [
{ {
index: true, index: true,
element: <LandingPage />, element: <LandingPage />,
}, },
], ],
}, },
{ {
path: 'aboutUs', path: 'aboutUs',
element: <LandingBase />, element: <LandingBase />,
children: [ children: [
{ {
index: true, index: true,
element: <AboutUsPage />, element: <AboutUsPage />,
}, },
], ],
}, },
{ {
path: 'motto', path: 'motto',
element: <MottoBase />, element: <MottoBase />,
children: [ children: [
{ {
index: true, index: true,
element: <MottoSection />, element: <MottoSection />,
}, },
], ],
} }
] ]
}, },
]); ]);
export default router; export default router;

View File

@ -1,5 +1,5 @@
// jest-dom adds custom jest matchers for asserting on DOM nodes. // jest-dom adds custom jest matchers for asserting on DOM nodes.
// allows you to do things like: // allows you to do things like:
// expect(element).toHaveTextContent(/react/i) // expect(element).toHaveTextContent(/react/i)
// learn more: https://github.com/testing-library/jest-dom // learn more: https://github.com/testing-library/jest-dom
import '@testing-library/jest-dom'; import '@testing-library/jest-dom';

View File

@ -1,19 +1,19 @@
import { createTheme } from '@mui/material/styles'; import { createTheme } from '@mui/material/styles';
const theme = createTheme({ const theme = createTheme({
palette: { palette: {
mode: 'dark', mode: 'dark',
primary: { primary: {
main: '#00E0FF', main: '#00E0FF',
}, },
background: { background: {
default: '#0F111A', default: '#0F111A',
paper: '#1B1E2E', paper: '#1B1E2E',
}, },
}, },
typography: { typography: {
fontFamily: 'Inter, sans-serif', fontFamily: 'Inter, sans-serif',
}, },
}); });
export default theme; export default theme;

View File

@ -1,26 +1,26 @@
{ {
"compilerOptions": { "compilerOptions": {
"target": "es5", "target": "es5",
"lib": [ "lib": [
"dom", "dom",
"dom.iterable", "dom.iterable",
"esnext" "esnext"
], ],
"allowJs": true, "allowJs": true,
"skipLibCheck": true, "skipLibCheck": true,
"esModuleInterop": true, "esModuleInterop": true,
"allowSyntheticDefaultImports": true, "allowSyntheticDefaultImports": true,
"strict": true, "strict": true,
"forceConsistentCasingInFileNames": true, "forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true, "noFallthroughCasesInSwitch": true,
"module": "esnext", "module": "esnext",
"moduleResolution": "node", "moduleResolution": "node",
"resolveJsonModule": true, "resolveJsonModule": true,
"isolatedModules": true, "isolatedModules": true,
"noEmit": true, "noEmit": true,
"jsx": "react-jsx" "jsx": "react-jsx"
}, },
"include": [ "include": [
"src" "src"
] ]
} }

26118
yarn.lock

File diff suppressed because it is too large Load Diff