Technologies
- Astro 6 Static-site framework with zero client-side JS by default — ideal for a performance-sensitive marketing landing.
- Tailwind CSS v4 Custom `@theme` design token system for the full ink/gold/violet/cream palette.
- GSAP + ScrollTrigger Powers pinned Shows section, slide transitions, and scroll-driven bubble mascot choreography.
- Lenis Smooth scroll integrated into a single RAF loop shared with GSAP; respects `prefers-reduced-motion`.
- Canvas API (vanilla) Custom bubble particle system and star particles — dependency-free to avoid bundle overhead.
- Fontsource (self-hosted) Cinzel Decorative, Pinyon Script, Cormorant Garamond Variable, and Young Heart woff2 — no Google Fonts CDN.
- Vercel + @astrojs/vercel Adapter-based deployment with edge caching; DNS routed through Cloudflare.
- Vitest + jsdom Unit testing for all client-side animation logic without a browser.
Project Overview
Magia y Burbujas is the promotional website for Gonza Martini, an Argentine street magician and bubble-show artist based in Barcelona. The site is a single-scroll landing designed to function as both a portfolio and a booking conversion tool — communicating the warmth and spectacle of his shows in a tone that feels like a conversation rather than a brochure. The aesthetic is inspired by ornate fairground signage: dark ink backgrounds, gold typographic foil, violet accents, and iridescent bubbles throughout.
Objectives
- Booking conversion — Drive inquiries via WhatsApp CTA with warm, inviting copy in Argentine Spanish.
- Showcase shows — Present Gonza’s four distinct show formats (close-up magic, main stage, corporate, and the signature bubble experience) with full-bleed visual treatment.
- Immersive first impression — Deliver a cinematic entrance sequence — a custom loader, portrait fade-in, animated title, and a bubble mascot that grows from the hero portrait and persists throughout the page as a scroll companion.
- Mobile-first reach — Optimized for the 390px viewport, since the site is primarily shared via WhatsApp.
Project Workflow
- Foundation — Scaffolded Astro 6 with Tailwind v4 custom design tokens (
@themepalette of ink, gold, violet, cream), four self-hosted font families (Cinzel Decorative, Pinyon Script, Cormorant Garamond, Young Heart), and Lenis smooth scroll — all established in the first session. - Hero construction — Built a symmetric “living poster” hero with a dual-layer portrait (lit/dark crossfade driven by scroll progress), a canvas-based bubble particle system (~80–150 bubbles on desktop, 40–60 on mobile) with sinusoidal drift and iridescent rim rendering, and a marquee bottom band looping the show’s taglines.
- Scroll choreography — Designed and implemented a 706-line GSAP ScrollTrigger orchestration — pinned Shows section (4 slides × 100vh), a Bézier-path bubble mascot that follows the scroll through every section, a horizontal pinned Gallery strip, and a free-scroll phase with keyframe-sampled mascot scale changes across Bio → Media → Contacto.
- Content sections — Built Gallery (8 real client photos processed via Sharp to webp at q82, displayed with duotone-gold hover treatment), Reviews (4 testimonial cards with SectionReveal fade-in), and a rebuilt Contacto section with a 2-column layout and the mascot parked as a visual companion.
- Performance gating — Replaced a fixed-duration loader with a hybrid progress bar — synthetic ramp + real asset load tracking on critical images and the mascot video — so the CTA only appears once essential content is ready.
- Testing — 21 Vitest unit tests covering bubble physics, Catmull-Rom mascot path interpolation, gallery strip translation, and free-path scale curve sampling — all green.
Results and Impact
- Animation system delivered — A multi-phase scroll choreography spanning entrance, pinned shows, horizontal gallery, and free-scroll sections — with a persistent scroll-companion mascot interpolating Bézier waypoints across the entire page.
- Real gallery assets — Eight show photos processed and delivered via the Astro image pipeline with responsive srcsets and duotone-gold hover effects.
- Performance-conscious build — Hero JS bundle at ~116KB raw (~35KB gzip estimated); critical asset gating on loader prevents CTA from appearing before portrait and mascot video are loaded.
- Accessibility baseline — Skip-link,
prefers-reduced-motionrespected globally (Lenis disabled, all canvas hidden, pinned sections unpinned, animations set to 0.001ms), and focus-visible gold outline throughout. - Architecture readiness — Placeholder-ready sections (Bio copy, Media reel, WhatsApp number, real testimonials) with clearly documented pending items — the site structure is complete and awaiting final client content to go live.