Files
portifolio-evandrodevbr/app/components/About.tsx
T
Evandro Fonseca Junior ad6a76efdd feat(config, layout, components): enhance security headers, improve SEO, and update project descriptions
- Added security headers in the Next.js configuration to enhance application security.
- Updated metadata in the layout component for improved SEO, including new titles, descriptions, and keywords.
- Introduced JSON-LD schema for projects to enhance search engine visibility.
- Enhanced project descriptions in the portfolio data for clarity and detail.
- Improved header component with logo integration and refined social media links for better accessibility.
2026-01-20 21:00:50 -03:00

154 lines
6.3 KiB
TypeScript

"use client";
import React, { useMemo } from "react";
import { motion, Variants } from "motion/react";
import { LucideIcon, Brain, Zap, Target, Rocket, Users, Lightbulb, Code, Shield } from "lucide-react";
// --- Types & Interfaces (Tipagem Forte para Previsibilidade) ---
interface StoryStep {
icon: LucideIcon;
title: string;
content: string;
gradient: string;
accent: string;
}
interface CoreValue {
icon: LucideIcon;
title: string;
description: string;
}
// --- Data (Desacoplado para facilitar manutenção/CMS) ---
const STORY_DATA: StoryStep[] = [
{
icon: Brain,
title: "Engenharia de Fundamentos",
content: "Minha mentalidade é pautada pela redução de entropia. Não apenas escrevo código; projeto sistemas onde a escalabilidade é uma propriedade intrínseca da arquitetura, não um ajuste posterior.",
gradient: "from-blue-600 to-cyan-500",
accent: "text-blue-400",
},
{
icon: Zap,
title: "Entrega sob Restrições",
content: "Em 3 anos de atuação profissional, especializei-me em cenários de alta criticidade. Atuei na ponte entre sistemas legados e microserviços, garantindo a resolução do problema.",
gradient: "from-purple-600 to-pink-600",
accent: "text-purple-400",
},
];
const VALUES_DATA: CoreValue[] = [
{
icon: Code,
title: "Pragmatismo Arquitetural",
description: "Priorizo a manutenibilidade e a resiliência. Código limpo é o meio, sistemas que geram ROI são o fim."
},
{
icon: Brain,
title: "Fundacionalismo Técnico",
description: "Domínio profundo de estruturas de dados e protocolos. Tecnologias mudam, fundamentos são perenes."
},
{
icon: Users,
title: "Propriedade e Ownership",
description: "Comunicação de baixa latência e responsabilidade radical sobre cada entrega e decisão técnica."
},
{
icon: Shield,
title: "Security by Design",
description: "Integridade e conformidade técnica (GDPR/LGPD) tratadas como requisitos funcionais, não opcionais."
},
];
// --- Micro-componentes (Feynman Technique: Simplicidade e Reuso) ---
const SectionHeader = () => (
<motion.div
initial={{ opacity: 0, y: 20 }}
whileInView={{ opacity: 1, y: 0 }}
className="text-center mb-24"
>
<span className="px-4 py-1.5 rounded-full bg-blue-500/10 border border-blue-500/20 text-blue-400 text-xs font-bold uppercase tracking-widest">
Minha Jornada
</span>
<h2 className="mt-6 text-5xl font-extrabold tracking-tight text-white sm:text-6xl">
Sobre <span className="text-transparent bg-clip-text bg-gradient-to-r from-blue-400 to-cyan-300">Mim</span>
</h2>
<p className="mt-6 text-lg text-slate-400 max-w-2xl mx-auto leading-relaxed italic">
"Transformando complexidade técnica em valor de negócio através da engenharia."
</p>
</motion.div>
);
const StoryCard = ({ step, index }: { step: StoryStep; index: number }) => {
const isEven = index % 2 === 0;
return (
<motion.div
initial={{ opacity: 0, x: isEven ? -30 : 30 }}
whileInView={{ opacity: 1, x: 0 }}
viewport={{ once: true, margin: "-100px" }}
className={`flex flex-col ${isEven ? "md:flex-row" : "md:flex-row-reverse"} items-center gap-12 mb-20`}
>
<div className="flex-1 w-full">
<div className="group relative p-8 rounded-3xl bg-slate-900/50 border border-slate-800 hover:border-blue-500/50 transition-all duration-500 shadow-2xl backdrop-blur-xl">
<div className={`absolute -top-6 ${isEven ? 'left-6' : 'right-6'} p-4 rounded-2xl bg-slate-900 border border-slate-800 shadow-xl group-hover:scale-110 transition-transform`}>
<step.icon className={`w-8 h-8 ${step.accent}`} />
</div>
<h3 className="mt-4 text-2xl font-bold text-white mb-4">{step.title}</h3>
<p className="text-slate-400 leading-relaxed text-base font-light">{step.content}</p>
</div>
</div>
<div className="hidden md:flex flex-col items-center">
<div className="w-12 h-12 rounded-full bg-slate-900 border-4 border-slate-800 flex items-center justify-center z-10">
<div className="w-3 h-3 rounded-full bg-blue-500 animate-pulse" />
</div>
<div className="w-[2px] h-32 bg-gradient-to-b from-blue-500/50 to-transparent" />
</div>
<div className="flex-1 hidden md:block" />
</motion.div>
);
};
export default function About() {
return (
<section id="about" className="relative py-24 bg-[#030712] overflow-hidden">
{/* Background Decor (Engenharia Visual) */}
<div className="absolute top-0 left-1/2 -translate-x-1/2 w-full h-full pointer-events-none">
<div className="absolute top-0 left-1/4 w-96 h-96 bg-blue-600/10 rounded-full blur-[120px]" />
<div className="absolute bottom-0 right-1/4 w-96 h-96 bg-purple-600/10 rounded-full blur-[120px]" />
</div>
<div className="container max-w-6xl mx-auto px-6 relative z-10">
<SectionHeader />
<div className="relative">
{STORY_DATA.map((step, idx) => (
<StoryCard key={idx} step={step} index={idx} />
))}
</div>
{/* Grid de Valores com Pareto 80/20 */}
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6 mt-32">
{VALUES_DATA.map((val, i) => (
<div key={i} className="p-6 rounded-2xl bg-white/5 border border-white/10 hover:bg-white/10 transition-colors">
<val.icon className="w-6 h-6 text-blue-400 mb-4" />
<h4 className="text-white font-semibold mb-2">{val.title}</h4>
<p className="text-slate-500 text-sm">{val.description}</p>
</div>
))}
</div>
{/* SEO Semantic Content - Visible but subtle */}
<div className="mt-16 pt-8 border-t border-slate-800">
<p className="text-xs text-slate-600 text-center max-w-2xl mx-auto leading-relaxed">
Evandro Fonseca Junior é Engenheiro Full-Stack especializado em Next.js,
React, Angular e Node.js. Desenvolvedor de aplicações desktop com Tauri,
sistemas web escaláveis e automação de processos. Experiência em PostgreSQL,
MySQL, computação em nuvem e IoT. Localizado em Garuva, Santa Catarina, Brasil.
</p>
</div>
</div>
</section>
);
}