The library

Curated, not a catalog dump.

Every signature component, built for a real site. Filter, preview live, copy in React or Vue.

Browse the library

Landmark Kits

Depth, not breadth.

A deep, stand-alone collection built around one system. The first Kit is Reveal - preloaders and hero sections, one mixable system, WebGL and GSAP. React, Vue, HTML / CSS / JS. Not for Webflow.

See the Reveal Kit

Concepts, patterns, tools

Learn the vocabulary.

Definitions and examples for the GSAP and animation concepts behind production motion. Free, citable, and cross-linked with the components that use each idea.

Open concepts
GSAP component for Vue

Counter in Vue.

A number that counts up as you scroll to it, either rolling like an odometer with each digit spinning on its own, or ticking up smoothly. Add a currency sign, a percent or your own unit.

Built for good-fella.com.
Install

Install Counter in your Vue project

Counter ships as a copy-paste Vue 3 single-file component. The only dependency is GSAP - Vue's reactivity and lifecycle hooks replace the React useGSAP adapter, so no extra package is needed.

BASH
Integrate

Where it goes in your Vue app

Counter is a leaf-level interactive component. Drop it into any page, layout, or other component. It works in Vue 3 + Vite, Nuxt 3, and any standalone Vue setup.

In Nuxt, no special handling is needed - the component is client-safe and self-cleaning. If you want to ensure it never runs on the server (rare), wrap your usage in <ClientOnly>.

The component uses the <script setup> composition API and TypeScript-friendly defineProps.

Gotchas

Nuxt SSR flash

This component parks its initial state inside onMounted, which runs client-side only. In Nuxt SSR the un-parked DOM paints briefly before hydration. Wrap in <ClientOnly> or add a CSS opacity:0 default the component clears.

Template refs in Vue

Refs are accessed as .value, not .current. Pass elementRef.value to gsap.to() / gsap.from() targets.
FAQ

Common questions

Does Counter work in Nuxt 3?
Yes. Drop it into any page or component. The component is client-safe; Nuxt handles the SSR boundary automatically. If you want explicit client-only rendering, wrap in .
Does Counter work with Vue 2?
No - the component uses the Vue 3 Composition API and