ClickAnalytics
A lightweight, privacy-first analytics library inspired by Vercel Analytics. Simple, powerful, and framework-agnostic.
Features
- 🚀 Zero Configuration - Works out of the box with minimal setup
- 🔒 Privacy-First - No personal data collection, GDPR compliant
- ⚡ Lightweight - < 5KB gzipped, minimal performance impact
- 🎯 Framework Agnostic - Works with React, Next.js, Vue, Svelte, or vanilla JS
- 🛡️ TypeScript Support - Full type safety included
- 🔧 Flexible - Multiple integration methods to fit your workflow
- 📊 Real-time - Events sent immediately for accurate tracking
Quick Start
React/Next.js
npm install @click-chutney/clickanalytics
Add the Analytics component to your app:
import { Analytics } from '@click-chutney/clickanalytics/react';
export default function RootLayout({ children }) {
return (
<html>
<body>
{children}
<Analytics trackingId="your-tracking-id" />
</body>
</html>
);
}
Track custom events with the hook:
import { useAnalytics } from '@click-chutney/clickanalytics/react';
function MyComponent() {
const analytics = useAnalytics();
const handleClick = () => {
analytics.event('button_click', { button: 'signup' });
};
return <button onClick={handleClick}>Sign Up</button>;
}
Vanilla JavaScript
npm install @click-chutney/clickanalytics
import { inject } from '@click-chutney/clickanalytics';
inject({ trackingId: 'your-tracking-id' });
import { event } from '@click-chutney/clickanalytics';
event('button_click', { button: 'signup' });
CDN/Script Tag
<script src="https://unpkg.com/@click-chutney/clickanalytics/dist/clickanalytics.min.js"></script>
<meta name="clickanalytics-tracking-id" content="your-tracking-id">
<script>
caPV();
caEV('button_click', { button: 'signup' });
caID('user-123');
</script>
Installation Methods
Method 1: React/Next.js Component
Perfect for React applications with automatic page view tracking.
npm install @click-chutney/clickanalytics
import { Analytics } from '@click-chutney/clickanalytics/react';
export default function RootLayout({ children }) {
return (
<html>
<body>
{children}
<Analytics trackingId="your-tracking-id" />
</body>
</html>
);
}
import { useAnalytics } from '@click-chutney/clickanalytics/react';
function MyComponent() {
const analytics = useAnalytics();
return (
<button onClick={() => analytics.event('click', { button: 'cta' })}>
Click me
</button>
);
}
Method 2: Inject Function (Any Framework)
Great for Vue, Svelte, Angular, or vanilla JS applications.
import { inject, event, pageview } from '@click-chutney/clickanalytics';
inject({
trackingId: 'your-tracking-id',
debug: true
});
event('user_signup', { method: 'email' });
pageview('/dashboard');
Method 3: Script Tag (No Build Step)
Perfect for static sites, WordPress, or any HTML page.
<!DOCTYPE html>
<html>
<head>
<meta name="clickanalytics-tracking-id" content="your-tracking-id">
<script src="https://unpkg.com/@click-chutney/clickanalytics/dist/clickanalytics.min.js"></script>
</head>
<body>
<button onclick="caEV('button_click', { button: 'signup' })">
Sign Up
</button>
</body>
</html>
API Reference
React Component
<Analytics
trackingId="your-id"
debug={true}
disableInDev={true}
apiUrl="/api/analytics"
beforeSend={(event) => event}
/>
React Hook
const analytics = useAnalytics();
analytics.pageview('/custom-page', 'Custom Title');
analytics.event('custom_event', { key: 'value' });
analytics.identify('user-123');
analytics.flush();
Inject Function
import { inject, event, pageview, identify } from '@click-chutney/clickanalytics';
inject({
trackingId: 'your-tracking-id',
debug: false,
disableInDev: true,
apiUrl: '/api/analytics',
beforeSend: (event) => {
return event;
}
});
pageview();
pageview('/custom-path', 'Custom Title');
event('button_click', { button: 'signup' });
identify('user-123');
Script Tag Globals
When using the script tag, these functions are available globally:
caPV(url?, title?)
caEV(eventName, properties?)
caID(userId)
Configuration
Environment Variables
Set your tracking ID using environment variables:
NEXT_PUBLIC_CLICKANALYTICS_ID=your-tracking-id
NEXT_PUBLIC_CLICKCHUTNEY_ID=your-tracking-id
CLICKANALYTICS_TRACKING_ID=your-tracking-id
Meta Tag
Add a meta tag to auto-initialize:
<meta name="clickanalytics-tracking-id" content="your-tracking-id">
Advanced Configuration
inject({
trackingId: 'your-tracking-id',
debug: true,
disableInDev: true,
apiUrl: '/api/analytics',
beforeSend: (event) => {
event.customData = { version: '1.0' };
if (event.event === 'spam') return false;
return event;
}
});
Event Types
Page Views
Automatically tracked when using React component or inject function.
pageview('/dashboard', 'Dashboard');
Custom Events
Track any user interaction or business event.
event('button_click', {
button: 'signup',
location: 'header',
user_type: 'anonymous'
});
event('purchase', {
item_id: 'prod_123',
price: 29.99,
currency: 'USD'
});
User Identification
Associate events with specific users.
identify('user-123');
event('page_view');
Integration Examples
Next.js App Router
import { Analytics } from '@click-chutney/clickanalytics/react';
export default function RootLayout({ children }) {
return (
<html>
<body>
{children}
<Analytics />
</body>
</html>
);
}
import { useAnalytics } from '@click-chutney/clickanalytics/react';
export default function HomePage() {
const analytics = useAnalytics();
return (
<button onClick={() => analytics.event('cta_click')}>
Get Started
</button>
);
}
Vue.js
import { inject } from '@click-chutney/clickanalytics';
inject({ trackingId: 'your-tracking-id' });
import { event } from '@click-chutney/clickanalytics';
export default {
methods: {
trackClick() {
event('button_click', { component: 'header' });
}
}
}
Svelte
import { inject } from '@click-chutney/clickanalytics';
inject({ trackingId: 'your-tracking-id' });
<script>
import { event } from '@click-chutney/clickanalytics';
function handleClick() {
event('button_click', { button: 'subscribe' });
}
</script>
<button on:click={handleClick}>Subscribe</button>
WordPress
<meta name="clickanalytics-tracking-id" content="your-tracking-id">
<script src="https://unpkg.com/@click-chutney/clickanalytics/dist/clickanalytics.min.js"></script>
<button onclick="caEV('button_click', { button: 'contact' })">
Contact Us
</button>
Development
Disable analytics during development:
inject({
trackingId: 'your-tracking-id',
disableInDev: true
});
const isDev = process.env.NODE_ENV === 'development';
if (!isDev) {
inject({ trackingId: 'your-tracking-id' });
}
Privacy & GDPR
ClickAnalytics is designed to be privacy-first:
- ✅ No personal data collection
- ✅ No cross-site tracking
- ✅ No fingerprinting
- ✅ IP addresses used only for geolocation, not stored
- ✅ GDPR compliant by design
- ✅ No third-party cookies
Troubleshooting
Common Issues
1. Events not appearing
- Check your tracking ID is correct
- Verify network requests in browser dev tools
- Enable debug mode:
inject({ debug: true })
2. Multiple initializations
- Only call
inject()
once in your app
- Use
reset()
to reinitialize if needed
3. TypeScript errors
- Ensure you're importing from the correct path
- React components:
@click-chutney/clickanalytics/react
- Inject functions:
@click-chutney/clickanalytics
Debug Mode
Enable debug logging to troubleshoot issues:
inject({
trackingId: 'your-tracking-id',
debug: true
});
This will log all events and API calls to the console.
Getting Your Tracking ID
- Sign up at clickchutney.com
- Create a new project
- Copy your tracking ID from the dashboard
- Add it to your environment variables or configuration
License
MIT License - see LICENSE file for details.
Support