"use client";
import { motion } from "motion/react";
import { BentoGrid, BentoGridItem } from "@/components/magicui/bento-grid";
import {
ExternalLink,
Github,
Star,
Zap,
Globe,
Cpu,
Code2,
} from "lucide-react";
import { usePortfolioData } from "@/lib/usePortfolioData";
// Configuração de cores e ícones por categoria
const categoryConfig = {
"full-stack": {
color: "from-blue-500 to-blue-600",
bgColor: "bg-blue-500/10",
borderColor: "border-blue-500/20",
icon: Globe,
iconColor: "text-blue-400",
},
iot: {
color: "from-purple-500 to-purple-600",
bgColor: "bg-purple-500/10",
borderColor: "border-purple-500/20",
icon: Cpu,
iconColor: "text-purple-400",
},
api: {
color: "from-orange-500 to-orange-600",
bgColor: "bg-orange-500/10",
borderColor: "border-orange-500/20",
icon: Code2,
iconColor: "text-orange-400",
},
web: {
color: "from-green-500 to-green-600",
bgColor: "bg-green-500/10",
borderColor: "border-green-500/20",
icon: Globe,
iconColor: "text-green-400",
},
desktop: {
color: "from-emerald-500 to-emerald-600",
bgColor: "bg-emerald-500/10",
borderColor: "border-emerald-500/20",
icon: Code2,
iconColor: "text-emerald-400",
},
};
// Função para gerar estrelas de complexidade
const ComplexityStars = ({ complexity }: { complexity: number }) => {
return (
{[...Array(5)].map((_, i) => (
))}
);
};
// Componente de Badge
const ProjectBadge = ({ badge, index }: { badge: string; index: number }) => {
const badgeColors = [
"bg-blue-500/20 text-blue-400 border-blue-500/30",
"bg-green-500/20 text-green-400 border-green-500/30",
"bg-purple-500/20 text-purple-400 border-purple-500/30",
"bg-orange-500/20 text-orange-400 border-orange-500/30",
"bg-red-500/20 text-red-400 border-red-500/30",
];
return (
{badge}
);
};
export default function Projects() {
const { data, loading, error } = usePortfolioData();
if (loading) {
return (
);
}
if (error || !data) {
return (
Erro ao carregar dados de projetos.
);
}
const projects = data.projects.filter((project) => project.featured);
return (
Projetos em Destaque
Uma seleção dos projetos que desenvolvi, demonstrando minha evolução
técnica e capacidade de entregar soluções completas em diferentes
domínios
{projects.map((project, index) => {
const config =
categoryConfig[project.category as keyof typeof categoryConfig] ||
categoryConfig["web"];
const IconComponent = config.icon;
return (
{/* Header com ícone e badges */}
{project.title}
{project.subtitle}
{project.demoUrl && (
)}
{project.githubUrl && (
)}
{/* Badges */}
{project.badges.map((badge, idx) => (
))}
{/* Description */}
{project.description}
{/* Tecnologias principais */}
Stack Principal
{project.technologies.slice(0, 4).map((tech) => (
{tech}
))}
{project.technologies.length > 4 && (
+{project.technologies.length - 4}
)}
{/* Features principais */}
Destaques
{project.features.slice(0, 3).map((feature, idx) => (
-
{feature}
))}
{/* Footer com complexidade e status */}
Complexidade:
{project.status}
);
})}
{/* Call to Action */}
Todos os projetos são desenvolvidos individualmente, demonstrando
capacidade full-stack completa
);
}