From 90cf3c73ad9b4a5f0cf8aa59e73b0cb00c49dc57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C2=A8evandrodevbr=C2=A8?= <¨asemlk54@hotmail.com¨> Date: Tue, 2 Sep 2025 22:30:47 -0300 Subject: [PATCH] feat: set up basic project structure and initial styling This commit initializes the project with a basic Next.js setup, including: - Integration of `tailwindcss` and `tw-animate-css` for styling. - Definition of a comprehensive color palette using CSS variables for both light and dark themes, supporting a theming system. - Implementation of a custom `aurora` keyframe animation. - Configuration of global CSS styles for `border` and `body` elements. - Setup of `next.config.ts` with image optimization, performance enhancements, and security headers (X-Frame-Options, X-Content-Type-Options, Referrer-Policy). - Update of `package.json` to include new dependencies for UI components (`class-variance-authority`, `clsx`, `lucide-react`, `motion`, `tailwind-merge`, `tailwindcss-animate`) and development tools (`@biomejs/biome`, `@tailwindcss/postcss`, `tw-animate-css`). - Refinement of `app/layout.tsx` to include comprehensive metadata for SEO (title, description, keywords, authors, Open Graph, Twitter cards, robots), preconnect/dns-prefetch links for external resources, favicon, manifest, and mobile app meta tags. - Restructuring of `app/page.tsx` to use dynamic imports for various sections (Hero, About, Skills, Experience, Projects, Contact, WorkModalities) to improve performance, and integration of `Squares` component for background effects. This foundational commit prepares the application for further development by establishing a robust and performant base. --- app/components/About.tsx | 111 +++ app/components/Contact.tsx | 90 ++ app/components/ContactForm.tsx | 769 ++++++++++++++++++ app/components/ContactInfo.tsx | 128 +++ app/components/Experience.tsx | 123 +++ app/components/Header.tsx | 151 ++++ app/components/Hero.tsx | 203 +++++ app/components/Projects.tsx | 134 +++ app/components/Skills.tsx | 135 +++ app/components/WorkModalities.tsx | 126 +++ app/globals.css | 169 +++- app/layout.tsx | 101 ++- app/page.tsx | 167 ++-- components.json | 21 + components/magicui/animated-gradient-text.tsx | 36 + components/magicui/aurora-text.tsx | 33 + components/magicui/bento-grid.tsx | 54 ++ components/magicui/dock.tsx | 153 ++++ components/magicui/dot-pattern.tsx | 158 ++++ components/magicui/globe.tsx | 128 +++ components/magicui/magic-card.tsx | 25 + components/magicui/shimmer-button.tsx | 31 + components/magicui/squares.tsx | 181 +++++ components/magicui/text-reveal.tsx | 23 + dados.txt | 5 + lib/usePortfolioData.ts | 93 +++ lib/utils.ts | 6 + linkedin.md | 175 ++++ next.config.ts | 59 +- package.json | 16 +- pnpm-lock.yaml | 134 +++ public/edev.jpeg | Bin 0 -> 129494 bytes public/manifest.json | 20 + public/portfolio-data.json | 169 ++++ public/robots.txt | 10 + public/sitemap.xml | 39 + tailwind.config.js | 40 + 37 files changed, 3898 insertions(+), 118 deletions(-) create mode 100644 app/components/About.tsx create mode 100644 app/components/Contact.tsx create mode 100644 app/components/ContactForm.tsx create mode 100644 app/components/ContactInfo.tsx create mode 100644 app/components/Experience.tsx create mode 100644 app/components/Header.tsx create mode 100644 app/components/Hero.tsx create mode 100644 app/components/Projects.tsx create mode 100644 app/components/Skills.tsx create mode 100644 app/components/WorkModalities.tsx create mode 100644 components.json create mode 100644 components/magicui/animated-gradient-text.tsx create mode 100644 components/magicui/aurora-text.tsx create mode 100644 components/magicui/bento-grid.tsx create mode 100644 components/magicui/dock.tsx create mode 100644 components/magicui/dot-pattern.tsx create mode 100644 components/magicui/globe.tsx create mode 100644 components/magicui/magic-card.tsx create mode 100644 components/magicui/shimmer-button.tsx create mode 100644 components/magicui/squares.tsx create mode 100644 components/magicui/text-reveal.tsx create mode 100644 dados.txt create mode 100644 lib/usePortfolioData.ts create mode 100644 lib/utils.ts create mode 100644 linkedin.md create mode 100644 public/edev.jpeg create mode 100644 public/manifest.json create mode 100644 public/portfolio-data.json create mode 100644 public/robots.txt create mode 100644 public/sitemap.xml create mode 100644 tailwind.config.js diff --git a/app/components/About.tsx b/app/components/About.tsx new file mode 100644 index 0000000..9d72a01 --- /dev/null +++ b/app/components/About.tsx @@ -0,0 +1,111 @@ +"use client"; + +import { motion } from "motion/react"; +import { MagicCard } from "@/components/magicui/magic-card"; +import { TextReveal } from "@/components/magicui/text-reveal"; + +export default function About() { + return ( +
+
+ +

Sobre Mim

+
+ +
+ {/* Main Description */} + +
+ + Desenvolvedor Full-Stack com 3+ anos de experiência, + especializado em soluções web modernas e inovadoras. Cursando + Engenharia da Computação, com conhecimentos em computação em + nuvem e inteligência artificial. Busco constantemente novos + desafios onde possa aplicar minha paixão por tecnologia e + resolver problemas de forma criativa. + + + + Meu objetivo é entregar soluções de alta qualidade, sempre + priorizando colaboração, ética e inovação. Acredito no poder da + tecnologia para fazer a diferença e estou comprometido com o + aprendizado contínuo e a excelência técnica. + +
+
+ + {/* Soft Skills */} + +

+ Soft Skills +

+ +
+ {[ + { skill: "Comunicação", level: 90 }, + { skill: "Trabalho em Equipe", level: 85 }, + // { skill: "Resolução de Problemas", level: 95 }, + { skill: "Aprendizado Contínuo", level: 90 }, + { skill: "Adaptabilidade", level: 85 }, + ].map((item) => ( +
+
+ {item.skill} + {item.level}% +
+
+
+
+
+ ))} +
+ +
+

+ Destaques +

+
    +
  • +
    + 3+ anos de experiência +
  • +
  • +
    + Engenheiro da Computação +
  • +
  • +
    + Conhecimento em Cloud e IA +
  • +
  • +
    + Ampla gama de conhecimentos +
  • +
+
+ +
+
+
+ ); +} diff --git a/app/components/Contact.tsx b/app/components/Contact.tsx new file mode 100644 index 0000000..5a6bd20 --- /dev/null +++ b/app/components/Contact.tsx @@ -0,0 +1,90 @@ +"use client"; + +import { motion } from "motion/react"; +import { ShimmerButton } from "@/components/magicui/shimmer-button"; +import { useRef, useState } from "react"; +import { usePortfolioData } from "@/lib/usePortfolioData"; +import { ContactForm } from "./ContactForm"; // Importar o novo componente +import { ContactInfo } from "./ContactInfo"; // Importar o novo componente + +export default function Contact() { + const { data } = usePortfolioData(); + const contactSectionRef = useRef(null); + const [formType, setFormType] = useState<"simple" | "advanced">("simple"); // Estado para controlar o tipo de formulário + + const handleWhatsAppClick = () => { + setFormType("simple"); // Redireciona para o formulário simples + if (contactSectionRef.current) { + contactSectionRef.current.scrollIntoView({ behavior: "smooth" }); + } + }; + + const scrollToContact = () => { + if (contactSectionRef.current) { + contactSectionRef.current.scrollIntoView({ behavior: "smooth" }); + } + }; + + if (!data) { + return null; // Ou um componente de carregamento/erro + } + + return ( +
+
+ +

+ Vamos Conversar +

+

+ Estou sempre interessado em novos desafios e oportunidades. Vamos + discutir como posso ajudar seu projeto? +

+
+ +
+ {/* Contact Info */} + + + {/* Contact Options and Map */} +
+ {" "} + {/* Usar o novo componente ContactForm */} + {/* Mapa */} + +

+ Onde me encontrar +

+
+ +
+
+
+
+
+
+ ); +} diff --git a/app/components/ContactForm.tsx b/app/components/ContactForm.tsx new file mode 100644 index 0000000..39e5ada --- /dev/null +++ b/app/components/ContactForm.tsx @@ -0,0 +1,769 @@ +"use client"; + +import { useState, ChangeEvent, FormEvent, useEffect } from "react"; +import { usePortfolioData } from "@/lib/usePortfolioData"; +import { motion } from "motion/react"; + +interface ContactFormProps { + formType: "simple" | "advanced"; + setFormType: (type: "simple" | "advanced") => void; +} + +export function ContactForm({ formType, setFormType }: ContactFormProps) { + const { data } = usePortfolioData(); + const [contactMethod, setContactMethod] = useState<"whatsapp" | "email">( + "whatsapp" + ); + const [userName, setUserName] = useState(""); + const [userEmail, setUserEmail] = useState(""); + const [userPhone, setUserPhone] = useState(""); + const [userCompany, setUserCompany] = useState(""); + const [howFound, setHowFound] = useState(""); + const [projectType, setProjectType] = useState(""); + const [otherProjectType, setOtherProjectType] = useState(""); // Novo estado para "Outro" tipo de projeto + const [desiredDeadline, setDesiredDeadline] = useState(""); + const [budgetValue, setBudgetValue] = useState(""); // Novo estado para o valor do orçamento + const [technicalComplexity, setTechnicalComplexity] = useState(""); + const [hasInternalTeam, setHasInternalTeam] = useState(""); + const [customMessage, setCustomMessage] = useState(""); + const [isDecisor, setIsDecisor] = useState(""); + const [projectApproved, setProjectApproved] = useState(""); + const [urgency, setUrgency] = useState(""); + const [preferredModality, setPreferredModality] = useState(""); + const [isExpanded, setIsExpanded] = useState(false); // Novo estado para controlar a expansão do formulário avançado + const [nameError, setNameError] = useState(null); + const [emailError, setEmailError] = useState(null); + const [phoneError, setPhoneError] = useState(null); + const [otherProjectTypeError, setOtherProjectTypeError] = useState< + string | null + >(null); // Novo estado de erro + const [honeypot, setHoneypot] = useState(""); // Estado para o campo honeypot + const [startTime, setStartTime] = useState(0); // Estado para o tempo de início do formulário + const [nameFocused, setNameFocused] = useState(false); + const [emailFocused, setEmailFocused] = useState(false); + const [phoneFocused, setPhoneFocused] = useState(false); + + useEffect(() => { + setStartTime(Date.now()); // Registra o tempo de carregamento do componente + }, []); + + if (!data) { + return null; // Ou um componente de carregamento/erro + } + + const getGreetingMessageWithUserName = () => { + const hour = new Date().getHours(); + + const baseMessage = (name: string) => { + if (hour >= 8 && hour < 12) { + // Manhã + return `Bom dia Evandro, meu nome é ${name}. Vi seu portfólio e estou interessado nos seus serviços. Podemos conversar?`; + } else if (hour >= 13 && hour < 18) { + // Tarde + return `Boa tarde Evandro, meu nome é ${name}. Vi seu portfólio e estou interessado nos seus serviços. Podemos conversar?`; + } else { + // Noite + return `Olá Evandro, meu nome é ${name}. Vi seu portfólio e estou interessado nos seus serviços. Podemos conversar quando estiver disponível?`; + } + }; + return baseMessage(userName); + }; + + const generateAdvancedMessage = () => { + if (customMessage) return customMessage; + + let message = `Olá Evandro,\n\n`; + message += `Meu nome é ${userName}`; + if (userCompany) { + message += ` e sou de ${userCompany}`; + } + if (howFound) { + message += `. Conheci seu trabalho via ${howFound}`; + } + message += `.\n\n`; + + message += `Estou entrando em contato para discutir um projeto de `; + if (projectType === "outro" && otherProjectType) { + message += `${otherProjectType}`; + } else if (projectType) { + message += `${projectType}`; + } else { + message += `[Tipo de Projeto Não Especificado]`; + } + message += `.\n`; + + if (desiredDeadline) { + message += `O prazo desejado é ${desiredDeadline}.\n`; + } + if (budgetValue) { + message += `O orçamento disponível é ${budgetValue}.\n`; + } + if (technicalComplexity) { + message += `A complexidade técnica estimada é ${technicalComplexity}.\n`; + } + if (hasInternalTeam) { + message += `Já possuímos uma equipe técnica ${hasInternalTeam}.\n`; + } + + message += `\nMeus contatos:\n`; + if (userEmail) { + message += `Email: ${userEmail}\n`; + } + if (userPhone) { + message += `Telefone: ${userPhone}\n`; + } + + message += `\nAguardamos seu retorno para discutir os próximos passos.`; + + return message; + }; + + const handleNameChange = (e: ChangeEvent) => { + setUserName(e.target.value); + if (e.target.value.trim() !== "") setNameError(null); + }; + + const handleEmailChange = (e: ChangeEvent) => { + setUserEmail(e.target.value); + if (e.target.value.trim() !== "") setEmailError(null); + }; + + const handlePhoneChange = (e: ChangeEvent) => { + setUserPhone(e.target.value); + if (e.target.value.trim() !== "") setPhoneError(null); + }; + + const handleNameFocus = () => setNameFocused(true); + const handleEmailFocus = () => setEmailFocused(true); + const handlePhoneFocus = () => setPhoneFocused(true); + + const handleCompanyChange = (e: ChangeEvent) => { + setUserCompany(e.target.value); + }; + + const handleHowFoundChange = (e: ChangeEvent) => { + setHowFound(e.target.value); + }; + + const handleProjectTypeChange = (e: ChangeEvent) => { + setProjectType(e.target.value); + }; + + const handleDesiredDeadlineChange = (e: ChangeEvent) => { + setDesiredDeadline(e.target.value); + }; + + const handleBudgetValueChange = (e: ChangeEvent) => { + setBudgetValue(e.target.value); + }; + + const handleTechnicalComplexityChange = ( + e: ChangeEvent + ) => { + setTechnicalComplexity(e.target.value); + }; + + const handleHasInternalTeamChange = (e: ChangeEvent) => { + setHasInternalTeam(e.target.value); + }; + + const handleMessageChange = (e: ChangeEvent) => { + setCustomMessage(e.target.value); + }; + + const generateWhatsAppUrl = () => { + const message = encodeURIComponent( + formType === "advanced" + ? generateAdvancedMessage() + : customMessage || getGreetingMessageWithUserName() + ); + const phone = data.contact.whatsapp.replace(/\D/g, ""); // Remove caracteres não numéricos + return `https://wa.me/${phone}?text=${message}`; + }; + + const generateEmailUrl = () => { + const subject = encodeURIComponent("Proposta de Projeto - Portfólio"); + const body = encodeURIComponent( + formType === "advanced" + ? generateAdvancedMessage() + : `Nome: ${userName}\nEmail: ${userEmail}\nTelefone: ${userPhone}\nEmpresa/Posição: ${userCompany}\nComo conheceu: ${howFound}\n\nTipo de Projeto: ${projectType}\nPrazo Desejado: ${desiredDeadline}\nOrçamento Disponível: ${budgetValue}\nComplexidade Técnica: ${technicalComplexity}\nTem equipe interna: ${hasInternalTeam}\n\nMensagem: ${ + customMessage || getGreetingMessageWithUserName() + }` + ); + return `mailto:${data.contact.email}?subject=${subject}&body=${body}`; + }; + + const handleSubmit = (e: FormEvent) => { + e.preventDefault(); + + let hasError = false; + if (userName.trim() === "") { + setNameError("Por favor, insira seu nome."); + hasError = true; + } else { + setNameError(null); + } + + const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; + if (!emailRegex.test(userEmail)) { + setEmailError("Por favor, insira um email válido."); + hasError = true; + } else { + setEmailError(null); + } + + if (userPhone.trim() === "") { + setPhoneError("Por favor, insira seu telefone."); + hasError = true; + } else { + setPhoneError(null); + } + + if (projectType === "outro" && otherProjectType.trim() === "") { + setOtherProjectTypeError("Por favor, especifique o tipo de projeto."); + hasError = true; + } else { + setOtherProjectTypeError(null); + } + + // Validação Honeypot + if (honeypot) { + console.log("Honeypot preenchido, provável bot."); + return; // Ignora a submissão + } + + // Validação de tempo de preenchimento (mínimo de 3 segundos) + const timeElapsed = Date.now() - startTime; + if (timeElapsed < 3000) { + console.log("Formulário preenchido muito rápido, provável bot."); + return; // Ignora a submissão + } + + if (hasError) return; + + // Verificação de interação mínima + if (!nameFocused || !emailFocused || !phoneFocused) { + console.log("Campos principais não foram focados, provável bot."); + // Opcional: exibir uma mensagem de erro para o usuário + return; + } + + if (contactMethod === "whatsapp") { + window.open(generateWhatsAppUrl(), "_blank"); + } else { + window.open(generateEmailUrl(), "_blank"); + } + }; + + const getCtaMessage = () => { + if (projectType === "consultoria") { + return "Agendar Consultoria Gratuita"; + } + if (budgetValue && parseFloat(budgetValue.replace(/\D/g, "")) < 2000) { + return "Discutir Soluções de Baixo Custo"; + } + if (projectType && desiredDeadline && budgetValue) { + return "Receber Proposta Personalizada"; + } + return "Enviar Formulário"; + }; + + const getEstimatedValue = () => { + let value = 0; + // Lógica de estimativa baseada nas respostas + switch (projectType) { + case "web-app": + value += 10000; + break; + case "landing-page": + value += 2000; + break; + case "mvp": + value += 5000; + break; + case "iot-app": + value += 15000; + break; + case "integracao": + value += 7000; + break; + case "manutencao": + value += 1000; + break; + case "consultoria": + value += 500; + break; + default: + break; + } + + switch (desiredDeadline) { + case "1-3-weeks": + value *= 1.2; // Urgência aumenta o valor + break; + case "1-2-months": + value *= 1.1; + break; + case "6-plus-months": + value *= 0.9; // Prazo longo pode reduzir o valor + break; + default: + break; + } + + switch (technicalComplexity) { + case "alta": + value *= 1.3; + break; + case "muito-alta": + value *= 1.5; + break; + default: + break; + } + + if (hasInternalTeam === "nao") { + value *= 1.1; // Sem equipe interna pode indicar mais trabalho + } + + // Ajustar pelo valor do orçamento, se aplicável + if (budgetValue) { + const parsedBudget = parseFloat(budgetValue.replace(/\D/g, "")); + if (!isNaN(parsedBudget)) { + // Se o valor estimado for maior que o orçamento fornecido, ajusta para o orçamento + value = Math.min(value, parsedBudget); + } + } + + return value > 0 ? `Estimativa: R$ ${value.toFixed(2)}` : "Estimativa: N/A"; + }; + + return ( + +

+ Preencha o Formulário +

+ +
+ + +
+ + {formType === "simple" ? ( +
+ {/* Campo Honeypot */} +
+ + setHoneypot(e.target.value)} + /> +
+ + {/* Formulário Simples: Apenas Nome */} +
+ + + {nameError && ( +

{nameError}

+ )} +
+ + {/* Botão de Contato para o formulário simples */} + + + +
+ ) : ( +
+ {/* Campo Honeypot */} +
+ + setHoneypot(e.target.value)} + /> +
+ + {/* Dados Básicos */} +
+

+ Dados Básicos +

+
+
+ + + {nameError && ( +

{nameError}

+ )} +
+
+ + + {emailError && ( +

{emailError}

+ )} +
+
+ + + {phoneError && ( +

{phoneError}

+ )} +
+
+ + +
+
+ + +
+
+
+ + {/* Tile de Expandir/Recolher */} +
setIsExpanded(!isExpanded)} + className="p-4 rounded-lg bg-white/5 border border-white/10 text-white cursor-pointer hover:bg-white/10 transition-colors duration-300 mb-6 flex justify-between items-center" + > +

+ {isExpanded + ? "Detalhes do Projeto (Recolher)" + : "Detalhes do Projeto (Expandir)"} +

+ + + +
+ +
+ {/* Conteúdo do Formulário Avançado */} + {/* Sobre o Projeto */} +
+

+ Sobre o Projeto +

+
+
+ + +
+ {projectType === "outro" && ( +
+ + { + setOtherProjectType(e.target.value); + if (e.target.value.trim() !== "") + setOtherProjectTypeError(null); + }} + required + /> + {otherProjectTypeError && ( +

+ {otherProjectTypeError} +

+ )} +
+ )} +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + {/* Custom Message Input */} +
+ + +
+
+ + {/* Contact Button */} + + + + {projectType && desiredDeadline && budgetValue && ( +

+ {getEstimatedValue()} +

+ )} +
+ )} +
+ ); +} diff --git a/app/components/ContactInfo.tsx b/app/components/ContactInfo.tsx new file mode 100644 index 0000000..7759495 --- /dev/null +++ b/app/components/ContactInfo.tsx @@ -0,0 +1,128 @@ +"use client"; + +import { motion } from "motion/react"; +import { Mail, MessageCircle } from "lucide-react"; +import { usePortfolioData } from "@/lib/usePortfolioData"; + +interface ContactInfoProps { + onWhatsAppClick: () => void; +} + +export function ContactInfo({ onWhatsAppClick }: ContactInfoProps) { + const { data } = usePortfolioData(); + + if (!data) { + return null; // Ou um componente de carregamento/erro + } + + return ( + + + +
+

+ Localização +

+

📍 {data.contact.location}

+

+ Disponível para projetos remotos e trabalho presencial na região. +

+
+ + {/* Timeline de Resposta (Placeholder) */} +
+

+ Timeline de Resposta +

+

+ Em breve, uma timeline detalhada do processo de contato e resposta. +

+
+
+ ); +} diff --git a/app/components/Experience.tsx b/app/components/Experience.tsx new file mode 100644 index 0000000..8a65dc9 --- /dev/null +++ b/app/components/Experience.tsx @@ -0,0 +1,123 @@ +"use client"; + +import { motion } from "motion/react"; +import { BentoGrid, BentoGridItem } from "@/components/magicui/bento-grid"; +import { Calendar, MapPin, Briefcase } from "lucide-react"; +import { usePortfolioData } from "@/lib/usePortfolioData"; + +export default function Experience() { + const { data, loading, error } = usePortfolioData(); + + if (loading) { + return ( +
+
+
+
+
+
+
+
+ ); + } + + if (error || !data) { + return ( +
+
+

Erro ao carregar dados de experiência.

+
+
+ ); + } + + const experiences = data.experiences.filter((exp) => exp.featured); + + return ( +
+
+ +

+ Experiência Profissional +

+

+ Minha jornada profissional em desenvolvimento de software e soluções + tecnológicas +

+
+ + + {experiences.map((exp, index) => ( + +
+ {/* Header */} +
+
+

+ {exp.title} +

+

{exp.company}

+
+
+ + {exp.period} +
+ {exp.location && ( +
+ + {exp.location} +
+ )} +
+ + {exp.type} +
+
+
+
+ + {/* Description */} +

+ {exp.description} +

+ + {/* Achievements */} + {exp.achievements.length > 0 && ( +
+

+ Principais Conquistas: +

+
    + {exp.achievements.map((achievement, idx) => ( +
  • +
    + {achievement} +
  • + ))} +
+
+ )} +
+
+ ))} +
+
+
+ ); +} diff --git a/app/components/Header.tsx b/app/components/Header.tsx new file mode 100644 index 0000000..fab0c09 --- /dev/null +++ b/app/components/Header.tsx @@ -0,0 +1,151 @@ +"use client"; + +import { motion } from "motion/react"; +import { CalendarIcon, HomeIcon, MailIcon, PencilIcon } from "lucide-react"; +import Link from "next/link"; +import React from "react"; + +import { cn } from "@/lib/utils"; +import { Dock, DockIcon } from "@/components/magicui/dock"; + +export type IconProps = React.HTMLAttributes; + +const Icons = { + calendar: (props: IconProps) => , + email: (props: IconProps) => , + linkedin: (props: IconProps) => ( + + LinkedIn + + + ), + x: (props: IconProps) => ( + + X + + + ), + youtube: (props: IconProps) => ( + + youtube + + + ), + github: (props: IconProps) => ( + + + + ), +}; + +const DATA = { + navbar: [ + { href: "#", icon: HomeIcon, label: "Home" }, + { href: "#", icon: PencilIcon, label: "Blog" }, + ], + contact: { + social: { + GitHub: { + name: "GitHub", + url: "#", + icon: Icons.github, + }, + LinkedIn: { + name: "LinkedIn", + url: "#", + icon: Icons.linkedin, + }, + X: { + name: "X", + url: "#", + icon: Icons.x, + }, + email: { + name: "Send Email", + url: "#", + icon: Icons.email, + }, + }, + }, +}; + +export function Header() { + return ( + + + + ); +} diff --git a/app/components/Hero.tsx b/app/components/Hero.tsx new file mode 100644 index 0000000..f50dbdb --- /dev/null +++ b/app/components/Hero.tsx @@ -0,0 +1,203 @@ +"use client"; + +import { motion } from "motion/react"; +import Image from "next/image"; +import { AuroraText } from "@/components/magicui/aurora-text"; +import { AnimatedGradientText } from "@/components/magicui/animated-gradient-text"; +import { useEffect } from "react"; + +export default function Hero() { + const getGreetingMessage = () => { + const hour = new Date().getHours(); + + if (hour >= 8 && hour < 12) { + // Manhã + return "Olá! Vi seu portfólio e estou interessado nos seus serviços. Podemos conversar?"; + } else if (hour >= 13 && hour < 18) { + // Tarde + return "Boa tarde! Vi seu portfólio e estou interessado nos seus serviços. Podemos conversar?"; + } else { + // Noite + return "Olá! Vi seu portfólio e estou interessado nos seus serviços. Podemos conversar quando estiver disponível?"; + } + }; + + const generateWhatsAppUrl = () => { + const message = encodeURIComponent(getGreetingMessage()); + const phone = "5547992742365"; // Número sem formatação + return `https://wa.me/${phone}?text=${message}`; + }; + + const scrollToContact = () => { + const contactSection = document.getElementById("contact"); + if (contactSection) { + contactSection.scrollIntoView({ behavior: "smooth" }); + } + }; + + return ( +
+ {/* Background Pattern */} +
+ +
+ {/* Profile Image */} + +
+ Evandro Fonseca Junior - Desenvolvedor Full-Stack +
+
+ + {/* Name and Title */} + +

+ Evandro Fonseca Junior +

+ + Desenvolvedor Full-Stack + +
+ + {/* Description */} + + Especialista em soluções web modernas e inovadoras. Formado em + Engenharia da Computação, com conhecimentos sólidos em computação em + nuvem e inteligência artificial. + + + {/* Location */} + + 📍 Garuva, Santa Catarina, Brasil + + + {/* Social Icons */} + + + + + + + + + + + + { + e.preventDefault(); + scrollToContact(); + }} + className="text-gray-400 hover:text-green-400 transition-colors" + aria-label="WhatsApp" + > + + + + + { + e.preventDefault(); + scrollToContact(); + }} + className="text-gray-400 hover:text-blue-400 transition-colors" + aria-label="Email" + > + + + + + + + {/* CTA Button */} + + + Vamos Trabalhar Juntos + + +
+ + {/* Scroll Indicator */} + +
+ +
+
+
+ ); +} diff --git a/app/components/Projects.tsx b/app/components/Projects.tsx new file mode 100644 index 0000000..fe96e4d --- /dev/null +++ b/app/components/Projects.tsx @@ -0,0 +1,134 @@ +"use client"; + +import { motion } from "motion/react"; +import { BentoGrid, BentoGridItem } from "@/components/magicui/bento-grid"; +import { ExternalLink, Github } from "lucide-react"; +import { usePortfolioData } from "@/lib/usePortfolioData"; + +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 +

+

+ Alguns dos projetos que desenvolvi, demonstrando minhas habilidades + e paixão por tecnologia +

+
+ + + {projects.map((project, index) => ( + +
+ {/* Header */} +
+
+

+ {project.title} +

+
+ {project.technologies.map((tech) => ( + + {tech} + + ))} +
+
+ +
+ + {/* Description */} +

+ {project.description} +

+ + {/* Features */} +
+

+ Funcionalidades: +

+
    + {project.features.map((feature, idx) => ( +
  • +
    + {feature} +
  • + ))} +
+
+ + {/* Status */} +
+ + {project.status} + +
+
+
+ ))} +
+
+
+ ); +} diff --git a/app/components/Skills.tsx b/app/components/Skills.tsx new file mode 100644 index 0000000..07077d7 --- /dev/null +++ b/app/components/Skills.tsx @@ -0,0 +1,135 @@ +"use client"; + +import { motion } from "motion/react"; +import { MagicCard } from "@/components/magicui/magic-card"; +import { + Code, + Database, + Cloud, + Cpu, + Smartphone, + Zap, + GitBranch, + TestTube, +} from "lucide-react"; +import { usePortfolioData } from "@/lib/usePortfolioData"; + +// Mapa de ícones para as categorias +const iconMap = { + Code: Code, + Database: Database, + Cloud: Cloud, + Cpu: Cpu, + Smartphone: Smartphone, + Zap: Zap, + GitBranch: GitBranch, + TestTube: TestTube, +}; + +// Mapa de cores para garantir que o Tailwind inclua as classes no bundle +const colorMap = { + "text-blue-440": "bg-blue-400", + "text-blue-400": "bg-blue-400", + "text-green-400": "bg-blue-400", + "text-purple-400": "bg-blue-400", + "text-red-400": "bg-blue-400", + "text-yellow-400": "bg-blue-400", + "text-pink-400": "bg-blue-400", + "text-indigo-400": "bg-blue-400", +}; + +export default function Skills() { + const { data, loading, error } = usePortfolioData(); + + if (loading) { + return ( +
+
+
+
+
+
+
+
+ ); + } + + if (error || !data) { + return ( +
+
+

Erro ao carregar dados de habilidades.

+
+
+ ); + } + + const skillCategories = data.skills.technical; + + return ( +
+
+ +

+ Habilidades Técnicas +

+

+ Tecnologias e ferramentas que utilizo para criar soluções inovadoras +

+
+ +
+ {skillCategories.map((category, index) => { + const IconComponent = + iconMap[category.icon as keyof typeof iconMap] || Code; + return ( + +
+ {/* Header */} +
+
+ +
+

+ {category.category} +

+
+ + {/* Skills List */} +
+ {category.skills.map((skill, skillIndex) => ( +
+
+ {skill} +
+ ))} +
+
+ + ); + })} +
+
+
+ ); +} diff --git a/app/components/WorkModalities.tsx b/app/components/WorkModalities.tsx new file mode 100644 index 0000000..6f41760 --- /dev/null +++ b/app/components/WorkModalities.tsx @@ -0,0 +1,126 @@ +"use client"; + +import { motion } from "motion/react"; +import { Briefcase, Clock, DollarSign, HardHat, Lightbulb } from "lucide-react"; + +const WorkModalitiesData = [ + { + title: "Desenvolvimento por Demanda", + value: "A partir de R$ 50/hora", + idealFor: + "Empresas que buscam otimização rápida, startups com necessidades urgentes ou projetos que exigem intervenção especializada e focada.", + description: + "Soluções ágeis e focadas para desafios específicos. Ideal para otimizar recursos e obter resultados rápidos sem compromissos de longo prazo. Sua visão, minha expertise, entregas pontuais.", + icon: Clock, + color: "blue", + }, + { + title: "Retainer Mensal", + value: "Sob consulta (pacotes personalizados)", + idealFor: + "Negócios que valorizam estabilidade, crescimento planejado e acesso contínuo a um especialista dedicado para impulsionar sua inovação.", + description: + "Parceria estratégica para evolução contínua e suporte prioritário. Garanta acesso exclusivo à minha expertise para manutenção, novas funcionalidades e consultoria estratégica, com um compromisso de longo prazo que otimiza seu investimento.", + icon: Briefcase, + color: "green", + }, + { + title: "Consultoria Especializada", + value: "Sob consulta (projetos de alto impacto)", + idealFor: + "Líderes de tecnologia e empresas visionárias que enfrentam gargalos técnicos ou buscam validação e aprimoramento de suas estratégias de desenvolvimento.", + description: + "Direcionamento estratégico e técnico para desafios complexos. Minha experiência em arquitetura de sistemas, IoT e otimização de performance é o diferencial para transformar suas ideias em soluções robustas e escaláveis. Ideal para quem busca excelência e inovação.", + icon: Lightbulb, + color: "purple", + }, + { + title: "Desenvolvimento Completo", + value: "A partir de R$ 5.000 (investimento inicial)", + idealFor: + "Empreendedores e empresas que precisam de um parceiro para construir soluções digitais do zero, com a garantia de um produto de alta qualidade e impacto.", + description: + "Da concepção à entrega, seu projeto ganha vida com uma solução completa e personalizada. Garanto um processo transparente, com foco em performance, segurança e escalabilidade, para que você tenha um produto final que realmente se destaque no mercado.", + icon: HardHat, + color: "orange", + }, + { + title: "Projetos Fechados", + value: "A partir de R$ 5.000 (soluções sob medida)", + idealFor: + "Clientes com necessidades claras e orçamentos específicos, que buscam uma entrega eficiente e sem surpresas para projetos de médio porte.", + description: + "Soluções com escopo e prazo definidos para resultados previsíveis. Ideal para quem busca agilidade e clareza no investimento, com a certeza de uma entrega que atende exatamente às suas expectativas e impulsiona seus objetivos.", + icon: DollarSign, + color: "red", + }, +]; + +export function WorkModalities() { + return ( +
+ +

+ Minhas Modalidades de Trabalho +

+

+ Escolha a opção que melhor se encaixa nas suas necessidades. +

+
+ +
+ {WorkModalitiesData.map((modality, index) => ( + +
+ +
+

{modality.title}

+

+ {modality.value} +

+

{modality.description}

+

+ Ideal para:{" "} + {modality.idealFor} +

+
+ ))} +
+
+ ); +} diff --git a/app/globals.css b/app/globals.css index a2dc41e..3c7d0b1 100644 --- a/app/globals.css +++ b/app/globals.css @@ -1,26 +1,167 @@ @import "tailwindcss"; +@import "tw-animate-css"; -:root { - --background: #ffffff; - --foreground: #171717; -} +@custom-variant dark (&:is(.dark *)); @theme inline { --color-background: var(--background); --color-foreground: var(--foreground); --font-sans: var(--font-geist-sans); --font-mono: var(--font-geist-mono); -} - -@media (prefers-color-scheme: dark) { - :root { - --background: #0a0a0a; - --foreground: #ededed; + --color-sidebar-ring: var(--sidebar-ring); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar: var(--sidebar); + --color-chart-5: var(--chart-5); + --color-chart-4: var(--chart-4); + --color-chart-3: var(--chart-3); + --color-chart-2: var(--chart-2); + --color-chart-1: var(--chart-1); + --color-ring: var(--ring); + --color-input: var(--input); + --color-border: var(--border); + --color-destructive: var(--destructive); + --color-accent-foreground: var(--accent-foreground); + --color-accent: var(--accent); + --color-muted-foreground: var(--muted-foreground); + --color-muted: var(--muted); + --color-secondary-foreground: var(--secondary-foreground); + --color-secondary: var(--secondary); + --color-primary-foreground: var(--primary-foreground); + --color-primary: var(--primary); + --color-popover-foreground: var(--popover-foreground); + --color-popover: var(--popover); + --color-card-foreground: var(--card-foreground); + --color-card: var(--card); + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); + --animate-aurora: aurora 8s ease-in-out infinite alternate; + @keyframes aurora { + 0% { + background-position: 0% 50%; + transform: rotate(-5deg) scale(0.9); + } + 25% { + background-position: 50% 100%; + transform: rotate(5deg) scale(1.1); + } + 50% { + background-position: 100% 50%; + transform: rotate(-3deg) scale(0.95); + } + 75% { + background-position: 50% 0%; + transform: rotate(3deg) scale(1.05); + } + 100% { + background-position: 0% 50%; + transform: rotate(-5deg) scale(0.9); + } } } -body { - background: var(--background); - color: var(--foreground); - font-family: Arial, Helvetica, sans-serif; +:root { + --radius: 0.625rem; + --background: oklch(1 0 0); + --foreground: oklch(0.145 0 0); + --card: oklch(1 0 0); + --card-foreground: oklch(0.145 0 0); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.145 0 0); + --primary: oklch(0.205 0 0); + --primary-foreground: oklch(0.985 0 0); + --secondary: oklch(0.97 0 0); + --secondary-foreground: oklch(0.205 0 0); + --muted: oklch(0.97 0 0); + --muted-foreground: oklch(0.556 0 0); + --accent: oklch(0.97 0 0); + --accent-foreground: oklch(0.205 0 0); + --destructive: oklch(0.577 0.245 27.325); + --border: oklch(0.922 0 0); + --input: oklch(0.922 0 0); + --ring: oklch(0.708 0 0); + --blue-primary: #4facfe; /* Nova cor azul primária */ + --chart-1: oklch(0.646 0.222 41.116); + --chart-2: oklch(0.6 0.118 184.704); + --chart-3: oklch(0.398 0.07 227.392); + --chart-4: oklch(0.828 0.189 84.429); + --chart-5: oklch(0.769 0.188 70.08); + --sidebar: oklch(0.985 0 0); + --sidebar-foreground: oklch(0.145 0 0); + --sidebar-primary: oklch(0.205 0 0); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.97 0 0); + --sidebar-accent-foreground: oklch(0.205 0 0); + --sidebar-border: oklch(0.922 0 0); + --sidebar-ring: oklch(0.708 0 0); +} + +.dark { + --background: oklch(0.145 0 0); + --foreground: oklch(0.985 0 0); + --card: oklch(0.205 0 0); + --card-foreground: oklch(0.985 0 0); + --popover: oklch(0.205 0 0); + --popover-foreground: oklch(0.985 0 0); + --primary: oklch(0.922 0 0); + --primary-foreground: oklch(0.205 0 0); + --secondary: oklch(0.269 0 0); + --secondary-foreground: oklch(0.985 0 0); + --muted: oklch(0.269 0 0); + --muted-foreground: oklch(0.708 0 0); + --accent: oklch(0.269 0 0); + --accent-foreground: oklch(0.985 0 0); + --destructive: oklch(0.704 0.191 22.216); + --border: oklch(1 0 0 / 10%); + --input: oklch(1 0 0 / 15%); + --ring: oklch(0.556 0 0); + --blue-primary: #4facfe; /* Nova cor azul primária */ + --chart-1: oklch(0.488 0.243 264.376); + --chart-2: oklch(0.696 0.17 162.48); + --chart-3: oklch(0.769 0.188 70.08); + --chart-4: oklch(0.627 0.265 303.9); + --chart-5: oklch(0.645 0.246 16.439); + --sidebar: oklch(0.205 0 0); + --sidebar-foreground: oklch(0.985 0 0); + --sidebar-primary: oklch(0.488 0.243 264.376); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.269 0 0); + --sidebar-accent-foreground: oklch(0.985 0 0); + --sidebar-border: oklch(1 0 0 / 10%); + --sidebar-ring: oklch(0.556 0 0); +} + +@layer base { + * { + @apply border-border outline-ring/50; + } + body { + @apply bg-background text-foreground; + } +} + +@layer utilities { + .animate-shimmer { + animation: shimmer 2s linear infinite; + } + + @keyframes shimmer { + 0% { + transform: translateX(-100%); + } + 100% { + transform: translateX(100%); + } + } +} + +html { + scroll-behavior: smooth; /* Adicionar rolagem suave */ + scroll-padding-top: 64px; /* Altura do cabeçalho fixo */ } diff --git a/app/layout.tsx b/app/layout.tsx index f7fa87e..c2c578c 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -13,8 +13,59 @@ const geistMono = Geist_Mono({ }); export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", + title: "Evandro Fonseca Junior - Desenvolvedor Full-Stack", + description: + "Desenvolvedor Full-Stack especializado em soluções web modernas com Angular, React, Node.js e computação em nuvem. Experiência em energia renovável e IoT.", + keywords: [ + "desenvolvedor", + "full-stack", + "angular", + "react", + "node.js", + "typescript", + "computação em nuvem", + "iot", + "energia renovável", + ], + authors: [{ name: "Evandro Fonseca Junior" }], + creator: "Evandro Fonseca Junior", + publisher: "Evandro Fonseca Junior", + formatDetection: { + email: false, + address: false, + telephone: false, + }, + metadataBase: new URL("https://evandrofonsecajunior.dev"), + alternates: { + canonical: "/", + }, + openGraph: { + title: "Evandro Fonseca Junior - Desenvolvedor Full-Stack", + description: + "Desenvolvedor Full-Stack especializado em soluções web modernas com Angular, React, Node.js e computação em nuvem.", + url: "https://evandrofonsecajunior.dev", + siteName: "Evandro Fonseca Junior", + locale: "pt_BR", + type: "website", + }, + twitter: { + card: "summary_large_image", + title: "Evandro Fonseca Junior - Desenvolvedor Full-Stack", + description: + "Desenvolvedor Full-Stack especializado em soluções web modernas com Angular, React, Node.js e computação em nuvem.", + creator: "@evandrodevbr", + }, + robots: { + index: true, + follow: true, + googleBot: { + index: true, + follow: true, + "max-video-preview": -1, + "max-image-preview": "large", + "max-snippet": -1, + }, + }, }; export default function RootLayout({ @@ -23,7 +74,51 @@ export default function RootLayout({ children: React.ReactNode; }>) { return ( - + + + {/* Preconnect to external origins for better performance */} + + + + + + + {/* DNS prefetch for additional performance */} + + + + + + + {/* Favicon and icons */} + + + + + {/* SEO and Crawling */} + + + {/* Theme color for mobile browsers */} + + + + + + + {/* Performance hints */} + + + diff --git a/app/page.tsx b/app/page.tsx index 21b686d..36fb1df 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,103 +1,78 @@ -import Image from "next/image"; +import dynamic from "next/dynamic"; +import { Header } from "./components/Header"; +import { Squares } from "@/components/magicui/squares"; +import { WorkModalities } from "./components/WorkModalities"; // Importar WorkModalities + +// Lazy load components for better performance +const Hero = dynamic(() => import("./components/Hero"), { + loading: () => ( +
+
Carregando...
+
+ ), +}); + +const About = dynamic(() => import("./components/About"), { + loading: () => ( +
+
Carregando seção...
+
+ ), +}); + +const Skills = dynamic(() => import("./components/Skills"), { + loading: () => ( +
+
Carregando habilidades...
+
+ ), +}); + +const Experience = dynamic(() => import("./components/Experience"), { + loading: () => ( +
+
Carregando experiência...
+
+ ), +}); + +const Projects = dynamic(() => import("./components/Projects"), { + loading: () => ( +
+
Carregando projetos...
+
+ ), +}); + +const Contact = dynamic(() => import("./components/Contact"), { + loading: () => ( +
+
Carregando contato...
+
+ ), +}); export default function Home() { return ( -
-
- Next.js logo -
    -
  1. - Get started by editing{" "} - - app/page.tsx - - . -
  2. -
  3. - Save and see your changes instantly. -
  4. -
- - +
+ +
+
+ + + + + + {/* Adicionar WorkModalities aqui */} +
-
); } diff --git a/components.json b/components.json new file mode 100644 index 0000000..26ad91e --- /dev/null +++ b/components.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "", + "css": "app/globals.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "iconLibrary": "lucide", + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + } +} diff --git a/components/magicui/animated-gradient-text.tsx b/components/magicui/animated-gradient-text.tsx new file mode 100644 index 0000000..b2c05dd --- /dev/null +++ b/components/magicui/animated-gradient-text.tsx @@ -0,0 +1,36 @@ +"use client"; + +import { motion } from "motion/react"; +import { cn } from "@/lib/utils"; + +interface AnimatedGradientTextProps { + children: React.ReactNode; + className?: string; +} + +export function AnimatedGradientText({ + children, + className, +}: AnimatedGradientTextProps) { + return ( + + {children} + + ); +} diff --git a/components/magicui/aurora-text.tsx b/components/magicui/aurora-text.tsx new file mode 100644 index 0000000..f774f9b --- /dev/null +++ b/components/magicui/aurora-text.tsx @@ -0,0 +1,33 @@ +"use client"; + +import { motion } from "motion/react"; +import { cn } from "@/lib/utils"; + +interface AuroraTextProps { + children: React.ReactNode; + className?: string; +} + +export function AuroraText({ children, className }: AuroraTextProps) { + return ( + + {children} + + ); +} diff --git a/components/magicui/bento-grid.tsx b/components/magicui/bento-grid.tsx new file mode 100644 index 0000000..2e7dd2b --- /dev/null +++ b/components/magicui/bento-grid.tsx @@ -0,0 +1,54 @@ +"use client"; + +import { motion } from "motion/react"; +import { cn } from "@/lib/utils"; + +interface BentoGridProps { + children: React.ReactNode; + className?: string; +} + +interface BentoGridItemProps { + children: React.ReactNode; + className?: string; + colSpan?: number; + rowSpan?: number; +} + +export function BentoGrid({ children, className }: BentoGridProps) { + return ( +
+ {children} +
+ ); +} + +export function BentoGridItem({ + children, + className, + colSpan = 1, + rowSpan = 1, +}: BentoGridItemProps) { + return ( + +
+
{children}
+ + ); +} diff --git a/components/magicui/dock.tsx b/components/magicui/dock.tsx new file mode 100644 index 0000000..ca40afe --- /dev/null +++ b/components/magicui/dock.tsx @@ -0,0 +1,153 @@ +"use client"; + +import { cva, type VariantProps } from "class-variance-authority"; +import { + motion, + MotionValue, + useMotionValue, + useSpring, + useTransform, +} from "motion/react"; +import type { MotionProps } from "motion/react"; +import React, { PropsWithChildren, useRef } from "react"; + +import { cn } from "@/lib/utils"; + +export interface DockProps extends VariantProps { + className?: string; + iconSize?: number; + iconMagnification?: number; + disableMagnification?: boolean; + iconDistance?: number; + direction?: "top" | "middle" | "bottom"; + children: React.ReactNode; +} + +const DEFAULT_SIZE = 40; +const DEFAULT_MAGNIFICATION = 60; +const DEFAULT_DISTANCE = 140; +const DEFAULT_DISABLEMAGNIFICATION = false; + +const dockVariants = cva( + "supports-backdrop-blur:bg-white/10 supports-backdrop-blur:dark:bg-black/10 mx-auto mt-8 flex h-[58px] w-max items-center justify-center gap-2 rounded-2xl border p-2 backdrop-blur-md", +); + +const Dock = React.forwardRef( + ( + { + className, + children, + iconSize = DEFAULT_SIZE, + iconMagnification = DEFAULT_MAGNIFICATION, + disableMagnification = DEFAULT_DISABLEMAGNIFICATION, + iconDistance = DEFAULT_DISTANCE, + direction = "middle", + ...props + }, + ref, + ) => { + const mouseX = useMotionValue(Infinity); + + const renderChildren = () => { + return React.Children.map(children, (child) => { + if ( + React.isValidElement(child) && + child.type === DockIcon + ) { + return React.cloneElement(child, { + ...child.props, + mouseX: mouseX, + size: iconSize, + magnification: iconMagnification, + disableMagnification: disableMagnification, + distance: iconDistance, + }); + } + return child; + }); + }; + + return ( + mouseX.set(e.pageX)} + onMouseLeave={() => mouseX.set(Infinity)} + {...props} + className={cn(dockVariants({ className }), { + "items-start": direction === "top", + "items-center": direction === "middle", + "items-end": direction === "bottom", + })} + > + {renderChildren()} + + ); + }, +); + +Dock.displayName = "Dock"; + +export interface DockIconProps + extends Omit, "children"> { + size?: number; + magnification?: number; + disableMagnification?: boolean; + distance?: number; + mouseX?: MotionValue; + className?: string; + children?: React.ReactNode; + props?: PropsWithChildren; +} + +const DockIcon = ({ + size = DEFAULT_SIZE, + magnification = DEFAULT_MAGNIFICATION, + disableMagnification, + distance = DEFAULT_DISTANCE, + mouseX, + className, + children, + ...props +}: DockIconProps) => { + const ref = useRef(null); + const padding = Math.max(6, size * 0.2); + const defaultMouseX = useMotionValue(Infinity); + + const distanceCalc = useTransform(mouseX ?? defaultMouseX, (val: number) => { + const bounds = ref.current?.getBoundingClientRect() ?? { x: 0, width: 0 }; + return val - bounds.x - bounds.width / 2; + }); + + const targetSize = disableMagnification ? size : magnification; + + const sizeTransform = useTransform( + distanceCalc, + [-distance, 0, distance], + [size, targetSize, size], + ); + + const scaleSize = useSpring(sizeTransform, { + mass: 0.1, + stiffness: 150, + damping: 12, + }); + + return ( + +
{children}
+
+ ); +}; + +DockIcon.displayName = "DockIcon"; + +export { Dock, DockIcon, dockVariants }; diff --git a/components/magicui/dot-pattern.tsx b/components/magicui/dot-pattern.tsx new file mode 100644 index 0000000..f115a13 --- /dev/null +++ b/components/magicui/dot-pattern.tsx @@ -0,0 +1,158 @@ +"use client"; + +import { cn } from "@/lib/utils"; +import { motion } from "motion/react"; +import React, { useEffect, useId, useRef, useState } from "react"; + +/** + * DotPattern Component Props + * + * @param {number} [width=16] - The horizontal spacing between dots + * @param {number} [height=16] - The vertical spacing between dots + * @param {number} [x=0] - The x-offset of the entire pattern + * @param {number} [y=0] - The y-offset of the entire pattern + * @param {number} [cx=1] - The x-offset of individual dots + * @param {number} [cy=1] - The y-offset of individual dots + * @param {number} [cr=1] - The radius of each dot + * @param {string} [className] - Additional CSS classes to apply to the SVG container + * @param {boolean} [glow=false] - Whether dots should have a glowing animation effect + */ +interface DotPatternProps extends React.SVGProps { + width?: number; + height?: number; + x?: number; + y?: number; + cx?: number; + cy?: number; + cr?: number; + className?: string; + glow?: boolean; + [key: string]: unknown; +} + +/** + * DotPattern Component + * + * A React component that creates an animated or static dot pattern background using SVG. + * The pattern automatically adjusts to fill its container and can optionally display glowing dots. + * + * @component + * + * @see DotPatternProps for the props interface. + * + * @example + * // Basic usage + * + * + * // With glowing effect and custom spacing + * + * + * @notes + * - The component is client-side only ("use client") + * - Automatically responds to container size changes + * - When glow is enabled, dots will animate with random delays and durations + * - Uses Motion for animations + * - Dots color can be controlled via the text color utility classes + */ + +export function DotPattern({ + width = 16, + height = 16, + x = 0, + y = 0, + cx = 1, + cy = 1, + cr = 1, + className, + glow = false, + ...props +}: DotPatternProps) { + const id = useId(); + const containerRef = useRef(null); + const [dimensions, setDimensions] = useState({ width: 0, height: 0 }); + + useEffect(() => { + const updateDimensions = () => { + if (containerRef.current) { + const { width, height } = containerRef.current.getBoundingClientRect(); + setDimensions({ width, height }); + } + }; + + updateDimensions(); + window.addEventListener("resize", updateDimensions); + return () => window.removeEventListener("resize", updateDimensions); + }, []); + + const dots = Array.from( + { + length: + Math.ceil(dimensions.width / width) * + Math.ceil(dimensions.height / height), + }, + (_, i) => { + const col = i % Math.ceil(dimensions.width / width); + const row = Math.floor(i / Math.ceil(dimensions.width / width)); + return { + x: col * width + cx, + y: row * height + cy, + delay: Math.random() * 5, + duration: Math.random() * 3 + 2, + }; + }, + ); + + return ( + + ); +} diff --git a/components/magicui/globe.tsx b/components/magicui/globe.tsx new file mode 100644 index 0000000..4cd6e03 --- /dev/null +++ b/components/magicui/globe.tsx @@ -0,0 +1,128 @@ +"use client"; + +import createGlobe, { COBEOptions } from "cobe"; +import { useMotionValue, useSpring } from "motion/react"; +import { useEffect, useRef } from "react"; + +import { cn } from "@/lib/utils"; + +const MOVEMENT_DAMPING = 1400; + +const GLOBE_CONFIG: COBEOptions = { + width: 800, + height: 800, + onRender: () => {}, + devicePixelRatio: 2, + phi: 0, + theta: 0.3, + dark: 0, + diffuse: 0.4, + mapSamples: 16000, + mapBrightness: 1.2, + baseColor: [1, 1, 1], + markerColor: [251 / 255, 100 / 255, 21 / 255], + glowColor: [1, 1, 1], + markers: [ + { location: [14.5995, 120.9842], size: 0.03 }, + { location: [19.076, 72.8777], size: 0.1 }, + { location: [23.8103, 90.4125], size: 0.05 }, + { location: [30.0444, 31.2357], size: 0.07 }, + { location: [39.9042, 116.4074], size: 0.08 }, + { location: [-23.5505, -46.6333], size: 0.1 }, + { location: [19.4326, -99.1332], size: 0.1 }, + { location: [40.7128, -74.006], size: 0.1 }, + { location: [34.6937, 135.5022], size: 0.05 }, + { location: [41.0082, 28.9784], size: 0.06 }, + ], +}; + +export function Globe({ + className, + config = GLOBE_CONFIG, +}: { + className?: string; + config?: COBEOptions; +}) { + let phi = 0; + let width = 0; + const canvasRef = useRef(null); + const pointerInteracting = useRef(null); + const pointerInteractionMovement = useRef(0); + + const r = useMotionValue(0); + const rs = useSpring(r, { + mass: 1, + damping: 30, + stiffness: 100, + }); + + const updatePointerInteraction = (value: number | null) => { + pointerInteracting.current = value; + if (canvasRef.current) { + canvasRef.current.style.cursor = value !== null ? "grabbing" : "grab"; + } + }; + + const updateMovement = (clientX: number) => { + if (pointerInteracting.current !== null) { + const delta = clientX - pointerInteracting.current; + pointerInteractionMovement.current = delta; + r.set(r.get() + delta / MOVEMENT_DAMPING); + } + }; + + useEffect(() => { + const onResize = () => { + if (canvasRef.current) { + width = canvasRef.current.offsetWidth; + } + }; + + window.addEventListener("resize", onResize); + onResize(); + + const globe = createGlobe(canvasRef.current!, { + ...config, + width: width * 2, + height: width * 2, + onRender: (state) => { + if (!pointerInteracting.current) phi += 0.005; + state.phi = phi + rs.get(); + state.width = width * 2; + state.height = width * 2; + }, + }); + + setTimeout(() => (canvasRef.current!.style.opacity = "1"), 0); + return () => { + globe.destroy(); + window.removeEventListener("resize", onResize); + }; + }, [rs, config]); + + return ( +
+ { + pointerInteracting.current = e.clientX; + updatePointerInteraction(e.clientX); + }} + onPointerUp={() => updatePointerInteraction(null)} + onPointerOut={() => updatePointerInteraction(null)} + onMouseMove={(e) => updateMovement(e.clientX)} + onTouchMove={(e) => + e.touches[0] && updateMovement(e.touches[0].clientX) + } + /> +
+ ); +} diff --git a/components/magicui/magic-card.tsx b/components/magicui/magic-card.tsx new file mode 100644 index 0000000..adc52f0 --- /dev/null +++ b/components/magicui/magic-card.tsx @@ -0,0 +1,25 @@ +"use client"; + +import { motion } from "motion/react"; +import { cn } from "@/lib/utils"; + +interface MagicCardProps { + children: React.ReactNode; + className?: string; +} + +export function MagicCard({ children, className }: MagicCardProps) { + return ( + +
+ {children} + + ); +} diff --git a/components/magicui/shimmer-button.tsx b/components/magicui/shimmer-button.tsx new file mode 100644 index 0000000..8687238 --- /dev/null +++ b/components/magicui/shimmer-button.tsx @@ -0,0 +1,31 @@ +"use client"; + +import { motion } from "motion/react"; +import { cn } from "@/lib/utils"; + +interface ShimmerButtonProps { + children: React.ReactNode; + className?: string; + onClick?: () => void; +} + +export function ShimmerButton({ + children, + className, + onClick, +}: ShimmerButtonProps) { + return ( + +
+ {children} + + ); +} diff --git a/components/magicui/squares.tsx b/components/magicui/squares.tsx new file mode 100644 index 0000000..6f7b9e0 --- /dev/null +++ b/components/magicui/squares.tsx @@ -0,0 +1,181 @@ +"use client"; + +import { useRef, useEffect, useState } from "react"; + +interface SquaresProps { + direction?: "right" | "left" | "up" | "down" | "diagonal"; + speed?: number; + borderColor?: string; + squareSize?: number; + hoverFillColor?: string; + className?: string; +} + +export function Squares({ + direction = "right", + speed = 1, + borderColor = "#333", + squareSize = 40, + hoverFillColor = "#222", + className, +}: SquaresProps) { + const canvasRef = useRef(null); + const requestRef = useRef(undefined); + const numSquaresX = useRef(undefined); + const numSquaresY = useRef(undefined); + const gridOffset = useRef({ x: 0, y: 0 }); + const [hoveredSquare, setHoveredSquare] = useState<{ + x: number; + y: number; + } | null>(null); + + useEffect(() => { + const canvas = canvasRef.current; + if (!canvas) return; + + const ctx = canvas.getContext("2d"); + if (!ctx) return; + + // Set canvas background + canvas.style.background = "#060606"; + + const resizeCanvas = () => { + canvas.width = canvas.offsetWidth; + canvas.height = canvas.offsetHeight; + numSquaresX.current = Math.ceil(canvas.width / squareSize) + 1; + numSquaresY.current = Math.ceil(canvas.height / squareSize) + 1; + }; + + window.addEventListener("resize", resizeCanvas); + resizeCanvas(); + + const drawGrid = () => { + ctx.clearRect(0, 0, canvas.width, canvas.height); + + const startX = Math.floor(gridOffset.current.x / squareSize) * squareSize; + const startY = Math.floor(gridOffset.current.y / squareSize) * squareSize; + + ctx.lineWidth = 0.5; + + for (let x = startX; x < canvas.width + squareSize; x += squareSize) { + for (let y = startY; y < canvas.height + squareSize; y += squareSize) { + const squareX = x - (gridOffset.current.x % squareSize); + const squareY = y - (gridOffset.current.y % squareSize); + + if ( + hoveredSquare && + Math.floor((x - startX) / squareSize) === hoveredSquare.x && + Math.floor((y - startY) / squareSize) === hoveredSquare.y + ) { + ctx.fillStyle = hoverFillColor; + ctx.fillRect(squareX, squareY, squareSize, squareSize); + } + + ctx.strokeStyle = borderColor; + ctx.strokeRect(squareX, squareY, squareSize, squareSize); + } + } + + const gradient = ctx.createRadialGradient( + canvas.width / 2, + canvas.height / 2, + 0, + canvas.width / 2, + canvas.height / 2, + Math.sqrt(Math.pow(canvas.width, 2) + Math.pow(canvas.height, 2)) / 2 + ); + gradient.addColorStop(0, "rgba(6, 6, 6, 0)"); + gradient.addColorStop(1, "#060606"); + + ctx.fillStyle = gradient; + ctx.fillRect(0, 0, canvas.width, canvas.height); + }; + + const updateAnimation = () => { + const effectiveSpeed = Math.max(speed, 0.1); + + switch (direction) { + case "right": + gridOffset.current.x = + (gridOffset.current.x - effectiveSpeed + squareSize) % squareSize; + break; + case "left": + gridOffset.current.x = + (gridOffset.current.x + effectiveSpeed + squareSize) % squareSize; + break; + case "up": + gridOffset.current.y = + (gridOffset.current.y + effectiveSpeed + squareSize) % squareSize; + break; + case "down": + gridOffset.current.y = + (gridOffset.current.y - effectiveSpeed + squareSize) % squareSize; + break; + case "diagonal": + gridOffset.current.x = + (gridOffset.current.x - effectiveSpeed + squareSize) % squareSize; + gridOffset.current.y = + (gridOffset.current.y - effectiveSpeed + squareSize) % squareSize; + break; + } + + drawGrid(); + requestRef.current = requestAnimationFrame(updateAnimation); + }; + + const handleMouseMove = (event: MouseEvent) => { + const rect = canvas.getBoundingClientRect(); + const mouseX = event.clientX - rect.left; + const mouseY = event.clientY - rect.top; + + const startX = Math.floor(gridOffset.current.x / squareSize) * squareSize; + const startY = Math.floor(gridOffset.current.y / squareSize) * squareSize; + + const hoveredSquareX = Math.floor( + (mouseX + gridOffset.current.x - startX) / squareSize + ); + const hoveredSquareY = Math.floor( + (mouseY + gridOffset.current.y - startY) / squareSize + ); + + setHoveredSquare({ x: hoveredSquareX, y: hoveredSquareY }); + }; + + const handleMouseLeave = () => { + setHoveredSquare(null); + }; + + // Event listeners + window.addEventListener("resize", resizeCanvas); + canvas.addEventListener("mousemove", handleMouseMove); + canvas.addEventListener("mouseleave", handleMouseLeave); + + // Initial setup + resizeCanvas(); + requestRef.current = requestAnimationFrame(updateAnimation); + + // Cleanup + return () => { + window.removeEventListener("resize", resizeCanvas); + canvas.removeEventListener("mousemove", handleMouseMove); + canvas.removeEventListener("mouseleave", handleMouseLeave); + if (requestRef.current) { + cancelAnimationFrame(requestRef.current); + } + }; + }, [ + direction, + speed, + borderColor, + hoverFillColor, + hoveredSquare, + squareSize, + ]); + + return ( + + ); +} diff --git a/components/magicui/text-reveal.tsx b/components/magicui/text-reveal.tsx new file mode 100644 index 0000000..8a08565 --- /dev/null +++ b/components/magicui/text-reveal.tsx @@ -0,0 +1,23 @@ +"use client"; + +import { motion } from "motion/react"; +import { cn } from "@/lib/utils"; + +interface TextRevealProps { + children: React.ReactNode; + className?: string; +} + +export function TextReveal({ children, className }: TextRevealProps) { + return ( + + {children} + + ); +} diff --git a/dados.txt b/dados.txt new file mode 100644 index 0000000..64c9601 --- /dev/null +++ b/dados.txt @@ -0,0 +1,5 @@ +link meu portifólio atual:https://evandro.dev.br/ + +minha imagem:./imagens + +markdown linkedin: \ No newline at end of file diff --git a/lib/usePortfolioData.ts b/lib/usePortfolioData.ts new file mode 100644 index 0000000..032aff1 --- /dev/null +++ b/lib/usePortfolioData.ts @@ -0,0 +1,93 @@ +import { useState, useEffect } from "react"; + +interface PortfolioData { + personal: { + name: string; + title: string; + location: string; + email: string; + phone: string; + linkedin: string; + github: string; + summary: string; + }; + experiences: Array<{ + id: string; + title: string; + company: string; + period: string; + location: string; + type: string; + description: string; + achievements: string[]; + technologies: string[]; + featured: boolean; + }>; + projects: Array<{ + id: string; + title: string; + description: string; + longDescription: string; + technologies: string[]; + features: string[]; + status: string; + demoUrl: string; + githubUrl: string; + imageUrl: string; + featured: boolean; + category: string; + }>; + skills: { + technical: Array<{ + category: string; + icon: string; + color: string; + bgColor: string; + skills: string[]; + }>; + soft: Array<{ + skill: string; + level: number; + }>; + }; + contact: { + email: string; + phone: string; + whatsapp: string; + linkedin: string; + github: string; + location: string; + }; + social: Array<{ + name: string; + url: string; + icon: string; + }>; +} + +export function usePortfolioData() { + const [data, setData] = useState(null); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + useEffect(() => { + const loadData = async () => { + try { + const response = await fetch("/portfolio-data.json"); + if (!response.ok) { + throw new Error("Failed to load portfolio data"); + } + const portfolioData: PortfolioData = await response.json(); + setData(portfolioData); + } catch (err) { + setError(err instanceof Error ? err.message : "Unknown error"); + } finally { + setLoading(false); + } + }; + + loadData(); + }, []); + + return { data, loading, error }; +} diff --git a/lib/utils.ts b/lib/utils.ts new file mode 100644 index 0000000..bd0c391 --- /dev/null +++ b/lib/utils.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/linkedin.md b/linkedin.md new file mode 100644 index 0000000..f6636b7 --- /dev/null +++ b/linkedin.md @@ -0,0 +1,175 @@ +# Evandro Fonseca Junior + +**Desenvolvedor Full-Stack Angular** + +📍 Garuva, Santa Catarina, Brasil +🔗 [LinkedIn](https://www.linkedin.com/in/evandro-fonseca-junior-0969aa1b0/) + +--- + +## Sobre Mim + +Desenvolvedor Full-Stack com 3+ anos de experiência, especializado em soluções web modernas e inovadoras. Formado em Engenharia da Computação, com conhecimentos sólidos em computação em nuvem e inteligência artificial. Busco constantemente novos desafios onde possa aplicar minha paixão por tecnologia e resolver problemas de forma criativa. + +Meu objetivo é entregar soluções de alta qualidade que superem expectativas, sempre priorizando colaboração, ética e inovação. Acredito no poder da tecnologia para fazer a diferença e estou comprometido com o aprendizado contínuo e a excelência técnica. + +--- + +## Experiência Profissional + +### **Desenvolvedor Full Stack | Innovo Tecnologia Da Informação Ltda.** + +_Dezembro 2024 - Fevereiro 2025 (3 meses) | Tempo Integral_ + +### **Desenvolvedor Full Stack | Julia Beauty Lashes** + +_Julho 2024 - Presente (1 ano 3 meses) | Freelance | Balneário Camboriú, SC_ + +- **Liderança Técnica**: Arquitetei e desenvolvi sistema web completo para estúdio de beleza especializado em extensão de cílios +- **Tecnologias**: Next.js, TypeScript, Tailwind CSS, Firebase, Jest, React Testing Library +- **Resultados Mensuráveis**: + - Redução de 40% no tempo de marcação de horários com sistema de agendamento automatizado + - Aumento de 25% na taxa de conversão através de interface responsiva otimizada + - Pontuação 90+ no Google Lighthouse para SEO e performance + - Cobertura de testes acima de 80% +- **Integração e Automação**: Implementei pipeline CI/CD com GitHub Actions, deploy automatizado na Vercel, e integração com APIs de pagamento e WhatsApp +- **Segurança**: Desenvolvimento de sistema robusto de autenticação e autorização com Firebase Authentication + +### **Desenvolvedor Full Stack | Apolo Energia** + +_Junho 2022 - Presente (3 anos 4 meses) | Autônomo | Curitiba, PR_ + +**Responsabilidades Principais**: + +- Desenvolvimento de aplicações web e mobile responsivas e escaláveis +- Criação e implementação de APIs RESTful eficientes +- Otimização de performance de aplicações e bancos de dados +- Implementação de práticas avançadas de segurança de dados +- Integração com sistemas terceiros e APIs externas +- Colaboração com equipes multidisciplinares (UX/UI, dados, IoT) +- Code reviews e garantia de qualidade de código + +**Especialização em Energia Renovável**: + +- Desenvolvimento de soluções para geração, armazenamento e gestão de energia +- Criação de sistemas de automação para otimização de eficiência industrial +- Implementação de soluções IoT para comunicação entre dispositivos +- Participação ativa no planejamento e arquitetura de projetos + +--- + +## Principais Competências Técnicas + +### **Frontend** + +- React.js & Next.js +- Angular +- TypeScript & JavaScript +- Tailwind CSS +- HTML5 & CSS3 +- UI/UX Design Responsivo + +### **Backend** + +- Node.js +- PHP +- APIs RESTful +- Firebase +- MySQL +- Arquitetura de microsserviços + +### **DevOps & Ferramentas** + +- GitHub Actions (CI/CD) +- Vercel +- Git & GitHub +- Jest & React Testing Library +- SEO e Performance Optimization + +### **Especialidades** + +- Desenvolvimento de software personalizado +- Computação em nuvem +- Inteligência artificial +- IoT e conectividade +- Energias renováveis +- Automação e controle de sistemas + +--- + +## Serviços Oferecidos + +- **Desenvolvimento Web**: Aplicações modernas e responsivas +- **Desenvolvimento de Software Personalizado**: Soluções sob medida +- **Consultoria de TI**: Arquitetura e planejamento de projetos +- **Suporte Técnico**: Redes, recuperação de dados e manutenção +- **Integração de Sistemas**: Conectividade entre plataformas + +--- + +## Projetos em Destaque + +### **Heaven Time Tracker** + +_Ferramenta moderna de gestão de tempo e produtividade_ + +- **Tecnologias**: Next.js 14, TypeScript, Tailwind CSS +- **Funcionalidades**: Dashboard personalizado, análises detalhadas, sistema de metas, relatórios avançados, integração com calendário +- **Características**: Interface intuitiva com suporte a tema claro/escuro, performance otimizada +- **Status**: Versão 1.0.0 em produção + +### **MinGW Downloader and Installer** + +_Aplicativo Python para automação de instalação de ambiente de desenvolvimento_ + +- **Tecnologias**: Python, Tkinter, Requests, Threading, Logging +- **Funcionalidades**: Download automatizado, verificação de compatibilidade, integração com PATH do sistema +- **Impacto**: Simplificação do processo de configuração para desenvolvedores Windows + +--- + +## Diferenciais Profissionais + +### **Inovação e Criatividade** + +- Desenvolvimento de soluções criativas e personalizadas +- Foco em experiência do usuário e interface intuitiva +- Implementação de tecnologias de ponta + +### **Eficiência e Performance** + +- Otimização constante de processos e aplicações +- Práticas de Clean Code e TDD +- Arquiteturas escaláveis e maintíveis + +### **Sustentabilidade e Impacto** + +- Especialização em soluções de energia renovável +- Desenvolvimento consciente com foco em redução de impacto ambiental +- Soluções que geram valor real para o negócio + +### **Comunicação e Colaboração** + +- Habilidade de traduzir conceitos técnicos para stakeholders não técnicos +- Trabalho efetivo em equipes multidisciplinares +- Mentoria e transferência de conhecimento + +--- + +## Status Atual + +**🔍 Em busca de oportunidades como:** + +- Engenheiro de Software +- Desenvolvedor Full-Stack +- Desenvolvedor Web + +**📊 Engajamento LinkedIn:** + +- 40 conexões profissionais +- 41 seguidores +- Publicações técnicas regulares sobre projetos e inovações + +--- + +_"Acredito no poder de levar ideias adiante e fazer a diferença de forma significativa através da tecnologia."_ diff --git a/next.config.ts b/next.config.ts index e9ffa30..b986ff4 100644 --- a/next.config.ts +++ b/next.config.ts @@ -1,7 +1,64 @@ import type { NextConfig } from "next"; const nextConfig: NextConfig = { - /* config options here */ + // Otimização de imagens + images: { + formats: ["image/webp", "image/avif"], + deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840], + imageSizes: [16, 32, 48, 64, 96, 128, 256, 384], + minimumCacheTTL: 60, + }, + + // Otimizações de performance + experimental: { + scrollRestoration: true, + }, + + // Headers de cache e segurança + async headers(): Promise< + Array<{ source: string; headers: Array<{ key: string; value: string }> }> + > { + return [ + { + source: "/(.*)", + headers: [ + { + key: "X-Frame-Options", + value: "DENY", + }, + { + key: "X-Content-Type-Options", + value: "nosniff", + }, + { + key: "Referrer-Policy", + value: "origin-when-cross-origin", + }, + ], + }, + { + source: "/static/(.*)", + headers: [ + { + key: "Cache-Control", + value: "public, max-age=31536000, immutable", + }, + ], + }, + { + source: "/_next/image(.*)", + headers: [ + { + key: "Cache-Control", + value: "public, max-age=31536000, immutable", + }, + ], + }, + ]; + }, + + // Compressão + compress: true, }; export default nextConfig; diff --git a/package.json b/package.json index 9620a0f..19e335a 100644 --- a/package.json +++ b/package.json @@ -10,17 +10,25 @@ "format": "biome format --write" }, "dependencies": { + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "cobe": "^0.6.4", + "lucide-react": "^0.542.0", + "motion": "^12.23.12", + "next": "15.5.2", "react": "19.1.0", "react-dom": "19.1.0", - "next": "15.5.2" + "tailwind-merge": "^3.3.1", + "tailwindcss-animate": "^1.0.7" }, "devDependencies": { - "typescript": "^5", + "@biomejs/biome": "2.2.0", + "@tailwindcss/postcss": "^4", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", - "@tailwindcss/postcss": "^4", "tailwindcss": "^4", - "@biomejs/biome": "2.2.0" + "tw-animate-css": "^1.3.7", + "typescript": "^5" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4d648d3..9d84e11 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,21 @@ importers: .: dependencies: + class-variance-authority: + specifier: ^0.7.1 + version: 0.7.1 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + cobe: + specifier: ^0.6.4 + version: 0.6.4 + lucide-react: + specifier: ^0.542.0 + version: 0.542.0(react@19.1.0) + motion: + specifier: ^12.23.12 + version: 12.23.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0) next: specifier: 15.5.2 version: 15.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -17,6 +32,12 @@ importers: react-dom: specifier: 19.1.0 version: 19.1.0(react@19.1.0) + tailwind-merge: + specifier: ^3.3.1 + version: 3.3.1 + tailwindcss-animate: + specifier: ^1.0.7 + version: 1.0.7(tailwindcss@4.1.12) devDependencies: '@biomejs/biome': specifier: 2.2.0 @@ -36,6 +57,9 @@ importers: tailwindcss: specifier: ^4 version: 4.1.12 + tw-animate-css: + specifier: ^1.3.7 + version: 1.3.7 typescript: specifier: ^5 version: 5.9.2 @@ -404,9 +428,19 @@ packages: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + cobe@0.6.4: + resolution: {integrity: sha512-huuGFnDoXLy/tsCZYYa/H35BBRs9cxsS0XKJ3BXjRp699cQKuoEVrvKlAQMx0DKXG7+VUv4jsHVrS7yPbkLSkQ==} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -432,6 +466,20 @@ packages: resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} engines: {node: '>=10.13.0'} + framer-motion@12.23.12: + resolution: {integrity: sha512-6e78rdVtnBvlEVgu6eFEAgG9v3wLnYEboM8I5O5EXvfKC8gxGQB8wXJdhkMy10iVcn05jl6CNw7/HTsTCfwcWg==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -506,6 +554,11 @@ packages: resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==} engines: {node: '>= 12.0.0'} + lucide-react@0.542.0: + resolution: {integrity: sha512-w3hD8/SQB7+lzU2r4VdFyzzOzKnUjTZIF/MQJGSSvni7Llewni4vuViRppfRAa2guOsY5k4jZyxw/i9DQHv+dw==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + magic-string@0.30.18: resolution: {integrity: sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==} @@ -522,6 +575,26 @@ packages: engines: {node: '>=10'} hasBin: true + motion-dom@12.23.12: + resolution: {integrity: sha512-RcR4fvMCTESQBD/uKQe49D5RUeDOokkGRmz4ceaJKDBgHYtZtntC/s2vLvY38gqGaytinij/yi3hMcWVcEF5Kw==} + + motion-utils@12.23.6: + resolution: {integrity: sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==} + + motion@12.23.12: + resolution: {integrity: sha512-8jCD8uW5GD1csOoqh1WhH1A6j5APHVE15nuBkFeRiMzYBdRwyAHmSP/oXSuW0WJPZRXTFdBoG4hY9TFWNhhwng==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -548,6 +621,9 @@ packages: sass: optional: true + phenomenon@1.6.0: + resolution: {integrity: sha512-7h9/fjPD3qNlgggzm88cY58l9sudZ6Ey+UmZsizfhtawO6E3srZQXywaNm2lBwT72TbpHYRPy7ytIHeBUD/G0A==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -600,6 +676,14 @@ packages: babel-plugin-macros: optional: true + tailwind-merge@3.3.1: + resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==} + + tailwindcss-animate@1.0.7: + resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + tailwindcss@4.1.12: resolution: {integrity: sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==} @@ -614,6 +698,9 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tw-animate-css@1.3.7: + resolution: {integrity: sha512-lvLb3hTIpB5oGsk8JmLoAjeCHV58nKa2zHYn8yWOoG5JJusH3bhJlF2DLAZ/5NmJ+jyH3ssiAx/2KmbhavJy/A==} + typescript@5.9.2: resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} engines: {node: '>=14.17'} @@ -897,8 +984,18 @@ snapshots: chownr@3.0.0: {} + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + client-only@0.0.1: {} + clsx@2.1.1: {} + + cobe@0.6.4: + dependencies: + phenomenon: 1.6.0 + color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -928,6 +1025,15 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.2.3 + framer-motion@12.23.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + motion-dom: 12.23.12 + motion-utils: 12.23.6 + tslib: 2.8.1 + optionalDependencies: + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + graceful-fs@4.2.11: {} is-arrayish@0.3.2: @@ -980,6 +1086,10 @@ snapshots: lightningcss-win32-arm64-msvc: 1.30.1 lightningcss-win32-x64-msvc: 1.30.1 + lucide-react@0.542.0(react@19.1.0): + dependencies: + react: 19.1.0 + magic-string@0.30.18: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -992,6 +1102,20 @@ snapshots: mkdirp@3.0.1: {} + motion-dom@12.23.12: + dependencies: + motion-utils: 12.23.6 + + motion-utils@12.23.6: {} + + motion@12.23.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + framer-motion: 12.23.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + tslib: 2.8.1 + optionalDependencies: + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + nanoid@3.3.11: {} next@15.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): @@ -1017,6 +1141,8 @@ snapshots: - '@babel/core' - babel-plugin-macros + phenomenon@1.6.0: {} + picocolors@1.1.1: {} postcss@8.4.31: @@ -1085,6 +1211,12 @@ snapshots: client-only: 0.0.1 react: 19.1.0 + tailwind-merge@3.3.1: {} + + tailwindcss-animate@1.0.7(tailwindcss@4.1.12): + dependencies: + tailwindcss: 4.1.12 + tailwindcss@4.1.12: {} tapable@2.2.3: {} @@ -1100,6 +1232,8 @@ snapshots: tslib@2.8.1: {} + tw-animate-css@1.3.7: {} + typescript@5.9.2: {} undici-types@6.21.0: {} diff --git a/public/edev.jpeg b/public/edev.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..7dd685c9083d2bc1b4d90e25ab4e54d73acc2431 GIT binary patch literal 129494 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 z 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 + + + https://evandrofonsecajunior.dev + 2025-01-09 + monthly + 1.0 + + + https://evandrofonsecajunior.dev/#about + 2025-01-09 + monthly + 0.8 + + + https://evandrofonsecajunior.dev/#skills + 2025-01-09 + monthly + 0.8 + + + https://evandrofonsecajunior.dev/#experience + 2025-01-09 + monthly + 0.8 + + + https://evandrofonsecajunior.dev/#projects + 2025-01-09 + monthly + 0.8 + + + https://evandrofonsecajunior.dev/#contact + 2025-01-09 + monthly + 0.8 + + diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..4383c1a --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,40 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + darkMode: ["class"], + content: [ + "./pages/**/*.{ts,tsx}", + "./components/**/*.{ts,tsx}", + "./app/**/*.{ts,tsx}", + "./src/**/*.{ts,tsx}", + ], + prefix: "", + theme: { + container: { + center: true, + padding: "2rem", + screens: { + "2xl": "1400px", + }, + }, + extend: { + colors: { + "blue-primary": "#4facfe", // Cor azul personalizada + }, + keyframes: { + "accordion-down": { + from: { height: "0" }, + to: { height: "var(--radix-accordion-content-height)" }, + }, + "accordion-up": { + from: { height: "var(--radix-accordion-content-height)" }, + to: { height: "0" }, + }, + }, + animation: { + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", + }, + }, + }, + plugins: [require("tailwindcss-animate")], +};