feat: Adiciona a estrutura inicial do portfólio com componentes para experiência, hero, sobre, habilidades, projetos, modalidades de trabalho e contato.

This commit is contained in:
Evandro Fonseca Junior committed 2026-02-14 02:20:54 -03:00
1 parent 65dd049963
commit 77956223b3
12 files changed
+576 -470

No files matched your search

+36 -26
View File
@@ -2,9 +2,9 @@
import React from "react";
import { motion } from "framer-motion";
import {
Code, Database, Cloud, Cpu, Smartphone,
Zap, GitBranch, TestTube, Terminal, Layers
import {
Code, Database, Cloud, Cpu, Smartphone,
Zap, GitBranch, TestTube, Terminal, Layers
} from "lucide-react";
import { usePortfolioData } from "@/lib/usePortfolioData";
@@ -28,9 +28,14 @@ export default function Skills() {
if (error || !data) return <ErrorState />;
return (
<section id="skills" className="relative py-32 px-6 bg-[#030712] overflow-hidden">
<section id="skills" className="relative py-32 px-6">
{/* Background Decoration */}
<div className="absolute top-0 left-0 w-full h-full pointer-events-none">
<div className="absolute top-[40%] left-[50%] -translate-x-1/2 w-[800px] h-[800px] bg-blue-900/5 rounded-full blur-[100px]" />
</div>
<div className="max-w-7xl mx-auto relative z-10">
{/* Header Seção */}
<motion.div
initial={{ opacity: 0, y: 20 }}
@@ -39,20 +44,21 @@ export default function Skills() {
className="flex flex-col md:flex-row justify-between items-end mb-20 gap-8"
>
<div className="text-left">
<h2 className="text-sm font-mono text-blue-500 uppercase tracking-[0.3em] mb-4 flex items-center gap-2 font-bold">
<Layers className="w-4 h-4" /> Stack de Engenharia
</h2>
<h3 className="text-4xl md:text-6xl font-black text-white">
Arsenal <span className="text-slate-700">Tecnológico</span>
<div className="inline-flex items-center gap-2 px-3 py-1 rounded-full bg-blue-950/30 border border-blue-500/20 text-blue-400 font-mono text-xs tracking-wider mb-4">
<Layers className="w-3 h-3" />
<span>MODULE_REGISTRY.lib</span>
</div>
<h3 className="text-4xl md:text-6xl font-black text-white tracking-tighter">
Arsenal <span className="text-transparent bg-clip-text bg-gradient-to-r from-blue-500 to-indigo-500">Tecnológico</span>
</h3>
</div>
<p className="text-slate-400 max-w-md text-lg font-light leading-relaxed border-l border-slate-800 pl-6">
<p className="text-slate-400 max-w-md text-sm md:text-base font-light leading-relaxed border-l-2 border-slate-800 pl-6">
Sistemas resilientes construídos com precisão matemática e rigor arquitetural.
</p>
</motion.div>
{/* Grid de Habilidades */}
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6">
{data.skills.technical.map((category, index) => {
const Icon = ICON_MAP[category.icon] || Code;
const styles = getCategoryStyles(category.color);
@@ -60,36 +66,40 @@ export default function Skills() {
return (
<motion.div
key={category.category}
initial={{ opacity: 0, y: 90 }}
initial={{ opacity: 0, y: 50 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, amount: 0.5 }}
transition={{
duration: 0.5,
viewport={{ once: true, amount: 0.2 }}
transition={{
duration: 0.5,
delay: index * 0.05,
ease: "easeOut"
ease: "easeOut"
}}
className="h-full"
>
<div
className="group p-8 flex flex-col h-full bg-slate-900/50 border border-slate-800 rounded-lg transition-colors duration-300 cursor-default"
<div
className="group relative h-full p-8 flex flex-col bg-zinc-900/40 border border-white/5 rounded-2xl backdrop-blur-sm hover:border-blue-500/20 hover:bg-zinc-900/60 transition-all duration-300 overflow-hidden"
>
{/* Scanning Line Effect */}
<div className="absolute top-0 left-0 w-full h-[2px] bg-gradient-to-r from-transparent via-blue-500/50 to-transparent -translate-x-full group-hover:animate-scan" />
<div className="flex items-start justify-between mb-8">
<div className={`p-4 rounded-2xl ${styles.bg} border border-white/5 transition-all duration-500 group-hover:scale-110 group-hover:rotate-3`}>
<Icon className={`w-8 h-8 ${styles.icon}`} />
<div className={`p-4 rounded-xl bg-slate-800/50 border border-white/5 group-hover:bg-blue-500/10 group-hover:border-blue-500/20 transition-all duration-300`}>
<Icon className={`w-8 h-8 text-slate-400 group-hover:text-blue-400 transition-colors`} />
</div>
<span className="text-[10px] font-mono text-slate-700 uppercase tracking-widest font-bold">
ID_0{index}
<span className="text-[10px] font-mono text-slate-600 uppercase tracking-widest font-bold group-hover:text-blue-500/50 transition-colors">
ID_0{index}X
</span>
</div>
<h3 className="text-xl font-bold text-white mb-6">
<h3 className="text-xl font-bold text-white mb-6 group-hover:text-blue-200 transition-colors">
{category.category}
</h3>
<div className="flex flex-wrap gap-2 mt-auto">
{category.skills.map((skill, sIdx) => (
<span
<span
key={sIdx}
className="px-3 py-1 text-[11px] font-mono bg-slate-950/50 text-slate-400 rounded border border-slate-800 group-hover:border-blue-500/30 transition-all duration-300"
className="px-2.5 py-1 text-[10px] font-mono bg-black/40 text-slate-400 rounded border border-white/5 group-hover:border-blue-500/20 group-hover:text-blue-300 transition-all duration-300 cursor-default"
>
{skill}
</span>