feat: harden portfolio and add SEO foundations

This commit is contained in:
Evandro Fonseca Junior committed 2026-09-04 19:25:30 -03:00
1 parent b079afdd73
commit 62bcfbd8fa
121 files changed
+7769 -10469

No files matched your search

-70
View File
@@ -1,70 +0,0 @@
/**
* Animation Configuration
* Centralized configuration for all animations in the portfolio
*/
export const animationConfig = {
// Easing curves
easings: {
easeOut: "cubic-bezier(0.16, 1, 0.3, 1)",
easeIn: "cubic-bezier(0.4, 0, 1, 1)",
spring: {
default: { stiffness: 200, damping: 20 },
hover: { stiffness: 260, damping: 20 },
magnetic: { stiffness: 150, damping: 15 },
gentle: { stiffness: 60, damping: 20 },
},
},
// Durations (in seconds)
durations: {
instant: 0.15,
fast: 0.3,
normal: 0.6,
slow: 0.9,
verySlow: 1.2,
},
// Scroll trigger
scrollTrigger: {
threshold: 0.2,
once: true,
margin: "0px",
},
// Stagger
stagger: {
default: 0.08,
fast: 0.04,
slow: 0.12,
reducedMotion: 0.03,
},
// Parallax
parallax: {
speed: 0.5, // 50% mais lento que scroll normal
maxDistance: 100, // pixels
},
// Magnetic effect
magnetic: {
radius: 80, // pixels
strength: 12, // max movement in pixels
},
// Cursor
cursor: {
size: 40,
expandedSize: 60,
followDelay: 0.1,
},
// Reduced motion overrides
reducedMotion: {
duration: 0.15,
stagger: 0.03,
disableParallax: true,
disableMagnetic: true,
disableCursor: true,
},
} as const;
-98
View File
@@ -1,98 +0,0 @@
/**
* Animation Variants
* Preset variants for Framer Motion animations
*/
export const variants = {
// Fade in
fadeIn: {
initial: { opacity: 0 },
animate: { opacity: 1 },
exit: { opacity: 0 },
},
// Fade in + slide up
fadeInUp: {
initial: { opacity: 0, y: 24, filter: "blur(8px)" },
animate: { opacity: 1, y: 0, filter: "blur(0px)" },
exit: { opacity: 0, y: -24, filter: "blur(8px)" },
},
// Fade in + slide down
fadeInDown: {
initial: { opacity: 0, y: -24, filter: "blur(8px)" },
animate: { opacity: 1, y: 0, filter: "blur(0px)" },
exit: { opacity: 0, y: 24, filter: "blur(8px)" },
},
// Fade in + slide left
fadeInLeft: {
initial: { opacity: 0, x: 24, filter: "blur(8px)" },
animate: { opacity: 1, x: 0, filter: "blur(0px)" },
exit: { opacity: 0, x: -24, filter: "blur(8px)" },
},
// Fade in + slide right
fadeInRight: {
initial: { opacity: 0, x: -24, filter: "blur(8px)" },
animate: { opacity: 1, x: 0, filter: "blur(0px)" },
exit: { opacity: 0, x: 24, filter: "blur(8px)" },
},
// Scale in
scaleIn: {
initial: { opacity: 0, scale: 0.95 },
animate: { opacity: 1, scale: 1 },
exit: { opacity: 0, scale: 0.95 },
},
// Image reveal
imageReveal: {
initial: {
opacity: 0,
scale: 0.98,
filter: "blur(8px)",
clipPath: "inset(0 100% 0 0)",
},
animate: {
opacity: 1,
scale: 1,
filter: "blur(0px)",
clipPath: "inset(0 0% 0 0)",
},
},
// Text reveal (per word)
textReveal: {
initial: {
opacity: 0,
scale: 0.95,
filter: "blur(6px)",
clipPath: "inset(0 100% 0 0)",
},
animate: {
opacity: 1,
scale: 1,
filter: "blur(0px)",
clipPath: "inset(0 0% 0 0)",
},
},
// Stagger container
staggerContainer: {
animate: {
transition: {
staggerChildren: 0.08,
},
},
},
// Reduced motion variants
reducedMotion: {
fadeIn: {
initial: { opacity: 0 },
animate: { opacity: 1 },
exit: { opacity: 0 },
},
},
} as const;