fix(bug-link):replace link(router) to achor for external url
This commit is contained in:
@@ -34,7 +34,6 @@ export default function BlogSection() {
|
|||||||
<div className="absolute inset-0 bg-gradient-to-b from-transparent via-primary/5 to-transparent" />
|
<div className="absolute inset-0 bg-gradient-to-b from-transparent via-primary/5 to-transparent" />
|
||||||
|
|
||||||
<div className="container mx-auto px-4 relative z-10">
|
<div className="container mx-auto px-4 relative z-10">
|
||||||
{/* Section Header */}
|
|
||||||
<motion.div
|
<motion.div
|
||||||
initial={{ opacity: 0, y: 20 }}
|
initial={{ opacity: 0, y: 20 }}
|
||||||
whileInView={{ opacity: 1, y: 0 }}
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import logo from "@/assets/logo.webp";
|
import logo from "@/assets/logo.webp";
|
||||||
import { motion } from "framer-motion";
|
import { motion } from "framer-motion";
|
||||||
import { Facebook, Github, Gitlab, Instagram, Linkedin, Mail, Twitter } from "lucide-react";
|
import { Facebook, Gitlab, Instagram, Linkedin } from "lucide-react";
|
||||||
import { Link } from "react-router-dom";
|
import { Link } from "react-router-dom";
|
||||||
|
|
||||||
const quickLinks = [
|
const quickLinks = [
|
||||||
@@ -24,7 +24,11 @@ const socials = [
|
|||||||
href: "https://www.linkedin.com/company/techzaa",
|
href: "https://www.linkedin.com/company/techzaa",
|
||||||
label: "LinkedIn",
|
label: "LinkedIn",
|
||||||
},
|
},
|
||||||
{ icon: Facebook, href: "https://www.facebook.com/techzaaalpha", label: "Facebook" },
|
{
|
||||||
|
icon: Facebook,
|
||||||
|
href: "https://www.facebook.com/techzaaalpha",
|
||||||
|
label: "Facebook",
|
||||||
|
},
|
||||||
{ icon: Gitlab, href: "https://gitlab.techzaa.tech", label: "Gitlab" },
|
{ icon: Gitlab, href: "https://gitlab.techzaa.tech", label: "Gitlab" },
|
||||||
{ icon: Instagram, href: "#", label: "Instagram" },
|
{ icon: Instagram, href: "#", label: "Instagram" },
|
||||||
];
|
];
|
||||||
@@ -32,16 +36,16 @@ const socials = [
|
|||||||
export default function Footer() {
|
export default function Footer() {
|
||||||
return (
|
return (
|
||||||
<footer className="relative overflow-hidden bg-secondary/50 py-20">
|
<footer className="relative overflow-hidden bg-secondary/50 py-20">
|
||||||
{/* Animated gradient divider */}
|
|
||||||
<div className="absolute top-0 left-0 right-0 h-1 gradient-primary-animated" />
|
<div className="absolute top-0 left-0 right-0 h-1 gradient-primary-animated" />
|
||||||
|
|
||||||
{/* Background decoration */}
|
|
||||||
<div className="absolute inset-0 opacity-20">
|
<div className="absolute inset-0 opacity-20">
|
||||||
<div className="absolute bottom-0 left-0 w-96 h-96 bg-primary/10 rounded-full blur-[150px]" />
|
<div className="absolute bottom-0 left-0 w-96 h-96 bg-primary/10 rounded-full blur-[150px]" />
|
||||||
<div className="absolute top-0 right-0 w-72 h-72 bg-neon-purple/10 rounded-full blur-[120px]" />
|
<div className="absolute top-0 right-0 w-72 h-72 bg-neon-purple/10 rounded-full blur-[120px]" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Circuit pattern background */}
|
|
||||||
<div className="absolute inset-0 opacity-5">
|
<div className="absolute inset-0 opacity-5">
|
||||||
<svg
|
<svg
|
||||||
className="w-full h-full"
|
className="w-full h-full"
|
||||||
@@ -70,7 +74,7 @@ export default function Footer() {
|
|||||||
|
|
||||||
<div className="container mx-auto px-4 relative z-10">
|
<div className="container mx-auto px-4 relative z-10">
|
||||||
<div className="grid md:grid-cols-2 lg:grid-cols-4 gap-12 mb-16">
|
<div className="grid md:grid-cols-2 lg:grid-cols-4 gap-12 mb-16">
|
||||||
{/* Brand */}
|
|
||||||
<motion.div
|
<motion.div
|
||||||
initial={{ opacity: 0, y: 20 }}
|
initial={{ opacity: 0, y: 20 }}
|
||||||
whileInView={{ opacity: 1, y: 0 }}
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
@@ -84,11 +88,9 @@ export default function Footer() {
|
|||||||
Transforming ideas into powerful digital solutions. We build the
|
Transforming ideas into powerful digital solutions. We build the
|
||||||
future with technology.
|
future with technology.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
</motion.div>
|
</motion.div>
|
||||||
|
|
||||||
{/* Quick Links */}
|
|
||||||
<motion.div
|
<motion.div
|
||||||
initial={{ opacity: 0, y: 20 }}
|
initial={{ opacity: 0, y: 20 }}
|
||||||
whileInView={{ opacity: 1, y: 0 }}
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
@@ -111,7 +113,7 @@ export default function Footer() {
|
|||||||
</ul>
|
</ul>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
|
|
||||||
{/* Services */}
|
|
||||||
<motion.div
|
<motion.div
|
||||||
initial={{ opacity: 0, y: 20 }}
|
initial={{ opacity: 0, y: 20 }}
|
||||||
whileInView={{ opacity: 1, y: 0 }}
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
@@ -157,7 +159,7 @@ export default function Footer() {
|
|||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
<p className="text-muted-foreground text-sm">
|
<p className="text-muted-foreground text-sm">
|
||||||
Rangpur, Bangladesh
|
Rangpur, Bangladesh
|
||||||
<br />
|
<br />
|
||||||
techzaa.alpha@gmail.com
|
techzaa.alpha@gmail.com
|
||||||
<br />
|
<br />
|
||||||
@@ -179,13 +181,22 @@ export default function Footer() {
|
|||||||
© {new Date().getFullYear()} TechZaa. All rights reserved.
|
© {new Date().getFullYear()} TechZaa. All rights reserved.
|
||||||
</p>
|
</p>
|
||||||
<div className="flex items-center gap-6 text-sm text-muted-foreground">
|
<div className="flex items-center gap-6 text-sm text-muted-foreground">
|
||||||
<Link to="/privacy" className="hover:text-primary transition-colors">
|
<Link
|
||||||
|
to="/privacy"
|
||||||
|
className="hover:text-primary transition-colors"
|
||||||
|
>
|
||||||
Privacy Policy
|
Privacy Policy
|
||||||
</Link>
|
</Link>
|
||||||
<Link to="/privacy" className="hover:text-primary transition-colors">
|
<Link
|
||||||
|
to="/privacy"
|
||||||
|
className="hover:text-primary transition-colors"
|
||||||
|
>
|
||||||
Terms of Service
|
Terms of Service
|
||||||
</Link>
|
</Link>
|
||||||
<Link to="/privacy" className="hover:text-primary transition-colors">
|
<Link
|
||||||
|
to="/privacy"
|
||||||
|
className="hover:text-primary transition-colors"
|
||||||
|
>
|
||||||
Cookie Policy
|
Cookie Policy
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
import { motion, useInView } from "framer-motion";
|
import { motion, useInView } from "framer-motion";
|
||||||
import { Github, Linkedin, Twitter } from "lucide-react";
|
|
||||||
import { useRef } from "react";
|
import { useRef } from "react";
|
||||||
import { Autoplay, Pagination } from "swiper/modules";
|
import { Autoplay, Pagination } from "swiper/modules";
|
||||||
import { Swiper, SwiperSlide } from "swiper/react";
|
import { Swiper, SwiperSlide } from "swiper/react";
|
||||||
|
|
||||||
import { useTeam } from "@/hooks/queires/useTeam";
|
import { useTeam } from "@/hooks/queires/useTeam";
|
||||||
import { Link } from "react-router-dom";
|
|
||||||
import PremiumBadge from "../shared/PremiumBadge";
|
import PremiumBadge from "../shared/PremiumBadge";
|
||||||
|
|
||||||
export default function TeamSection() {
|
export default function TeamSection() {
|
||||||
@@ -19,14 +17,14 @@ export default function TeamSection() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<section id="team" ref={ref} className="pt-20 1relative overflow-hidden">
|
<section id="team" ref={ref} className="pt-20 1relative overflow-hidden">
|
||||||
{/* Background decoration */}
|
|
||||||
<div className="absolute inset-0 opacity-30">
|
<div className="absolute inset-0 opacity-30">
|
||||||
<div className="absolute top-0 right-1/4 w-72 h-72 bg-neon-purple/10 rounded-full blur-[120px]" />
|
<div className="absolute top-0 right-1/4 w-72 h-72 bg-neon-purple/10 rounded-full blur-[120px]" />
|
||||||
<div className="absolute bottom-0 left-1/4 w-64 h-64 bg-primary/10 rounded-full blur-xl" />
|
<div className="absolute bottom-0 left-1/4 w-64 h-64 bg-primary/10 rounded-full blur-xl" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="container mx-auto px-4 relative z-10">
|
<div className="container mx-auto px-4 relative z-10">
|
||||||
{/* Section Header */}
|
|
||||||
<motion.div
|
<motion.div
|
||||||
initial={{ opacity: 0, y: 20 }}
|
initial={{ opacity: 0, y: 20 }}
|
||||||
animate={isInView ? { opacity: 1, y: 0 } : {}}
|
animate={isInView ? { opacity: 1, y: 0 } : {}}
|
||||||
@@ -42,7 +40,6 @@ export default function TeamSection() {
|
|||||||
</p>
|
</p>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
|
|
||||||
{/* Team Slider Container */}
|
|
||||||
<div className="w-full">
|
<div className="w-full">
|
||||||
<Swiper
|
<Swiper
|
||||||
direction={"horizontal"}
|
direction={"horizontal"}
|
||||||
|
|||||||
@@ -16,11 +16,9 @@ import ReactMarkdown from "react-markdown";
|
|||||||
import { Link, useNavigate, useParams } from "react-router-dom";
|
import { Link, useNavigate, useParams } from "react-router-dom";
|
||||||
import remarkGfm from "remark-gfm";
|
import remarkGfm from "remark-gfm";
|
||||||
import { toast } from "sonner";
|
import { toast } from "sonner";
|
||||||
|
|
||||||
export default function BlogArticle() {
|
export default function BlogArticle() {
|
||||||
const { id } = useParams<{ id: string }>();
|
const { id } = useParams<{ id: string }>();
|
||||||
const { data } = useBlogById(id);
|
const { data } = useBlogById(id);
|
||||||
|
|
||||||
const post = data?.data.data;
|
const post = data?.data.data;
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
// const post = getPostBySlug(id || '');
|
// const post = getPostBySlug(id || '');
|
||||||
@@ -337,24 +335,24 @@ export default function BlogArticle() {
|
|||||||
<p className="text-muted-foreground mb-4">{post.author.bio}</p>
|
<p className="text-muted-foreground mb-4">{post.author.bio}</p>
|
||||||
<div className="flex gap-3 justify-center md:justify-start">
|
<div className="flex gap-3 justify-center md:justify-start">
|
||||||
{post.author.twitter && (
|
{post.author.twitter && (
|
||||||
<Link
|
<a
|
||||||
to={`https://twitter.com/${post.author.twitter}`}
|
href={`https://twitter.com/${post.author.twitter}`}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
className="p-2 rounded-full glass hover:neon-glow transition-all"
|
className="p-2 rounded-full glass hover:neon-glow transition-all"
|
||||||
>
|
>
|
||||||
<Twitter className="w-5 h-5" />
|
<Twitter className="w-5 h-5" />
|
||||||
</Link>
|
</a>
|
||||||
)}
|
)}
|
||||||
{post.author.linkedin && (
|
{post.author.linkedin && (
|
||||||
<Link
|
<a
|
||||||
to={`https://linkedin.com/in/${post.author.linkedin}`}
|
href={`https://linkedin.com/in/${post.author.linkedin}`}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
className="p-2 rounded-full glass hover:neon-glow transition-all"
|
className="p-2 rounded-full glass hover:neon-glow transition-all"
|
||||||
>
|
>
|
||||||
<Linkedin className="w-5 h-5" />
|
<Linkedin className="w-5 h-5" />
|
||||||
</Link>
|
</a>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -77,7 +77,6 @@ export default function Projects() {
|
|||||||
<div className="min-h-screen bg-background text-foreground antialiased selection:bg-primary/20">
|
<div className="min-h-screen bg-background text-foreground antialiased selection:bg-primary/20">
|
||||||
<section className="pt-32 pb-12 relative overflow-hidden border-b border-border/40">
|
<section className="pt-32 pb-12 relative overflow-hidden border-b border-border/40">
|
||||||
<div className="container mx-auto px-4 sm:px-6 lg:px-8 relative z-10">
|
<div className="container mx-auto px-4 sm:px-6 lg:px-8 relative z-10">
|
||||||
|
|
||||||
{/* Back Arrow Wrapper - Kept clean on left side */}
|
{/* Back Arrow Wrapper - Kept clean on left side */}
|
||||||
<motion.div
|
<motion.div
|
||||||
initial={{ opacity: 0, x: shouldReduceMotion ? 0 : -10 }}
|
initial={{ opacity: 0, x: shouldReduceMotion ? 0 : -10 }}
|
||||||
@@ -98,7 +97,6 @@ export default function Projects() {
|
|||||||
</Button>
|
</Button>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
|
|
||||||
{/* Core Header Content Module - Flex-centered alignment */}
|
|
||||||
<div className="w-full flex flex-col items-center justify-center text-center">
|
<div className="w-full flex flex-col items-center justify-center text-center">
|
||||||
<div className="max-w-3xl mb-12">
|
<div className="max-w-3xl mb-12">
|
||||||
<motion.h1
|
<motion.h1
|
||||||
@@ -166,7 +164,6 @@ export default function Projects() {
|
|||||||
</div>
|
</div>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user