This commit is contained in:
yznahmad 2025-03-04 01:51:39 +03:00
parent bc331bd0c2
commit 1a6291ace5
37 changed files with 1299 additions and 103 deletions

209
app/about/page.js Normal file
View File

@ -0,0 +1,209 @@
import Image from "next/image";
import Link from "next/link";
import { FadeIn, SlideInLeft, SlideInRight, ScaleIn, StaggerContainer, StaggerItem, HoverScale, PageTransition } from "@/components/Motion";
export default function About() {
// Features data from info.txt
const features = [
{
title: "Innovation",
description: "We stay ahead of the curve with cutting-edge technologies and modern development practices.",
icon: "/images/innovation2.jpg"
},
{
title: "Experience",
description: "Our team brings years of expertise in web, mobile, and cloud development solutions.",
icon: "/images/dev.jpg"
},
{
title: "Quality",
description: "We deliver robust, scalable, and high-performance solutions that exceed expectations.",
icon: "/images/innovation.jpg"
},
{
title: "Support",
description: "24/7 technical support and maintenance to ensure your systems run smoothly.",
icon: "/images/support.jpg"
}
];
// Team members data from info.txt
const team = [
{
name: "John Doe",
role: "CEO & Founder",
bio: "15+ years of experience in tech leadership and innovation.",
image: "/images/webapps.jpg"
},
{
name: "Jane Smith",
role: "Lead Developer",
bio: "Expert in full-stack development and cloud architecture.",
image: "/images/websiedesign.jpg"
},
{
name: "Mike Johnson",
role: "Design Director",
bio: "Award-winning UI/UX designer with a passion for user-centric design.",
image: "/images/coding3.jpg"
},
{
name: "Sarah Wilson",
role: "Project Manager",
bio: "Certified PMP with extensive experience in agile methodologies.",
image: "/images/hosting.jpg"
}
];
return (
<PageTransition>
<div className="flex flex-col w-full">
{/* Hero Section */}
<FadeIn>
<section className="relative bg-gray-900 text-white py-16 md:py-24">
<div className="absolute inset-0 z-0 opacity-30">
<Image
src="/images/coding3.jpg"
alt="About Us Background"
fill
style={{objectFit: 'cover'}}
priority
/>
</div>
<div className="container mx-auto px-4 sm:px-6 lg:px-8 relative z-10">
<div className="max-w-3xl">
<SlideInLeft delay={0.2}>
<h1 className="text-3xl md:text-4xl lg:text-5xl font-bold mb-6">About YznApps</h1>
</SlideInLeft>
<SlideInLeft delay={0.4}>
<p className="text-lg md:text-xl mb-8">We're a team of passionate IT professionals dedicated to delivering exceptional technology solutions</p>
</SlideInLeft>
</div>
</div>
</section>
</FadeIn>
{/* Company Overview */}
<FadeIn delay={0.2}>
<section className="py-16 bg-white dark:bg-gray-900">
<div className="container mx-auto px-4 sm:px-6 lg:px-8">
<div className="flex flex-col md:flex-row gap-12 items-center">
<div className="w-full md:w-1/2 h-64 md:h-96 relative rounded-lg overflow-hidden shadow-lg">
<Image
src="/images/webdevelopment.jpg"
alt="YznApps Team"
fill
style={{objectFit: 'cover'}}
/>
</div>
<div className="w-full md:w-1/2 space-y-6">
<SlideInRight delay={0.3}>
<h2 className="text-3xl md:text-4xl font-bold text-gray-900 dark:text-white">Our Story</h2>
</SlideInRight>
<SlideInRight delay={0.4}>
<p className="text-lg text-gray-600 dark:text-gray-300">
YznApps was founded with a simple mission: to provide businesses with innovative, reliable, and scalable IT solutions.
Over the years, we've grown from a small team of developers to a comprehensive IT service provider, helping businesses
of all sizes transform their digital presence and operations.
</p>
</SlideInRight>
<SlideInRight delay={0.5}>
<p className="text-lg text-gray-600 dark:text-gray-300">
We believe in building long-term relationships with our clients, understanding their unique challenges, and delivering
solutions that drive real business value. Our team combines technical expertise with industry knowledge to ensure that
every project we undertake exceeds expectations.
</p>
</SlideInRight>
</div>
</div>
</div>
</section>
</FadeIn>
{/* Core Values/Features */}
<FadeIn delay={0.3}>
<section className="py-16 bg-gray-50 dark:bg-gray-800">
<div className="container mx-auto px-4 sm:px-6 lg:px-8">
<div className="text-center mb-12">
<h2 className="text-3xl md:text-4xl font-bold text-gray-900 dark:text-white mb-4">Our Core Values</h2>
<p className="text-lg text-gray-600 dark:text-gray-300 max-w-2xl mx-auto">The principles that guide everything we do</p>
</div>
<StaggerContainer className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-8">
{features.map((feature, index) => (
<StaggerItem key={index}>
<ScaleIn delay={index * 0.1}>
<div className="bg-white dark:bg-gray-700 rounded-lg overflow-hidden shadow-md hover:shadow-lg transition duration-300">
<div className="h-40 relative">
<Image
src={feature.icon}
alt={feature.title}
fill
style={{objectFit: 'cover'}}
/>
</div>
<div className="p-6">
<h3 className="text-xl font-bold text-gray-900 dark:text-white mb-2">{feature.title}</h3>
<p className="text-gray-600 dark:text-gray-300">{feature.description}</p>
</div>
</div>
</ScaleIn>
</StaggerItem>
))}
</StaggerContainer>
</div>
</section>
</FadeIn>
{/* Team Section */}
<FadeIn delay={0.4}>
<section className="py-16 bg-white dark:bg-gray-900">
<div className="container mx-auto px-4 sm:px-6 lg:px-8">
<div className="text-center mb-12">
<h2 className="text-3xl md:text-4xl font-bold text-gray-900 dark:text-white mb-4">Meet Our Team</h2>
<p className="text-lg text-gray-600 dark:text-gray-300 max-w-2xl mx-auto">The experts behind our success</p>
</div>
<StaggerContainer className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-8">
{team.map((member, index) => (
<StaggerItem key={index}>
<HoverScale>
<div className="bg-gray-50 dark:bg-gray-800 rounded-lg overflow-hidden shadow-md hover:shadow-lg transition duration-300">
<div className="h-64 relative">
<Image
src={member.image}
alt={member.name}
fill
style={{objectFit: 'cover'}}
/>
</div>
<div className="p-6">
<h3 className="text-xl font-bold text-gray-900 dark:text-white mb-1">{member.name}</h3>
<p className="text-blue-600 dark:text-blue-400 font-medium mb-3">{member.role}</p>
<p className="text-gray-600 dark:text-gray-300">{member.bio}</p>
</div>
</div>
</HoverScale>
</StaggerItem>
))}
</StaggerContainer>
</div>
</section>
</FadeIn>
{/* Call to Action */}
<FadeIn delay={0.5}>
<section className="py-16 bg-blue-600 text-white">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 text-center">
<h2 className="text-3xl md:text-4xl font-bold mb-6">Ready to Work With Us?</h2>
<p className="text-xl mb-8 max-w-2xl mx-auto">Contact our team today to discuss how we can help with your IT needs</p>
<HoverScale>
<Link href="/contact" className="bg-white text-blue-600 hover:bg-gray-100 font-semibold py-3 px-8 rounded-md transition duration-300 inline-block">
Get in Touch
</Link>
</HoverScale>
</div>
</section>
</FadeIn>
</div>
</PageTransition>
);
}

238
app/contact/page.js Normal file
View File

@ -0,0 +1,238 @@
import Image from "next/image";
import Link from "next/link";
import { FadeIn, SlideInLeft, SlideInRight, ScaleIn, StaggerContainer, StaggerItem, HoverScale, PageTransition } from "@/components/Motion";
export default function Contact() {
// Contact information from info.txt
const contactInfo = {
address: "Al Hashmi Street, Irbid City, 21110",
email: "contact@yznapps.com",
phone: "+962 (781) 881-280"
};
return (
<PageTransition>
<div className="flex flex-col w-full">
{/* Hero Section */}
<FadeIn>
<section className="relative bg-gray-900 text-white py-16 md:py-24">
<div className="absolute inset-0 z-0 opacity-30">
<Image
src="/images/forex2.jpg"
alt="Contact Us Background"
fill
style={{objectFit: 'cover'}}
priority
/>
</div>
<div className="container mx-auto px-4 sm:px-6 lg:px-8 relative z-10">
<div className="max-w-3xl">
<SlideInLeft delay={0.2}>
<h1 className="text-3xl md:text-4xl lg:text-5xl font-bold mb-6">Contact Us</h1>
</SlideInLeft>
<SlideInLeft delay={0.4}>
<p className="text-lg md:text-xl mb-8">Get in touch with our team to discuss your IT needs</p>
</SlideInLeft>
</div>
</div>
</section>
</FadeIn>
{/* Contact Section */}
<FadeIn delay={0.3}>
<section className="py-16 bg-white dark:bg-gray-900">
<div className="container mx-auto px-4 sm:px-6 lg:px-8">
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12">
{/* Contact Form */}
<SlideInLeft delay={0.4}>
<div className="bg-gray-50 dark:bg-gray-800 p-8 rounded-lg shadow-md">
<h2 className="text-2xl md:text-3xl font-bold text-gray-900 dark:text-white mb-6">Send Us a Message</h2>
<form className="space-y-6">
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
<div>
<label htmlFor="name" className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">Your Name</label>
<input
type="text"
id="name"
name="name"
className="w-full px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white"
placeholder="John Doe"
required
/>
</div>
<div>
<label htmlFor="email" className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">Your Email</label>
<input
type="email"
id="email"
name="email"
className="w-full px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white"
placeholder="john@example.com"
required
/>
</div>
</div>
<div>
<label htmlFor="subject" className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">Subject</label>
<input
type="text"
id="subject"
name="subject"
className="w-full px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white"
placeholder="How can we help you?"
required
/>
</div>
<div>
<label htmlFor="message" className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">Message</label>
<textarea
id="message"
name="message"
rows="5"
className="w-full px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white"
placeholder="Tell us about your project..."
required
></textarea>
</div>
<div>
<HoverScale>
<button
type="submit"
className="w-full bg-blue-600 hover:bg-blue-700 text-white font-semibold py-3 px-6 rounded-md transition duration-300"
>
Send Message
</button>
</HoverScale>
</div>
</form>
</div>
</SlideInLeft>
{/* Contact Information */}
<SlideInRight delay={0.4}>
<div className="flex flex-col justify-between">
<div>
<h2 className="text-2xl md:text-3xl font-bold text-gray-900 dark:text-white mb-6">Contact Information</h2>
<p className="text-gray-600 dark:text-gray-300 mb-8">
Have questions or need assistance? Our team is here to help. Reach out to us using any of the methods below.
</p>
<StaggerContainer className="space-y-6">
<StaggerItem>
<div className="flex items-start">
<div className="flex-shrink-0 h-10 w-10 rounded-full bg-blue-100 dark:bg-blue-900 flex items-center justify-center">
<svg className="h-5 w-5 text-blue-600 dark:text-blue-400" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z" />
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M15 11a3 3 0 11-6 0 3 3 0 016 0z" />
</svg>
</div>
<div className="ml-4">
<h3 className="text-lg font-medium text-gray-900 dark:text-white">Address</h3>
<p className="mt-1 text-gray-600 dark:text-gray-300">{contactInfo.address}</p>
</div>
</div>
</StaggerItem>
<StaggerItem>
<div className="flex items-start">
<div className="flex-shrink-0 h-10 w-10 rounded-full bg-blue-100 dark:bg-blue-900 flex items-center justify-center">
<svg className="h-5 w-5 text-blue-600 dark:text-blue-400" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" />
</svg>
</div>
<div className="ml-4">
<h3 className="text-lg font-medium text-gray-900 dark:text-white">Email</h3>
<p className="mt-1 text-gray-600 dark:text-gray-300">
<a href={`mailto:${contactInfo.email}`} className="hover:text-blue-600 dark:hover:text-blue-400">
{contactInfo.email}
</a>
</p>
</div>
</div>
</StaggerItem>
<StaggerItem>
<div className="flex items-start">
<div className="flex-shrink-0 h-10 w-10 rounded-full bg-blue-100 dark:bg-blue-900 flex items-center justify-center">
<svg className="h-5 w-5 text-blue-600 dark:text-blue-400" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z" />
</svg>
</div>
<div className="ml-4">
<h3 className="text-lg font-medium text-gray-900 dark:text-white">Phone</h3>
<p className="mt-1 text-gray-600 dark:text-gray-300">
<a href={`tel:${contactInfo.phone}`} className="hover:text-blue-600 dark:hover:text-blue-400">
{contactInfo.phone}
</a>
</p>
</div>
</div>
</StaggerItem>
</StaggerContainer>
</div>
{/* Map or Image */}
<ScaleIn delay={0.6}>
<div className="mt-12 h-64 relative rounded-lg overflow-hidden shadow-lg">
<Image
src="/images/website.jpg"
alt="Office Location"
fill
style={{objectFit: 'cover'}}
/>
<div className="absolute inset-0 bg-blue-600 bg-opacity-20 flex items-center justify-center">
<span className="text-white text-lg font-semibold px-4 py-2 bg-black bg-opacity-50 rounded-md">Our Office Location</span>
</div>
</div>
</ScaleIn>
</div>
</SlideInRight>
</div>
</div>
</section>
</FadeIn>
{/* FAQ Section */}
<FadeIn delay={0.5}>
<section className="py-16 bg-gray-50 dark:bg-gray-800">
<div className="container mx-auto px-4 sm:px-6 lg:px-8">
<div className="text-center mb-12">
<h2 className="text-3xl md:text-4xl font-bold text-gray-900 dark:text-white mb-4">Frequently Asked Questions</h2>
<p className="text-lg text-gray-600 dark:text-gray-300 max-w-2xl mx-auto">Find quick answers to common questions</p>
</div>
<div className="max-w-3xl mx-auto space-y-6">
<StaggerContainer className="space-y-6">
<StaggerItem>
<div className="bg-white dark:bg-gray-700 rounded-lg p-6 shadow-md">
<h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">What services do you offer?</h3>
<p className="text-gray-600 dark:text-gray-300">We offer a comprehensive range of IT services including web development, mobile app development, web hosting, CMS solutions, and managed VPS services.</p>
</div>
</StaggerItem>
<StaggerItem>
<div className="bg-white dark:bg-gray-700 rounded-lg p-6 shadow-md">
<h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">How much does a typical project cost?</h3>
<p className="text-gray-600 dark:text-gray-300">Project costs vary depending on requirements, complexity, and timeline. We provide detailed quotes after an initial consultation to understand your specific needs.</p>
</div>
</StaggerItem>
<StaggerItem>
<div className="bg-white dark:bg-gray-700 rounded-lg p-6 shadow-md">
<h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">How long does it take to complete a project?</h3>
<p className="text-gray-600 dark:text-gray-300">Project timelines depend on scope and complexity. A simple website might take 2-4 weeks, while complex web applications or mobile apps can take several months. We'll provide a timeline estimate during our initial discussions.</p>
</div>
</StaggerItem>
<StaggerItem>
<div className="bg-white dark:bg-gray-700 rounded-lg p-6 shadow-md">
<h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">Do you provide ongoing support after project completion?</h3>
<p className="text-gray-600 dark:text-gray-300">Yes, we offer ongoing support and maintenance packages after project completion. Our support includes bug fixes, security updates, performance optimization, and technical assistance to ensure your solution continues to run smoothly.</p>
</div>
</StaggerItem>
</StaggerContainer>
</div>
</div>
</section>
</FadeIn>
</div>
</PageTransition>
);
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 70 KiB

View File

@ -20,6 +20,10 @@ body {
font-family: Arial, Helvetica, sans-serif; font-family: Arial, Helvetica, sans-serif;
} }
.my-image {
image-resolution: from-image 300dpi;
}
@layer utilities { @layer utilities {
.text-balance { .text-balance {
text-wrap: balance; text-wrap: balance;

View File

@ -1,5 +1,8 @@
import localFont from "next/font/local"; import localFont from "next/font/local";
import "./globals.css"; import "./globals.css";
import Navbar from "../components/Navbar";
import Footer from "../components/Footer";
import MotionProvider from "../components/MotionProvider";
const geistSans = localFont({ const geistSans = localFont({
src: "./fonts/GeistVF.woff", src: "./fonts/GeistVF.woff",
@ -13,17 +16,21 @@ const geistMono = localFont({
}); });
export const metadata = { export const metadata = {
title: "Create Next App", title: "YznApps - Professional IT Solutions",
description: "Generated by create next app", description: "YznApps provides professional IT solutions including web development, mobile apps, hosting, and VPS services.",
}; };
export default function RootLayout({ children }) { export default function RootLayout({ children }) {
return ( return (
<html lang="en"> <html lang="en">
<body <body className={`${geistSans.variable} ${geistMono.variable} antialiased min-h-screen flex flex-col`}>
className={`${geistSans.variable} ${geistMono.variable} antialiased`} <Navbar />
> <main className="flex-grow pt-16">
{children} <MotionProvider>
{children}
</MotionProvider>
</main>
<Footer />
</body> </body>
</html> </html>
); );

View File

@ -1,101 +1,272 @@
import Image from "next/image"; import Image from "next/image";
import Link from "next/link";
import { FadeIn, SlideInLeft, SlideInRight, ScaleIn, StaggerContainer, StaggerItem, HoverScale, PageTransition } from "../components/Motion";
export default function Home() { export default function Home() {
return ( // Statistics data
<div className="grid grid-rows-[20px_1fr_20px] items-center justify-items-center min-h-screen p-8 pb-20 gap-16 sm:p-20 font-[family-name:var(--font-geist-sans)]"> const stats = [
<main className="flex flex-col gap-8 row-start-2 items-center sm:items-start"> { value: "100+", label: "Projects Completed" },
<Image { value: "5+", label: "Expert Team Members" },
className="dark:invert" { value: "15+", label: "Years Experience" },
src="https://nextjs.org/icons/next.svg" { value: "99%", label: "Client Satisfaction" },
alt="Next.js logo" ];
width={180}
height={38}
priority
/>
<ol className="list-inside list-decimal text-sm text-center sm:text-left font-[family-name:var(--font-geist-mono)]">
<li className="mb-2">
Get started by editing{" "}
<code className="bg-black/[.05] dark:bg-white/[.06] px-1 py-0.5 rounded font-semibold">
app/page.js
</code>
.
</li>
<li>Save and see your changes instantly.</li>
</ol>
<div className="flex gap-4 items-center flex-col sm:flex-row"> // Services overview
<a const services = [
className="rounded-full border border-solid border-transparent transition-colors flex items-center justify-center bg-foreground text-background gap-2 hover:bg-[#383838] dark:hover:bg-[#ccc] text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5" {
href="https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app" title: "Web Hosting and CMS",
target="_blank" description: "Professional web hosting and ready CMS solutions for your business",
rel="noopener noreferrer" icon: "/images/webhosting2.jpg",
> link: "/services"
<Image },
className="dark:invert" {
src="https://nextjs.org/icons/vercel.svg" title: "Custom Web Development",
alt="Vercel logomark" description: "Modern web applications with cutting-edge technologies",
width={20} icon: "/images/webapps.jpg",
height={20} link: "/services"
/> },
Deploy now {
</a> title: "Mobile App Development",
<a description: "Cross-platform and native mobile applications",
className="rounded-full border border-solid border-black/[.08] dark:border-white/[.145] transition-colors flex items-center justify-center hover:bg-[#f2f2f2] dark:hover:bg-[#1a1a1a] hover:border-transparent text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5 sm:min-w-44" icon: "/images/mobiledev.jpg",
href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app" link: "/services"
target="_blank" },
rel="noopener noreferrer" {
> title: "Managed VPS Services",
Read our docs description: "Professional server management and hosting solutions",
</a> icon: "/images/forex1.jpg",
</div> link: "/services"
</main> },
<footer className="row-start-3 flex gap-6 flex-wrap items-center justify-center"> ];
<a
className="flex items-center gap-2 hover:underline hover:underline-offset-4" // Features
href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app" const features = [
target="_blank" {
rel="noopener noreferrer" title: "Cutting-Edge Tech",
> description: "We use the latest technologies to deliver modern, scalable solutions.",
<Image icon: "/images/tech.jpg"
aria-hidden },
src="https://nextjs.org/icons/file.svg" {
alt="File icon" title: "Expert Team",
width={16} description: "Our team of professionals brings years of leading industry experience.",
height={16} icon: "/images/dev.jpg"
/> },
Learn {
</a> title: "24/7 Support",
<a description: "Round-the-clock technical support to ensure your systems run smoothly.",
className="flex items-center gap-2 hover:underline hover:underline-offset-4" icon: "/images/support.jpg"
href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app" },
target="_blank" {
rel="noopener noreferrer" title: "Tailored Solutions",
> description: "Custom solutions designed specifically for your business needs.",
<Image icon: "/images/coding.jpg"
aria-hidden },
src="https://nextjs.org/icons/window.svg" ];
alt="Window icon"
width={16} // Testimonials
height={16} const testimonials = [
/> {
Examples quote: "YznApps transformed our online presence with a beautiful, functional website that perfectly represents our brand.",
</a> author: "Sarah Johnson",
<a company: "TechStart Inc."
className="flex items-center gap-2 hover:underline hover:underline-offset-4" },
href="https://nextjs.org?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app" {
target="_blank" quote: "The mobile app developed by YznApps helped us increase customer engagement by 200%. Highly recommended!",
rel="noopener noreferrer" author: "Michael Chen",
> company: "GrowthBox"
<Image },
aria-hidden {
src="https://nextjs.org/icons/globe.svg" quote: "Their VPS hosting service is reliable, fast, and their support team is always available when we need them.",
alt="Globe icon" author: "David Williams",
width={16} company: "DataFlow Systems"
height={16} },
/> ];
Go to nextjs.org
</a> return (
</footer> <PageTransition>
</div> <div className="flex flex-col w-full">
{/* Hero Section */}
<FadeIn>
<section className="relative bg-gray-900 text-white py-20 md:py-28">
<div className="absolute inset-0 z-0 opacity-30">
<Image
src="/images/herosectionimage.jpg"
alt="IT Solutions Background"
fill
style={{objectFit: 'cover'}}
priority
/>
</div>
<div className="container mx-auto px-4 sm:px-6 lg:px-8 relative z-10">
<div className="max-w-3xl">
<SlideInLeft delay={0.2}>
<h1 className="text-4xl md:text-5xl lg:text-6xl font-bold mb-6">Professional IT Solutions for Your Business</h1>
</SlideInLeft>
<SlideInLeft delay={0.4}>
<p className="text-xl md:text-2xl mb-8">Web development, mobile apps, hosting, and VPS services tailored to your needs</p>
</SlideInLeft>
<SlideInLeft delay={0.6}>
<div className="flex flex-wrap gap-4">
<HoverScale>
<Link href="/services" className="bg-blue-600 hover:bg-blue-700 text-white font-semibold py-3 px-6 rounded-md transition duration-300">
Our Services
</Link>
</HoverScale>
<HoverScale>
<Link href="/contact" className="bg-transparent hover:bg-white/10 text-white font-semibold py-3 px-6 rounded-md border border-white transition duration-300">
Contact Us
</Link>
</HoverScale>
</div>
</SlideInLeft>
</div>
</div>
</section>
</FadeIn>
{/* Statistics Section */}
<FadeIn delay={0.2}>
<section className="py-16 bg-gray-50 dark:bg-gray-800">
<div className="container mx-auto px-4 sm:px-6 lg:px-8">
<div className="text-center mb-12">
<h2 className="text-3xl md:text-4xl font-bold text-gray-900 dark:text-white mb-4">Our Impact in Numbers</h2>
<p className="text-lg text-gray-600 dark:text-gray-300 max-w-2xl mx-auto">We've helped businesses of all sizes achieve their technology goals</p>
</div>
<StaggerContainer className="grid grid-cols-2 md:grid-cols-4 gap-8">
{stats.map((stat, index) => (
<StaggerItem key={index}>
<ScaleIn delay={index * 0.1}>
<div className="text-center p-6 bg-white dark:bg-gray-700 rounded-lg shadow-md hover:shadow-lg transition duration-300">
<div className="text-3xl md:text-4xl font-bold text-blue-600 dark:text-blue-400 mb-2">{stat.value}</div>
<div className="text-gray-600 dark:text-gray-300">{stat.label}</div>
</div>
</ScaleIn>
</StaggerItem>
))}
</StaggerContainer>
</div>
</section>
</FadeIn>
{/* Services Section */}
<FadeIn delay={0.3}>
<section className="py-16 bg-white dark:bg-gray-900">
<div className="container mx-auto px-4 sm:px-6 lg:px-8">
<div className="text-center mb-12">
<h2 className="text-3xl md:text-4xl font-bold text-gray-900 dark:text-white mb-4">Our Services</h2>
<p className="text-lg text-gray-600 dark:text-gray-300 max-w-2xl mx-auto">Comprehensive IT solutions to help your business thrive</p>
</div>
<StaggerContainer className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-8">
{services.map((service, index) => (
<StaggerItem key={index}>
<HoverScale>
<div className="bg-gray-50 dark:bg-gray-800 rounded-lg overflow-hidden shadow-md hover:shadow-lg transition duration-300 h-full">
<div className="h-48 relative">
<Image
src={service.icon}
alt={service.title}
fill
style={{objectFit: 'cover'}}
/>
</div>
<div className="p-6">
<h3 className="text-xl font-bold text-gray-900 dark:text-white mb-2">{service.title}</h3>
<p className="text-gray-600 dark:text-gray-300 mb-4">{service.description}</p>
<Link href={service.link} className="text-blue-600 dark:text-blue-400 font-medium hover:underline">
Learn more
</Link>
</div>
</div>
</HoverScale>
</StaggerItem>
))}
</StaggerContainer>
<div className="text-center mt-10">
<HoverScale>
<Link href="/services" className="inline-block bg-blue-600 hover:bg-blue-700 text-white font-semibold py-3 px-6 rounded-md transition duration-300">
View All Services
</Link>
</HoverScale>
</div>
</div>
</section>
</FadeIn>
{/* Features Section */}
<FadeIn delay={0.4}>
<section className="py-16 bg-gray-50 dark:bg-gray-800">
<div className="container mx-auto px-4 sm:px-6 lg:px-8">
<div className="text-center mb-12">
<h2 className="text-3xl md:text-4xl font-bold text-gray-900 dark:text-white mb-4">Why Choose Us</h2>
<p className="text-lg text-gray-600 dark:text-gray-300 max-w-2xl mx-auto">What sets us apart from the competition</p>
</div>
<StaggerContainer className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-8">
{features.map((feature, index) => (
<StaggerItem key={index}>
<ScaleIn delay={index * 0.1}>
<div className="bg-white dark:bg-gray-700 rounded-lg overflow-hidden shadow-md hover:shadow-lg transition duration-300 h-full">
<div className="h-40 relative">
<Image
src={feature.icon}
alt={feature.title}
fill
style={{objectFit: 'cover'}}
/>
</div>
<div className="p-6">
<h3 className="text-xl font-bold text-gray-900 dark:text-white mb-2">{feature.title}</h3>
<p className="text-gray-600 dark:text-gray-300">{feature.description}</p>
</div>
</div>
</ScaleIn>
</StaggerItem>
))}
</StaggerContainer>
</div>
</section>
</FadeIn>
{/* Testimonials Section */}
<FadeIn delay={0.5}>
<section className="py-16 bg-white dark:bg-gray-900">
<div className="container mx-auto px-4 sm:px-6 lg:px-8">
<div className="text-center mb-12">
<h2 className="text-3xl md:text-4xl font-bold text-gray-900 dark:text-white mb-4">What Our Clients Say</h2>
<p className="text-lg text-gray-600 dark:text-gray-300 max-w-2xl mx-auto">Don't just take our word for it</p>
</div>
<StaggerContainer className="grid grid-cols-1 md:grid-cols-3 gap-8">
{testimonials.map((testimonial, index) => (
<StaggerItem key={index}>
<div className="bg-gray-50 dark:bg-gray-800 p-6 rounded-lg shadow-md">
<svg className="h-8 w-8 text-blue-600 dark:text-blue-400 mb-4" fill="currentColor" viewBox="0 0 24 24">
<path d="M14.017 21v-7.391c0-5.704 3.731-9.57 8.983-10.609l.995 2.151c-2.432.917-3.995 3.638-3.995 5.849h4v10h-9.983zm-14.017 0v-7.391c0-5.704 3.748-9.57 9-10.609l.996 2.151c-2.433.917-3.996 3.638-3.996 5.849h3.983v10h-9.983z" />
</svg>
<p className="text-gray-600 dark:text-gray-300 mb-4 italic">{testimonial.quote}</p>
<div className="font-medium text-gray-900 dark:text-white">{testimonial.author}</div>
<div className="text-sm text-gray-500 dark:text-gray-400">{testimonial.company}</div>
</div>
</StaggerItem>
))}
</StaggerContainer>
</div>
</section>
</FadeIn>
{/* Call to Action */}
<FadeIn delay={0.6}>
<section className="py-16 bg-blue-600 text-white">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 text-center">
<h2 className="text-3xl md:text-4xl font-bold mb-6">Ready to Transform Your Business?</h2>
<p className="text-xl mb-8 max-w-2xl mx-auto">Contact us today to discuss how our IT solutions can help you achieve your goals</p>
<HoverScale>
<Link href="/contact" className="bg-white text-blue-600 hover:bg-gray-100 font-semibold py-3 px-8 rounded-md transition duration-300 inline-block">
Get Started
</Link>
</HoverScale>
</div>
</section>
</FadeIn>
</div>
</PageTransition>
); );
} }

169
app/services/page.js Normal file
View File

@ -0,0 +1,169 @@
import Image from "next/image";
import Link from "next/link";
import { FadeIn, SlideInLeft, SlideInRight, ScaleIn, StaggerContainer, StaggerItem, HoverScale, PageTransition } from "@/components/Motion";
export default function Services() {
// Service categories data from info.txt
const serviceCategories = [
{
title: "Web Hosting & CMS Solutions",
description: "Professional hosting and content management system implementations",
services: [
"WordPress - Industry-leading CMS for blogs and business websites",
"Joomla - Flexible CMS for complex content structures",
"Drupal - Enterprise-grade CMS for large organizations",
"Moodle - Specialized learning management system",
"Custom hosting solutions with expert support"
],
technologies: "WordPress • Joomla • Drupal • Moodle",
image: "/images/webhosting2.jpg"
},
{
title: "Custom Web Development",
description: "Modern web applications built with cutting-edge frameworks",
services: [
"Laravel - PHP framework for robust web applications",
".NET - Enterprise solutions with Microsoft technology",
"Node.js/Express - Fast and scalable JavaScript backend",
"Next.js & React - Modern frontend development",
"Django & Flask - Python-based web solutions"
],
technologies: "Laravel • .NET • Node.js • Next.js • Django • Flask",
image: "/images/customsystems.jpg"
},
{
title: "Mobile App Development",
description: "Cross-platform and native mobile applications",
services: [
"React Native - Cross-platform apps with native performance",
"Flutter - Beautiful and fast mobile applications",
"Native iOS and Android development",
"Progressive Web Apps (PWA)",
"Mobile app maintenance and updates"
],
technologies: "React Native • Flutter • iOS • Android • PWA",
image: "/images/mobiledev.jpg"
},
{
title: "Managed VPS Services",
description: "Professional server management and hosting solutions",
services: [
"Linux VPS - Ubuntu, CentOS, and Debian servers",
"Windows Server VPS - Professional Windows hosting",
"Forex VPS - Low-latency trading solutions",
"Cloud VPS - Scalable cloud hosting",
"Managed security and backups"
],
technologies: "Linux • Windows Server • Cloud • DevOps",
image: "/images/forex1.jpg"
}
];
return (
<PageTransition>
<div className="flex flex-col w-full">
{/* Hero Section */}
<FadeIn>
<section className="relative bg-gray-900 text-white py-16 md:py-24">
<div className="absolute inset-0 z-0 opacity-30">
<Image
src="/images/website.jpg"
alt="IT Services Background"
fill
style={{objectFit: 'cover'}}
priority
/>
</div>
<div className="container mx-auto px-4 sm:px-6 lg:px-8 relative z-10">
<div className="max-w-3xl">
<SlideInLeft delay={0.2}>
<h1 className="text-3xl md:text-4xl lg:text-5xl font-bold mb-6">Our Services</h1>
</SlideInLeft>
<SlideInLeft delay={0.4}>
<p className="text-lg md:text-xl mb-8">Comprehensive IT solutions tailored to your business needs</p>
</SlideInLeft>
</div>
</div>
</section>
</FadeIn>
{/* Services Categories */}
<FadeIn delay={0.3}>
<section className="py-16 bg-white dark:bg-gray-900">
<div className="container mx-auto px-4 sm:px-6 lg:px-8">
<div className="text-center mb-12">
<h2 className="text-3xl md:text-4xl font-bold text-gray-900 dark:text-white mb-4">What We Offer</h2>
<p className="text-lg text-gray-600 dark:text-gray-300 max-w-2xl mx-auto">Explore our range of professional IT services</p>
</div>
<div className="space-y-16">
{serviceCategories.map((category, index) => (
<FadeIn key={index} delay={0.2 * index}>
<div className={`flex flex-col ${index % 2 === 1 ? 'md:flex-row-reverse' : 'md:flex-row'} gap-8 items-center`}>
<div className="w-full md:w-1/2 h-64 md:h-96 relative rounded-lg overflow-hidden shadow-lg">
<Image
src={category.image}
alt={category.title}
fill
style={{objectFit: 'cover'}}
/>
</div>
<div className="w-full md:w-1/2 space-y-4">
<SlideInLeft delay={0.3 + (0.1 * index)}>
<h3 className="text-2xl md:text-3xl font-bold text-gray-900 dark:text-white">{category.title}</h3>
<p className="text-lg text-gray-600 dark:text-gray-300">{category.description}</p>
</SlideInLeft>
<ScaleIn delay={0.4 + (0.1 * index)}>
<div className="bg-gray-50 dark:bg-gray-800 p-6 rounded-lg shadow-md">
<h4 className="text-xl font-semibold text-gray-900 dark:text-white mb-4">Services Include:</h4>
<StaggerContainer>
<ul className="space-y-2">
{category.services.map((service, i) => (
<StaggerItem key={i}>
<li className="flex items-start">
<svg className="h-6 w-6 text-blue-600 dark:text-blue-400 mr-2 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M5 13l4 4L19 7" />
</svg>
<span className="text-gray-700 dark:text-gray-300">{service}</span>
</li>
</StaggerItem>
))}
</ul>
</StaggerContainer>
</div>
</ScaleIn>
<SlideInLeft delay={0.5 + (0.1 * index)}>
<div className="pt-4">
<p className="text-sm font-medium text-gray-500 dark:text-gray-400">Technologies:</p>
<p className="text-gray-700 dark:text-gray-300">{category.technologies}</p>
</div>
</SlideInLeft>
</div>
</div>
</FadeIn>
))}
</div>
</div>
</section>
</FadeIn>
{/* Call to Action */}
<FadeIn delay={0.5}>
<section className="py-16 bg-blue-600 text-white">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 text-center">
<h2 className="text-3xl md:text-4xl font-bold mb-6">Ready to Get Started?</h2>
<p className="text-xl mb-8 max-w-2xl mx-auto">Contact us today to discuss your project requirements</p>
<HoverScale>
<Link href="/contact" className="bg-white text-blue-600 hover:bg-gray-100 font-semibold py-3 px-8 rounded-md transition duration-300 inline-block">
Contact Us
</Link>
</HoverScale>
</div>
</section>
</FadeIn>
</div>
</PageTransition>
);
}

135
components/Footer.js Normal file
View File

@ -0,0 +1,135 @@
import Link from 'next/link';
import Image from 'next/image';
export default function Footer() {
return (
<footer className="bg-gray-100 dark:bg-gray-900 pt-12 pb-8">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div className="grid grid-cols-1 md:grid-cols-4 gap-8">
{/* Company Info */}
<div className="col-span-1">
<div className="flex items-center mb-4">
<Image
src="/images/logo.png"
alt="YznApps Logo"
width={40}
height={40}
className="h-10 w-auto"
/>
<span className="ml-2 text-xl font-bold text-gray-800 dark:text-white"></span>
</div>
<p className="text-gray-600 dark:text-gray-400 text-sm mb-4">
Professional IT solutions for businesses of all sizes. We deliver innovative technology services to help your business grow.
</p>
<div className="flex space-x-4">
<a href="#" className="text-gray-500 hover:text-blue-600 dark:text-gray-400 dark:hover:text-blue-400">
<span className="sr-only">Facebook</span>
<svg className="h-6 w-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
<path fillRule="evenodd" d="M22 12c0-5.523-4.477-10-10-10S2 6.477 2 12c0 4.991 3.657 9.128 8.438 9.878v-6.987h-2.54V12h2.54V9.797c0-2.506 1.492-3.89 3.777-3.89 1.094 0 2.238.195 2.238.195v2.46h-1.26c-1.243 0-1.63.771-1.63 1.562V12h2.773l-.443 2.89h-2.33v6.988C18.343 21.128 22 16.991 22 12z" clipRule="evenodd" />
</svg>
</a>
<a href="#" className="text-gray-500 hover:text-blue-600 dark:text-gray-400 dark:hover:text-blue-400">
<span className="sr-only">Twitter</span>
<svg className="h-6 w-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
<path d="M8.29 20.251c7.547 0 11.675-6.253 11.675-11.675 0-.178 0-.355-.012-.53A8.348 8.348 0 0022 5.92a8.19 8.19 0 01-2.357.646 4.118 4.118 0 001.804-2.27 8.224 8.224 0 01-2.605.996 4.107 4.107 0 00-6.993 3.743 11.65 11.65 0 01-8.457-4.287 4.106 4.106 0 001.27 5.477A4.072 4.072 0 012.8 9.713v.052a4.105 4.105 0 003.292 4.022 4.095 4.095 0 01-1.853.07 4.108 4.108 0 003.834 2.85A8.233 8.233 0 012 18.407a11.616 11.616 0 006.29 1.84" />
</svg>
</a>
<a href="#" className="text-gray-500 hover:text-blue-600 dark:text-gray-400 dark:hover:text-blue-400">
<span className="sr-only">LinkedIn</span>
<svg className="h-6 w-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
<path fillRule="evenodd" d="M19 0h-14c-2.761 0-5 2.239-5 5v14c0 2.761 2.239 5 5 5h14c2.762 0 5-2.239 5-5v-14c0-2.761-2.238-5-5-5zm-11 19h-3v-11h3v11zm-1.5-12.268c-.966 0-1.75-.79-1.75-1.764s.784-1.764 1.75-1.764 1.75.79 1.75 1.764-.783 1.764-1.75 1.764zm13.5 12.268h-3v-5.604c0-3.368-4-3.113-4 0v5.604h-3v-11h3v1.765c1.396-2.586 7-2.777 7 2.476v6.759z" clipRule="evenodd" />
</svg>
</a>
</div>
</div>
{/* Quick Links */}
<div className="col-span-1">
<h3 className="text-sm font-semibold text-gray-800 dark:text-white uppercase tracking-wider mb-4">Quick Links</h3>
<ul className="space-y-2">
<li>
<Link href="/" className="text-gray-600 hover:text-blue-600 dark:text-gray-400 dark:hover:text-blue-400 text-sm">
Home
</Link>
</li>
<li>
<Link href="/services" className="text-gray-600 hover:text-blue-600 dark:text-gray-400 dark:hover:text-blue-400 text-sm">
Services
</Link>
</li>
<li>
<Link href="/about" className="text-gray-600 hover:text-blue-600 dark:text-gray-400 dark:hover:text-blue-400 text-sm">
About Us
</Link>
</li>
<li>
<Link href="/contact" className="text-gray-600 hover:text-blue-600 dark:text-gray-400 dark:hover:text-blue-400 text-sm">
Contact
</Link>
</li>
</ul>
</div>
{/* Services */}
<div className="col-span-1">
<h3 className="text-sm font-semibold text-gray-800 dark:text-white uppercase tracking-wider mb-4">Services</h3>
<ul className="space-y-2">
<li>
<Link href="/services" className="text-gray-600 hover:text-blue-600 dark:text-gray-400 dark:hover:text-blue-400 text-sm">
Web Hosting & CMS
</Link>
</li>
<li>
<Link href="/services" className="text-gray-600 hover:text-blue-600 dark:text-gray-400 dark:hover:text-blue-400 text-sm">
Custom Web Development
</Link>
</li>
<li>
<Link href="/services" className="text-gray-600 hover:text-blue-600 dark:text-gray-400 dark:hover:text-blue-400 text-sm">
Mobile App Development
</Link>
</li>
<li>
<Link href="/services" className="text-gray-600 hover:text-blue-600 dark:text-gray-400 dark:hover:text-blue-400 text-sm">
Managed VPS Services
</Link>
</li>
</ul>
</div>
{/* Contact Info */}
<div className="col-span-1">
<h3 className="text-sm font-semibold text-gray-800 dark:text-white uppercase tracking-wider mb-4">Contact Us</h3>
<ul className="space-y-2">
<li className="flex items-start">
<svg className="h-5 w-5 text-gray-500 dark:text-gray-400 mr-2 mt-0.5" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z" />
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M15 11a3 3 0 11-6 0 3 3 0 016 0z" />
</svg>
<span className="text-gray-600 dark:text-gray-400 text-sm">Al Hashmi Street, Irbid City, 21110</span>
</li>
<li className="flex items-start">
<svg className="h-5 w-5 text-gray-500 dark:text-gray-400 mr-2 mt-0.5" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" />
</svg>
<span className="text-gray-600 dark:text-gray-400 text-sm">contact@yznapps.com</span>
</li>
<li className="flex items-start">
<svg className="h-5 w-5 text-gray-500 dark:text-gray-400 mr-2 mt-0.5" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z" />
</svg>
<span className="text-gray-600 dark:text-gray-400 text-sm">+962 (781) 881-280</span>
</li>
</ul>
</div>
</div>
<div className="mt-12 border-t border-gray-200 dark:border-gray-800 pt-8">
<p className="text-gray-500 dark:text-gray-400 text-sm text-center">
&copy; {new Date().getFullYear()} YznApps. All rights reserved.
</p>
</div>
</div>
</footer>
);
}

121
components/Motion.js Normal file
View File

@ -0,0 +1,121 @@
"use client";
import { motion } from 'framer-motion';
// Fade in animation for sections and components
export function FadeIn({ children, delay = 0, duration = 0.5, className = "" }) {
return (
<motion.div
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration, delay }}
className={className}
>
{children}
</motion.div>
);
}
// Slide in animation from left
export function SlideInLeft({ children, delay = 0, duration = 0.5, className = "" }) {
return (
<motion.div
initial={{ opacity: 0, x: -50 }}
animate={{ opacity: 1, x: 0 }}
transition={{ duration, delay }}
className={className}
>
{children}
</motion.div>
);
}
// Slide in animation from right
export function SlideInRight({ children, delay = 0, duration = 0.5, className = "" }) {
return (
<motion.div
initial={{ opacity: 0, x: 50 }}
animate={{ opacity: 1, x: 0 }}
transition={{ duration, delay }}
className={className}
>
{children}
</motion.div>
);
}
// Scale animation for cards and buttons
export function ScaleIn({ children, delay = 0, duration = 0.5, className = "" }) {
return (
<motion.div
initial={{ opacity: 0, scale: 0.9 }}
animate={{ opacity: 1, scale: 1 }}
transition={{ duration, delay }}
className={className}
>
{children}
</motion.div>
);
}
// Stagger children animations
export function StaggerContainer({ children, staggerDelay = 0.1, className = "" }) {
return (
<motion.div
className={className}
initial="hidden"
animate="visible"
variants={{
visible: {
transition: {
staggerChildren: staggerDelay
}
}
}}
>
{children}
</motion.div>
);
}
// Stagger child item
export function StaggerItem({ children, duration = 0.5, className = "" }) {
return (
<motion.div
variants={{
hidden: { opacity: 0, y: 20 },
visible: { opacity: 1, y: 0, transition: { duration } }
}}
className={className}
>
{children}
</motion.div>
);
}
// Page transition component
export function PageTransition({ children }) {
return (
<motion.div
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
exit={{ opacity: 0 }}
transition={{ duration: 0.3 }}
>
{children}
</motion.div>
);
}
// Hover animation for interactive elements
export function HoverScale({ children, scale = 1.05, className = "" }) {
return (
<motion.div
whileHover={{ scale }}
transition={{ type: "spring", stiffness: 400, damping: 10 }}
className={className}
>
{children}
</motion.div>
);
}

View File

@ -0,0 +1,11 @@
"use client";
import { AnimatePresence } from 'framer-motion';
export default function MotionProvider({ children }) {
return (
<AnimatePresence mode="wait">
{children}
</AnimatePresence>
);
}

90
components/Navbar.js Normal file
View File

@ -0,0 +1,90 @@
"use client";
import Link from 'next/link';
import Image from 'next/image';
import { useState } from 'react';
export default function Navbar() {
const [isMenuOpen, setIsMenuOpen] = useState(false);
const toggleMenu = () => {
setIsMenuOpen(!isMenuOpen);
};
return (
<nav className="bg-white shadow-md dark:bg-gray-900 fixed w-full z-20 top-0 left-0">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div className="flex justify-between h-16">
<div className="flex items-center">
<Link href="/" className="flex-shrink-0 flex items-center">
<Image
src="/images/logo.png"
alt="YznApps Logo"
width={40}
height={40}
className="h-11 w-auto my-image"
/>
<span className="ml-2 text-xl font-bold text-gray-800 dark:text-white"></span>
</Link>
</div>
{/* Desktop menu */}
<div className="hidden md:flex items-center space-x-4">
<Link href="/" className="text-gray-700 hover:text-blue-600 dark:text-gray-300 dark:hover:text-blue-400 px-3 py-2 rounded-md text-sm font-medium">
Home
</Link>
<Link href="/services" className="text-gray-700 hover:text-blue-600 dark:text-gray-300 dark:hover:text-blue-400 px-3 py-2 rounded-md text-sm font-medium">
Services
</Link>
<Link href="/about" className="text-gray-700 hover:text-blue-600 dark:text-gray-300 dark:hover:text-blue-400 px-3 py-2 rounded-md text-sm font-medium">
About Us
</Link>
<Link href="/contact" className="text-gray-700 hover:text-blue-600 dark:text-gray-300 dark:hover:text-blue-400 px-3 py-2 rounded-md text-sm font-medium">
Contact
</Link>
</div>
{/* Mobile menu button */}
<div className="md:hidden flex items-center">
<button
onClick={toggleMenu}
type="button"
className="inline-flex items-center justify-center p-2 rounded-md text-gray-700 hover:text-blue-600 dark:text-gray-300 dark:hover:text-blue-400"
aria-controls="mobile-menu"
aria-expanded="false"
>
<span className="sr-only">Open main menu</span>
{!isMenuOpen ? (
<svg className="block h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M4 6h16M4 12h16M4 18h16" />
</svg>
) : (
<svg className="block h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M6 18L18 6M6 6l12 12" />
</svg>
)}
</button>
</div>
</div>
</div>
{/* Mobile menu, show/hide based on menu state */}
<div className={`md:hidden ${isMenuOpen ? 'block' : 'hidden'}`} id="mobile-menu">
<div className="px-2 pt-2 pb-3 space-y-1 sm:px-3 bg-white dark:bg-gray-900 shadow-lg">
<Link href="/" className="text-gray-700 hover:text-blue-600 dark:text-gray-300 dark:hover:text-blue-400 block px-3 py-2 rounded-md text-base font-medium">
Home
</Link>
<Link href="/services" className="text-gray-700 hover:text-blue-600 dark:text-gray-300 dark:hover:text-blue-400 block px-3 py-2 rounded-md text-base font-medium">
Services
</Link>
<Link href="/about" className="text-gray-700 hover:text-blue-600 dark:text-gray-300 dark:hover:text-blue-400 block px-3 py-2 rounded-md text-base font-medium">
About Us
</Link>
<Link href="/contact" className="text-gray-700 hover:text-blue-600 dark:text-gray-300 dark:hover:text-blue-400 block px-3 py-2 rounded-md text-base font-medium">
Contact
</Link>
</div>
</div>
</nav>
);
}

40
package-lock.json generated
View File

@ -8,6 +8,7 @@
"name": "website", "name": "website",
"version": "0.1.0", "version": "0.1.0",
"dependencies": { "dependencies": {
"framer-motion": "^12.4.7",
"next": "14.2.23", "next": "14.2.23",
"react": "^18", "react": "^18",
"react-dom": "^18" "react-dom": "^18"
@ -603,6 +604,32 @@
"url": "https://github.com/sponsors/isaacs" "url": "https://github.com/sponsors/isaacs"
} }
}, },
"node_modules/framer-motion": {
"version": "12.4.7",
"resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.4.7.tgz",
"integrity": "sha512-VhrcbtcAMXfxlrjeHPpWVu2+mkcoR31e02aNSR7OUS/hZAciKa8q6o3YN2mA1h+jjscRsSyKvX6E1CiY/7OLMw==",
"dependencies": {
"motion-dom": "^12.4.5",
"motion-utils": "^12.0.0",
"tslib": "^2.4.0"
},
"peerDependencies": {
"@emotion/is-prop-valid": "*",
"react": "^18.0.0 || ^19.0.0",
"react-dom": "^18.0.0 || ^19.0.0"
},
"peerDependenciesMeta": {
"@emotion/is-prop-valid": {
"optional": true
},
"react": {
"optional": true
},
"react-dom": {
"optional": true
}
}
},
"node_modules/fsevents": { "node_modules/fsevents": {
"version": "2.3.3", "version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
@ -857,6 +884,19 @@
"node": ">=16 || 14 >=14.17" "node": ">=16 || 14 >=14.17"
} }
}, },
"node_modules/motion-dom": {
"version": "12.4.5",
"resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.4.5.tgz",
"integrity": "sha512-Q2xmhuyYug1CGTo0jdsL05EQ4RhIYXlggFS/yPhQQRNzbrhjKQ1tbjThx5Plv68aX31LsUQRq4uIkuDxdO5vRQ==",
"dependencies": {
"motion-utils": "^12.0.0"
}
},
"node_modules/motion-utils": {
"version": "12.0.0",
"resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.0.0.tgz",
"integrity": "sha512-MNFiBKbbqnmvOjkPyOKgHUp3Q6oiokLkI1bEwm5QA28cxMZrv0CbbBGDNmhF6DIXsi1pCQBSs0dX8xjeER1tmA=="
},
"node_modules/mz": { "node_modules/mz": {
"version": "2.7.0", "version": "2.7.0",
"resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",

View File

@ -9,9 +9,10 @@
"lint": "next lint" "lint": "next lint"
}, },
"dependencies": { "dependencies": {
"framer-motion": "^12.4.7",
"next": "14.2.23",
"react": "^18", "react": "^18",
"react-dom": "^18", "react-dom": "^18"
"next": "14.2.23"
}, },
"devDependencies": { "devDependencies": {
"postcss": "^8", "postcss": "^8",

BIN
public/images/coding.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 842 KiB

BIN
public/images/coding2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 MiB

BIN
public/images/coding3.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 358 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

BIN
public/images/dev.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

BIN
public/images/dev2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

BIN
public/images/forex1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 503 KiB

BIN
public/images/forex2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 778 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 KiB

BIN
public/images/hosting.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 541 KiB

BIN
public/images/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
public/images/mobiledev.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

BIN
public/images/support.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 419 KiB

BIN
public/images/tech.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 KiB

BIN
public/images/webapps.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

BIN
public/images/website.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 472 KiB