# Ripples.sh > Lightweight analytics for indie products. One script tag. Revenue attribution. Free until $1K MRR. ## Docs - [Introduction](https://ripples.sh/docs/introduction): Ripples.sh is lightweight analytics for indie products. One script tag gives you pageviews, sessions, traffic sources, Web Vitals, visitor profiles. JS SDK methods: track(name, opts), identify(props), pageview(), getVisitorId(). track() powers the Activation dashboard with product area grouping. Use activated: true on a specific event occurrence to mark the moment a user activated (e.g. 10th message sent) — it flags the moment, not the event type. - [Installation](https://ripples.sh/docs/installation): Install via script tag: . Guides for Next.js, React, Vue/Nuxt, Astro, Laravel. SPA routing handled automatically. Queue pattern available for pre-load calls. - [Track Product Usage](https://ripples.sh/docs/custom-events): ripples.track(name, { area?, activated?, ...props }) tracks product usage events. 'area' groups actions into product areas (budgets, sharing, etc.). 'activated: true' marks this specific event occurrence as the moment activation happened — the event type can be ordinary (e.g. 'added transaction'), but you add activated: true only on the particular occurrence that represents the milestone (e.g. the 10th transaction). Ripples auto-detects first occurrence per user, computes adoption rates, correlates with retention/payment. Events sent via sendBeacon. - [Identify Users](https://ripples.sh/docs/identify): ripples.identify({ id, email, name, avatar_url, ...custom }) links anonymous visitors to authenticated users. Stores user ID in localStorage. Also: ripples.getVisitorId() returns the visitor UUID for server-to-server attribution. - [SPA Support](https://ripples.sh/docs/spa): SPA pageviews tracked automatically via history.pushState and popstate listeners. Works with React, Vue, Svelte, Angular, Next.js, Nuxt, SvelteKit, Astro. Manual: ripples.pageview(). Sessions: 30min timeout, per-tab. Web Vitals: LCP, FCP, CLS, INP, TTFB auto-collected. - [Stripe Integration](https://ripples.sh/docs/stripe): Stripe integration auto-tracks charges, subscriptions, invoices, refunds. 3-tier attribution: (1) checkout metadata with ripples_visitor_id, (2) email matching via identify(), (3) Stripe customer ID. Historical backfill on connect. Deduplication built-in. - [Paddle Integration](https://ripples.sh/docs/paddle): Paddle integration auto-tracks transactions, subscriptions, adjustments (refunds/credits). 3-tier attribution: (1) custom_data with ripples_visitor_id, (2) email matching via identify(), (3) Paddle customer ID. Historical backfill on connect. Deduplication built-in. - [PHP SDK](https://ripples.sh/docs/php-sdk): PHP SDK for server-side tracking. Install: composer require ripplesanalytics/ripples-php. Methods: revenue(amount, userId, props), signup(userId, props), track(actionName, userId, props), identify(userId, props). Auto-reads RIPPLES_SECRET_KEY from env. Supports self-hosted via RIPPLES_URL. ## Full documentation - [/llms-full.txt](https://ripples.sh/llms-full.txt): Complete documentation in markdown