Work Carousel
Filterable case-study carousel used on /work. Wraps CaseStudyCarousel and reads the `?category=` URL param so it stays in sync with the CategoryFilters component. Shows a shimmer skeleton during filter transitions.
Live preview (default — all case studies)
With no `?category=` param applied, the carousel renders every case study. Wrap in a Suspense boundary because it reads the URL search params.
Loading skeleton (transition state)
When the URL category changes, the carousel briefly overlays this shimmer skeleton (~500ms) before swapping to the filtered list. Shown here on its own.
Behavior
Filtering
Reads `?category=` from `useSearchParams`. The visible category state is debounced — when the URL changes, the carousel keeps displaying the previous list for 500ms while a shimmer overlay fades in, then swaps.
Empty state
If the active category has no matching studies, renders a single centered "No case studies match this filter yet." message instead of an empty carousel.
Pairing
Used together with `<CategoryFilters />`, which writes the `?category=` value the carousel reacts to.
Import
import { WorkCarousel } from '@/components/sections/WorkCarousel'