index.enthalnet.com/components/tech_stack-section.tsx
2025-06-27 08:05:29 +08:00

96 lines
3.6 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use client"
import { useEffect, useState } from "react"
const technologies = [
"React",
"Next.js",
"TypeScript",
"Node.js",
"Python",
"Docker",
"Kubernetes",
"AWS",
"MongoDB",
"PostgreSQL",
"Redis",
"GraphQL",
"Tailwind CSS",
"Three.js",
"WebGL",
"Microservices",
"DevOps",
"CI/CD",
]
export default function TechStackSection() {
const [currentIndex, setCurrentIndex] = useState(0)
useEffect(() => {
const timer = setInterval(() => {
setCurrentIndex((prev) => (prev + 1) % technologies.length)
}, 2000)
return () => clearInterval(timer)
}, [])
return (
<section className="py-20 px-4 relative overflow-hidden">
<div className="container mx-auto max-w-7xl">
<div className="text-center mb-16">
<h2 className="text-4xl md:text-5xl font-bold bg-gradient-to-r from-blue-600 via-purple-600 to-pink-600 bg-clip-text text-transparent mb-6 drop-shadow-sm font-mono">
</h2>
<p className="text-xl text-gray-600 max-w-3xl mx-auto font-mono">沿</p>
</div>
{/* Enhanced Scrolling Tech Tags */}
<div className="relative h-40 overflow-hidden mb-16">
<div className="absolute inset-0 flex items-center">
<div className="flex animate-scroll-smooth space-x-8">
{[...technologies, ...technologies].map((tech, index) => (
<div
key={index}
className={`flex-shrink-0 px-8 py-4 rounded-2xl border-2 transition-all duration-700 glass-card-white backdrop-blur-xl ${
index % technologies.length === currentIndex
? "border-blue-300 bg-white/50 text-blue-600 shadow-lg scale-110"
: "border-gray-200/50 bg-white/30 text-gray-600 hover:border-blue-200/50 hover:text-blue-600"
}`}
>
<span className="font-mono font-bold whitespace-nowrap text-lg">{tech}</span>
</div>
))}
</div>
</div>
</div>
{/* Enhanced Value Propositions */}
<div className="grid md:grid-cols-4 gap-6">
{[
{ title: "技术领先", desc: "始终跟踪最新技术趋势", gradient: "from-blue-400 to-cyan-500" },
{ title: "质量保障", desc: "严格的代码规范和测试", gradient: "from-purple-400 to-indigo-500" },
{ title: "快速交付", desc: "敏捷开发模式", gradient: "from-pink-400 to-rose-500" },
{ title: "持续支持", desc: "长期技术支持和维护", gradient: "from-indigo-400 to-blue-500" },
].map((item, index) => (
<div
key={index}
className="text-center p-8 rounded-2xl glass-card-white bg-white/40 border border-gray-200/50 hover:border-blue-200/50 transition-all duration-500 hover:-translate-y-2 group backdrop-blur-xl"
>
<div
className={`w-12 h-12 mx-auto mb-4 rounded-xl bg-gradient-to-br ${item.gradient} flex items-center justify-center group-hover:scale-110 transition-transform duration-300 shadow-lg`}
>
<div className={`w-6 h-6 rounded-full bg-white/80`}></div>
</div>
<h3
className={`text-lg font-bold mb-2 font-mono bg-gradient-to-r ${item.gradient} bg-clip-text text-transparent`}
>
{item.title}
</h3>
<p className="text-gray-600 text-sm font-mono">{item.desc}</p>
</div>
))}
</div>
</div>
</section>
)
}