HiI'mLeroyandIbuildthingsthatmattersolutionsbornofcuriosity,designedwithintent,andbuilttoendure.

🧑‍💻 currently lead front-end dev at Kaliber Interactive
Back to overview

Work @ Rituals

Frontend performance optimization for the Rituals careers platform.

Work @ Rituals
Project goal

Improve frontend performance and loading experience across the careers platform.

I ran a dedicated optimization pass on the Rituals careers platform, tackling performance bottlenecks across rendering, state management, and image loading. The goal was a noticeably faster, smoother experience without changing the visual design.

Rituals careers platform
The careers platform after performance optimizations

Canvas-based animated backgrounds

The original gradient backgrounds relied on CSS animations, which caused jank on lower-end devices. I replaced these with canvas-based animations using requestAnimationFrame, giving precise control over frame timing and dramatically reducing paint costs.

Animated gradient background
Smooth gradient animations powered by canvas and RAF

LQIP image preloading

The existing image library preloaded images at 1px width, which gave no useful preview. I optimized it to preload low-quality image placeholders (LQIP) instead, so users see a blurred preview that sharpens into the full image. This makes the loading feel faster even when it takes the same amount of time.

Image loading optimization
LQIP preloading for a better perceived loading experience

State via query params

Filter and navigation state was previously managed in React state, which meant losing context on refresh or when sharing links. I moved this state to query parameters, making URLs shareable and preserving state across page loads.

Query param state management
Shareable URLs with state preserved in query params

React patterns refactor

I refactored data fetching patterns throughout the app, replacing useEffect-based fetching with useMemo and proper memoization where possible. This reduced unnecessary re-renders and made the component tree more predictable.

React code refactor
Cleaner React patterns with better memoization