diff --git a/src/app/about/layout.tsx b/src/app/about/layout.tsx new file mode 100644 index 0000000..eb76706 --- /dev/null +++ b/src/app/about/layout.tsx @@ -0,0 +1,32 @@ +import type { Metadata } from "next"; + +export const metadata: Metadata = { + title: "About Us | Tech Master - Award-Winning IT Solutions Dubai", + description: "Learn about Tech Master, an award-winning Dubai-based technology agency specializing in digital transformation, web development, and innovative IT solutions since 2020.", + keywords: [ + "about Tech Master", + "Dubai IT company", + "award-winning tech agency", + "digital transformation company", + "web development company Dubai", + "IT solutions provider", + "tech company Dubai", + "software development company" + ], + openGraph: { + title: "About Us | Tech Master - Award-Winning IT Solutions Dubai", + description: "Learn about Tech Master, an award-winning Dubai-based technology agency specializing in digital transformation and innovative IT solutions.", + url: "https://tech-masters.guru/about", + }, + alternates: { + canonical: "/about", + }, +}; + +export default function AboutLayout({ + children, +}: { + children: React.ReactNode; +}) { + return children; +} \ No newline at end of file diff --git a/src/app/about/page.tsx b/src/app/about/page.tsx new file mode 100644 index 0000000..f6cae3e --- /dev/null +++ b/src/app/about/page.tsx @@ -0,0 +1,253 @@ +"use client"; + +import { + CheckCircleOutlined, + GlobalOutlined, + RocketOutlined, + StarOutlined, + TeamOutlined, + TrophyOutlined +} from "@ant-design/icons"; +import { Avatar, Card, Col, Row, Typography } from "antd"; +import { motion } from "framer-motion"; + +const { Title, Paragraph } = Typography; + +export default function AboutPage() { + const stats = [ + { icon: , number: "50+", label: "Projects Completed" }, + { icon: , number: "25+", label: "Happy Clients" }, + { icon: , number: "15+", label: "Expert Developers" }, + { icon: , number: "3+", label: "Years Experience" }, + ]; + + const values = [ + { + title: "Innovation First", + description: "We stay ahead of technology trends to deliver cutting-edge solutions that give our clients a competitive advantage.", + icon: + }, + { + title: "Quality Excellence", + description: "Every project is crafted with attention to detail, ensuring the highest standards of quality and performance.", + icon: + }, + { + title: "Client Success", + description: "Your success is our success. We work closely with clients to understand their needs and deliver solutions that exceed expectations.", + icon: + }, + { + title: "Transparency", + description: "We believe in open communication and transparent processes, keeping you informed at every step of your project.", + icon: + } + ]; + + return ( +
+ {/* Hero Section */} +
+
+ + + About Tech Master + + + From Dubai to the stars, we're an award-winning technology agency + dedicated to transforming businesses through innovative digital solutions. + + +
+
+ + {/* Stats Section */} +
+
+ + {stats.map((stat, index) => ( + + +
+ {stat.icon} +
+
+ {stat.number} +
+
{stat.label}
+
+ + ))} +
+
+
+ + {/* Story Section */} +
+
+ + + + + Our Story + + + Founded in 2020, Tech Master emerged from a vision to bridge the gap + between traditional business practices and cutting-edge technology. + Based in Dubai, we've grown from a small startup to an award-winning + technology agency serving clients across the UAE and beyond. + + + Our journey has been marked by continuous innovation, unwavering + commitment to quality, and a deep understanding of our clients' needs. + We believe that technology should be an enabler, not a barrier, + and we work tirelessly to make digital transformation accessible + to businesses of all sizes. + + + + + +
+ +
+
+ +
+
+
+ + {/* Values Section */} +
+
+ + + Our Values + + + These core values guide everything we do and shape the way we + approach every project and client relationship. + + + + + {values.map((value, index) => ( + + + +
+ {value.icon} +
+ + {value.title} + + + {value.description} + +
+
+ + ))} +
+
+
+ + {/* Team Section */} +
+
+ + + Our Team + + + Meet the passionate professionals behind Tech Master's success. + Our diverse team brings together expertise from various domains + to deliver exceptional results. + + + + + + + + Ahmed Hassan + CEO & Founder + + Visionary leader with 10+ years in digital transformation + + + + + + + Sarah Johnson + CTO + + Technical expert specializing in AI and cloud solutions + + + + + + + Raj Patel + Lead Developer + + Full-stack developer with expertise in modern frameworks + + + + +
+
+
+ ); +} \ No newline at end of file diff --git a/src/app/components/ProjectsShowcase/ProjectsShowcase.tsx b/src/app/components/ProjectsShowcase/ProjectsShowcase.tsx index f55c110..0c94425 100644 --- a/src/app/components/ProjectsShowcase/ProjectsShowcase.tsx +++ b/src/app/components/ProjectsShowcase/ProjectsShowcase.tsx @@ -1,30 +1,10 @@ -// File: src/components/home/ProjectsShowcase.tsx - import { - CloseOutlined, - EyeOutlined, - GithubOutlined, - LeftOutlined, - LinkOutlined, - RightOutlined, -} from "@ant-design/icons"; -import { - Badge, - Button, - Card, - Carousel, - Col, - Modal, - Row, - Tag, - Typography, + Typography } from "antd"; -import { AnimatePresence, motion, useAnimation } from "framer-motion"; -import Image from "next/image"; -import React, { useEffect, useState } from "react"; +import ProjectsShowcaseClient from "./ProjectsShowcaseClient"; import styles from "./ProjectsShowcaseSelector.module.css"; -const { Title, Paragraph, Text } = Typography; +const { Title, Paragraph } = Typography; interface Project { id: string; @@ -273,331 +253,20 @@ const projectsData: Project[] = [ ]; const ProjectsShowcase: React.FC = () => { - const [currentIndex, setCurrentIndex] = useState(0); - const [visibleProjects, setVisibleProjects] = useState([]); - const [selectedProject, setSelectedProject] = useState(null); - const [isModalVisible, setIsModalVisible] = useState(false); - const controls = useAnimation(); - - // Determine number of projects to show based on screen width - const [projectsPerView, setProjectsPerView] = useState(3); - - useEffect(() => { - const handleResize = () => { - if (window.innerWidth < 768) { - setProjectsPerView(1); - } else if (window.innerWidth < 992) { - setProjectsPerView(2); - } else { - setProjectsPerView(3); - } - }; - - // Set initial state - handleResize(); - - window.addEventListener("resize", handleResize); - return () => window.removeEventListener("resize", handleResize); - }, []); - - useEffect(() => { - // Update visible projects whenever currentIndex or projectsPerView changes - setVisibleProjects( - projectsData.slice(currentIndex, currentIndex + projectsPerView) - ); - }, [currentIndex, projectsPerView]); - - const handleNext = async () => { - if (currentIndex + projectsPerView < projectsData.length) { - await controls.start({ - x: "-100%", - opacity: 0, - transition: { duration: 0.3 }, - }); - setCurrentIndex((prev) => prev + 1); - controls.start({ - x: 0, - opacity: 1, - transition: { duration: 0.3 }, - }); - } - }; - - const handlePrev = async () => { - if (currentIndex > 0) { - await controls.start({ - x: "100%", - opacity: 0, - transition: { duration: 0.3 }, - }); - setCurrentIndex((prev) => prev - 1); - controls.start({ - x: 0, - opacity: 1, - transition: { duration: 0.3 }, - }); - } - }; - - const handleProjectClick = (project: Project) => { - setSelectedProject(project); - setIsModalVisible(true); - }; - - const handleModalClose = () => { - setIsModalVisible(false); - setTimeout(() => { - setSelectedProject(null); - }, 300); - }; - return (
- +
Our Work Transforming ideas into powerful digital solutions - - -
- - - {visibleProjects.map((project) => ( - - - handleProjectClick(project)} - cover={ -
- {project.title} -
-
- {project.featured && ( - - )} -
- } - className={styles.projectCard} - > -
- {project.category} -
- -
- {project.technologies.map((tech) => ( - - {tech} - - ))} -
-
-
- - ))} -
-
- -
-
-
- -
+
- - {/* Project Details Modal */} - - {isModalVisible && selectedProject && ( - } - > - -
-
- - {selectedProject.title} - - - {selectedProject.category} - -
-
- {selectedProject.liveUrl && ( - - )} - {selectedProject.githubUrl && ( - - )} -
-
- -
-
- - {selectedProject.images.map((image, index) => ( -
- {`${selectedProject.title} -
- ))} -
-
- -
-
- - Project Overview - - - {selectedProject.detailedDescription} - -
- -
-
- - Key Features - -
    - {selectedProject.features.map((feature, index) => ( - - {feature} - - ))} -
-
- -
- - Project Details - -
-
- Duration: - {selectedProject.duration} -
-
- Team Size: - {selectedProject.teamSize} -
-
- Technologies: -
- {selectedProject.technologies.map((tech) => ( - - {tech} - - ))} -
-
-
-
-
-
-
-
-
- )} -
); }; diff --git a/src/app/components/ProjectsShowcase/ProjectsShowcaseClient.tsx b/src/app/components/ProjectsShowcase/ProjectsShowcaseClient.tsx new file mode 100644 index 0000000..362a29e --- /dev/null +++ b/src/app/components/ProjectsShowcase/ProjectsShowcaseClient.tsx @@ -0,0 +1,365 @@ +"use client"; + +import { + CloseOutlined, + EyeOutlined, + GithubOutlined, + LeftOutlined, + LinkOutlined, + RightOutlined, +} from "@ant-design/icons"; +import { + Badge, + Button, + Card, + Carousel, + Col, + Modal, + Row, + Tag, + Typography, +} from "antd"; +import { AnimatePresence, motion, useAnimation } from "framer-motion"; +import Image from "next/image"; +import React, { useEffect, useState } from "react"; +import styles from "./ProjectsShowcaseSelector.module.css"; + +const { Title, Paragraph, Text } = Typography; + +interface Project { + id: string; + title: string; + description: string; + imageUrl: string; + category: string; + technologies: string[]; + featured: boolean; + detailedDescription: string; + images: string[]; + liveUrl?: string; + githubUrl?: string; + features: string[]; + duration: string; + teamSize: string; +} + +interface ProjectsShowcaseClientProps { + projects: Project[]; +} + +const ProjectsShowcaseClient: React.FC = ({ + projects, +}) => { + const [currentIndex, setCurrentIndex] = useState(0); + const [visibleProjects, setVisibleProjects] = useState([]); + const [selectedProject, setSelectedProject] = useState(null); + const [isModalVisible, setIsModalVisible] = useState(false); + const controls = useAnimation(); + + // Determine number of projects to show based on screen width + const [projectsPerView, setProjectsPerView] = useState(3); + + useEffect(() => { + const handleResize = () => { + if (window.innerWidth < 768) { + setProjectsPerView(1); + } else if (window.innerWidth < 992) { + setProjectsPerView(2); + } else { + setProjectsPerView(3); + } + }; + + // Set initial state + handleResize(); + + window.addEventListener("resize", handleResize); + return () => window.removeEventListener("resize", handleResize); + }, []); + + useEffect(() => { + // Update visible projects whenever currentIndex or projectsPerView changes + setVisibleProjects( + projects.slice(currentIndex, currentIndex + projectsPerView) + ); + }, [currentIndex, projectsPerView, projects]); + + const handleNext = async () => { + if (currentIndex + projectsPerView < projects.length) { + await controls.start({ + x: "-100%", + opacity: 0, + transition: { duration: 0.3 }, + }); + setCurrentIndex((prev) => prev + 1); + controls.start({ + x: 0, + opacity: 1, + transition: { duration: 0.3 }, + }); + } + }; + + const handlePrev = async () => { + if (currentIndex > 0) { + await controls.start({ + x: "100%", + opacity: 0, + transition: { duration: 0.3 }, + }); + setCurrentIndex((prev) => prev - 1); + controls.start({ + x: 0, + opacity: 1, + transition: { duration: 0.3 }, + }); + } + }; + + const handleProjectClick = (project: Project) => { + setSelectedProject(project); + setIsModalVisible(true); + }; + + const handleModalClose = () => { + setIsModalVisible(false); + setTimeout(() => { + setSelectedProject(null); + }, 300); + }; + + return ( + <> +
+ + + {visibleProjects.map((project) => ( + + + handleProjectClick(project)} + cover={ +
+ {project.title} +
+
+ {project.featured && ( + + )} +
+ } + className={styles.projectCard} + > +
+ {project.category} +
+ +
+ {project.technologies.map((tech) => ( + + {tech} + + ))} +
+
+
+ + ))} +
+
+ +
+
+
+ +
+ +
+ + {/* Project Details Modal */} + + {isModalVisible && selectedProject && ( + } + > + +
+
+ + {selectedProject.title} + + + {selectedProject.category} + +
+
+ {selectedProject.liveUrl && ( + + )} + {selectedProject.githubUrl && ( + + )} +
+
+ +
+
+ + {selectedProject.images.map((image, index) => ( +
+ {`${selectedProject.title} +
+ ))} +
+
+ +
+
+ + Project Overview + + + {selectedProject.detailedDescription} + +
+ +
+
+ + Key Features + +
    + {selectedProject.features.map((feature, index) => ( + + {feature} + + ))} +
+
+ +
+ + Project Details + +
+
+ Duration: + {selectedProject.duration} +
+
+ Team Size: + {selectedProject.teamSize} +
+
+ Technologies: +
+ {selectedProject.technologies.map((tech) => ( + + {tech} + + ))} +
+
+
+
+
+
+
+
+
+ )} +
+ + ); +}; + +export default ProjectsShowcaseClient; diff --git a/src/app/contact/layout.tsx b/src/app/contact/layout.tsx new file mode 100644 index 0000000..1dc5357 --- /dev/null +++ b/src/app/contact/layout.tsx @@ -0,0 +1,32 @@ +import type { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Contact Us | Tech Master - Get In Touch for IT Solutions", + description: "Contact Tech Master in Dubai for innovative IT solutions, digital transformation, web development, and mobile app development. Start your project today.", + keywords: [ + "contact Tech Master", + "Dubai IT company contact", + "web development Dubai contact", + "digital transformation consultation", + "IT solutions contact", + "mobile app development Dubai", + "enterprise software consultation", + "tech agency Dubai contact" + ], + openGraph: { + title: "Contact Us | Tech Master - Get In Touch for IT Solutions", + description: "Contact Tech Master in Dubai for innovative IT solutions, digital transformation, and mobile app development.", + url: "https://tech-masters.guru/contact", + }, + alternates: { + canonical: "/contact", + }, +}; + +export default function ContactLayout({ + children, +}: { + children: React.ReactNode; +}) { + return children; +} \ No newline at end of file diff --git a/src/app/contact/page.tsx b/src/app/contact/page.tsx new file mode 100644 index 0000000..13c4f53 --- /dev/null +++ b/src/app/contact/page.tsx @@ -0,0 +1,11 @@ +"use client"; + +import ContactSection from "../components/Contact/Contact"; + +export default function ContactPage() { + return ( +
+ +
+ ); +} \ No newline at end of file diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 32dd2eb..071ae3b 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -17,7 +17,78 @@ const inter = Inter({ }); export const metadata: Metadata = { - title: "Tech Master | Dubai To Stars", + title: "Tech Master | Dubai To Stars - Award-Winning IT Solutions", + description: "Tech Master is an award-winning Dubai-based technology agency specializing in digital transformation, web development, mobile apps, AI solutions, and enterprise software. From zero to hero, we create cutting-edge digital experiences for ambitious businesses.", + keywords: [ + "Dubai IT solutions", + "digital transformation", + "web development Dubai", + "mobile app development", + "AI solutions", + "enterprise software", + "ERP systems", + "e-commerce development", + "financial solutions", + "legal software", + "business intelligence", + "cloud migration", + "cybersecurity", + "blockchain development", + "IoT solutions", + "tech agency Dubai", + "software development UAE" + ], + authors: [{ name: "Tech Master" }], + creator: "Tech Master", + publisher: "Tech Master", + formatDetection: { + email: false, + address: false, + telephone: false, + }, + metadataBase: new URL("https://tech-masters.guru"), + alternates: { + canonical: "/", + }, + openGraph: { + title: "Tech Master | Dubai To Stars - Award-Winning IT Solutions", + description: "Award-winning Dubai-based technology agency specializing in digital transformation, web development, mobile apps, AI solutions, and enterprise software.", + url: "https://tech-masters.guru", + siteName: "Tech Master", + images: [ + { + url: "https://tech-masters.guru/og-image.jpg", + width: 1200, + height: 630, + alt: "Tech Master - Dubai To Stars", + }, + ], + locale: "en_US", + type: "website", + }, + twitter: { + card: "summary_large_image", + title: "Tech Master | Dubai To Stars - Award-Winning IT Solutions", + description: "Award-winning Dubai-based technology agency specializing in digital transformation and innovative IT solutions.", + images: ["https://tech-masters.guru/twitter-image.jpg"], + creator: "@techmasterdubai", + }, + robots: { + index: true, + follow: true, + googleBot: { + index: true, + follow: true, + "max-video-preview": -1, + "max-image-preview": "large", + "max-snippet": -1, + }, + }, + verification: { + google: "your-google-verification-code", + yandex: "your-yandex-verification-code", + yahoo: "your-yahoo-verification-code", + }, }; export default function RootLayout({ @@ -37,7 +108,36 @@ export default function RootLayout({ src="https://threejs.org/examples/js/libs/stats.min.js" async > - {/* Orbitron Font */} + + {/* Structured Data */} +