The Hero section is the very first thing visitors see when they land on the portfolio. It introduces Emmanuel Martínez — known online as Leviek — as a Full Stack Web Developer, anchors his location in Aguascalientes, Mexico, and immediately offers direct social contact links and CV download buttons. A full-viewport animated particle background renders behind his profile image, loading eagerly so the page feels alive from the first frame.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/Emmanuel-Mtz-777/My-Personal-Portfolio/llms.txt
Use this file to discover all available pages before exploring further.
Content structure
All visible copy is sourced fromsrc/langs/en.json (or es.json when the active locale is Spanish) under the top-level hero key. The four fields that drive the Hero’s text are shown below exactly as they appear in the English content file:
Astro.currentLocale) and selects the matching JSON object, so every text node in the section is fully bilingual with zero duplication of markup.
Component file
src/components/sections/Hero.astro
The section lives inside a <section id="home"> element and is composed of two main columns:
- Left column — heading (
h1greeting), role title (h2), description paragraph, location line, social buttons, and CV action buttons. - Right column — the developer’s profile photo (
Yo.webp) layered on top of the OGL particle canvas.
Social buttons
Three social links are rendered withsrc/components/ui/buttons/SocialButton.astro, each wrapping an inline SVG icon:
| Button | Destination |
|---|---|
| GitHub | https://github.com/Emmanuel-Mtz-777 |
| Profile URL for Humberto Emmanuel Rosales Martínez | |
| Gmail | mailto:hemmanuelmtz777@gmail.com |
getCVFile() helper.
Particles effect (OGL / WebGL)
The animated background is powered bysrc/components/effects/Particles.jsx, a React 19 component that bootstraps a full WebGL scene using the OGL library (Renderer, Camera, Geometry, Program, Mesh). Key implementation details:
- Particles are scattered in 3D space using a unit-sphere distribution and animated each frame by a custom GLSL vertex shader.
- Colors are sampled randomly from a configurable palette — in the Hero the palette is
["#06B6D4", "#3B82F6", "#9333EA", "#EC4899"](cyan → blue → purple → pink). - The component accepts props for
particleCount,particleSpread,speed,particleBaseSize,alphaParticles,disableRotation, andpixelRatio, making it fully reusable across other sections (e.g.TechCard). - The canvas is hidden on mobile (
hidden md:block) to preserve battery life on small screens.
LogoLoop effect (rAF-based)
The portfolio ships a reusable horizontally scrolling logo marquee component atsrc/components/effects/LogoLoop.jsx. This React component drives its animation entirely with requestAnimationFrame and exponential-smoothing velocity (controlled by SMOOTH_TAU = 0.25) — no GSAP dependency — to produce a fluid, butter-smooth scroll rather than a CSS animation. It supports:
- Configurable
speedanddirection(left|right|up|down). pauseOnHover/hoverSpeedfor interactive deceleration.fadeOutgradient overlays on both edges.scaleOnHoverper-item zoom on mouse entry.- Automatic copy-count calculation so the track always fills the container width regardless of viewport size.
ResizeObserverintegration to recalculate layout when the container or logos change size.
The
LogoLoop component is memo-wrapped and exposes a stable displayName = 'LogoLoop' for React DevTools. The component file exports both a named export (LogoLoop) and a default export.