America/New_York
Work
/
Start a Project
Available nowChat with me
Projects

The Atelier – Cinematic Barbershop Experience

The Atelier – Cinematic Barbershop Experience
Avatar
May 20, 2025

Concept snapshot

Record date: May 20, 2025. Technology and screenshots describe the prototype as documented on this date. Any performance observations belong to the same point-in-time record. No current client deployment is implied.
The Atelier is a cinematic, single-page brand experience for a fictional Brooklyn barbershop. Unlike conventional service sites, it treats the barbershop as an editorial subject, built around scroll-driven choreography, atmospheric visuals, and restrained typography. Every section is designed to be experienced sequentially, with animations tied to scroll progress rather than click interactions. The site is hand-built with vanilla HTML, CSS, and JavaScript, no frameworks, no build step. This deliberate constraint allowed full control over performance, animation timing, and the grain-and-vignette visual treatment that runs across the entire experience.
  • Lenis Smooth Scroll – Custom-configured smooth scrolling with exponential easing for a fluid, weighted feel
  • Scroll-Scrubbed Sections – Multiple sections use IntersectionObserver and RAF-driven progress calculations to animate elements based on viewport position
  • Pinned Horizontal Scroll – The "Barbers" section pins to the viewport and translates a horizontal track based on vertical scroll progress
  • Ritual Crossfade – Three background frames crossfade with scale transforms as the user scrolls through the ritual steps
  • Testimonial Scrubbing – Four testimonials rotate based on scroll position through the testimonials section
  • Film Grain Overlay – SVG-based animated noise texture applied site-wide with CSS mix-blend-mode
  • Vignette Overlay – Radial gradient darkening the edges of the viewport for a cinematic look
  • Custom Cursor – Dual-element cursor (dot + ring) with mix-blend-mode difference, hover states, and contextual labels ("VIEW", "BOOK")
  • Brass & Ink Palette – Warm brass (#B68A48) against deep ink (#0A0908) with ivory text for an editorial feel
  • Reveal Masks – CSS clip-path animations triggered by IntersectionObserver for dramatic section entrances
  • Gallery with Lightbox – 28-image masonry-style grid populated dynamically via JavaScript, with filterable categories (Fades, Beards, Line work) and a full lightbox with keyboard navigation
  • Booking Modal – Slide-up modal with form fields, service selection, barber selection, and time-slot picker
  • Services Flat-Lay – Pinned tools image that zooms to different focal points as each service row enters the viewport center
  • Animated Counter – Barber experience years count up with a staggered RAF animation when cards come into view
  • Cormorant Garamond + Archivo – Serif display type for headlines, clean sans-serif for body and UI
  • Section Counter – Fixed top-right counter that updates as each major section enters the viewport
  • Mobile Bottom Nav – Pill-style bottom navigation with animated indicator for mobile users
  • Loader Sequence – Branded loading animation with expanding hairline and wordmark reveal before the hero fades in
  • Vanilla HTML5 – Semantic structure with accessibility attributes (ARIA labels, roles)
  • Vanilla CSS3 – Custom properties for design tokens, clip-path animations, CSS grids, and responsive breakpoints
  • Vanilla JavaScript (ES6+) – Module-pattern IIFE with RAF dispatchers, IntersectionObserver, and event delegation
  • Lenis – Smooth scroll library with custom easing curve
  • CSS Animations & Transitions – Keyframe-driven hero letter reveals, scroll indicator, grain noise animation
  • requestAnimationFrame – Custom scroll-driven animation loop for parallax, progress bars, and section-specific effects
  • Custom Design Tokens – CSS variables for colors, easing curves, typography scale, and spacing
  • Responsive Breakpoints – Mobile-first with dedicated mobile navigation and adjusted section padding
  • ** prefers-reduced-motion** – Respects system motion preferences where applicable
  • Image Optimization – All assets converted to WebP format, reducing total asset size from ~14.6MB to ~3.5MB (76% reduction)
  • Lazy Loading – Gallery images use native loading="lazy" attribute
  • will-change Hints – Applied to transform-heavy elements for GPU compositing
  • No Framework Overhead – Direct DOM manipulation without virtual DOM reconciliation
  • RAF Dispatcher Pattern – Single scroll event listener drives multiple animation callbacks via a centralized pump function, preventing duplicate layout calculations
  • IntersectionObserver for Triggers – Used for section counting, reveal masks, and mobile nav state, avoiding expensive scroll-position calculations where possible
  • CSS-First Animations – Hero letter reveals, tagline fade-in, and loader sequence use CSS keyframes with animation-play-state toggled by JS
  • ARIA Labels – Modal dialogs, navigation, and interactive elements properly labeled
  • Keyboard Navigation – Lightbox supports Escape, ArrowLeft, and ArrowRight keys
  • Focus Management – Modal open/close handles scroll locking via Lenis stop/start
  • Semantic HTML – Section elements with heading hierarchy, figure/figcaption for images
Solution: Implemented a centralized RAF dispatcher that collects all scroll-dependent animation functions and executes them in a single frame. This prevents layout thrashing and keeps all animations synchronized to the same scroll position. Solution: Applied grain and vignette overlays as fixed-position elements with pointer-events: none, ensuring they cover the entire viewport without interfering with interactions. The grain uses an inline SVG filter with a stepped CSS animation for subtle movement. Solution: Converted all JPEG and PNG assets to WebP format using cwebp at quality 85. The gallery dropped from 2.2MB to 1.9MB, landing page from 9.5MB to 1.2MB, and team photos from 2.9MB to 432KB, making the site viable for standard hosting without a CDN for images. Solution: Lenis provides the smooth scroll experience on desktop while falling back to native scroll on mobile/touch devices. The scroll-driven sections detect touch capability and switch to IntersectionObserver-based activation instead of scroll-scrubbing.
atelier/
├── index.html                    # Single-page site with all sections
├── styles.css                    # Design tokens, layouts, animations
├── atelier.js                    # Scroll choreography & interactions
├── script.js                     # Alternate interaction script
├── favicon.svg                   # Brand mark
└── assets/
    ├── landing_page/             # Hero, ritual, services, booking images
    ├── teams/                    # Barber portrait photos
    └── gallery/                  # Portfolio work images (28 total)
  • Vanilla JS Animation Patterns: Built a scalable RAF-based animation system without relying on GSAP or similar libraries, gaining deep understanding of scroll progress calculations and performance budgeting
  • Editorial Web Design: Learned to treat a commercial site as a narrative experience, using pacing, typography, and negative space to create emotional impact
  • Asset Pipeline Management: Established a workflow for converting and optimizing image assets (WebP conversion, size reduction) for static-site deployment
  • Scroll-Driven UX: Gained experience in designing interfaces where scroll position is the primary interaction mechanism, requiring careful attention to viewport math and fallback behavior
  • Static Site Deployment: Deployed via Dockploy as a static nginx container, understanding the importance of index.html as the entry point for web servers
Experience the full cinematic scroll journey, including the hero reveal, horizontal barber scroll, ritual crossfade, testimonial rotation, gallery lightbox, and booking modal: View Live Project The Atelier demonstrates the ability to craft high-end, design-forward web experiences using fundamental web technologies. It showcases skills in scroll-driven animation, editorial visual design, performance optimization, and static-site architecture. The project serves as a portfolio piece highlighting attention to craft, from the brass-hued color palette and film-grain texture down to the micro-interactions on every hover state.