overcentric
Version:
A lightweight, privacy-focused toolkit for modern SaaS web applications
204 lines (162 loc) • 6 kB
Markdown
# overcentric
A lightweight, privacy-focused toolkit for modern web applications. overcentric helps you understand how users interact with your application through automatic event tracking, custom analytics and more.
## Features
- **Automatic Event Tracking**: Captures page views, clicks, form submissions, and more
- **Privacy-Focused**: Collects only what matters, respecting user privacy
- **Lightweight**: Minimal impact on your application's performance
- **Custom Events**: Track any custom events that matter to your business
- **SPA Support**: Built-in support for Single Page Applications
- **UTM Tracking**: Automatic UTM parameter tracking for marketing campaigns
- **User Identification**: Associate events with specific users
- **Attribution Tracking**: Capture initial referrer and UTM parameters
- **Error Tracking**: Automatically capture JavaScript errors
- **Session Tracking**: Automatically tracks user sessions with intelligent timeout handling:
- Sessions expire after 30 minutes of inactivity
- New sessions start when users return after being away from the application for more than 10 minutes
## Installation
### NPM
```bash
npm install overcentric
# or
yarn add overcentric
```
### Browser
```html
<script src="https://unpkg.com/overcentric/dist/browser/overcentric.min.js"></script>
```
## Usage
### In Node.js/React/Vue
```javascript
import overcentric from 'overcentric';
// Initialize with your project ID
overcentric.init('your-project-id');
// Initialize with your project ID and configuration
overcentric.init('your-project-id', {
debugMode: true,
enableAutoCapture: true,
});
// Identify a user
overcentric.identify('user123', {
name: 'John Doe',
email: 'john.com'
});
// Track custom event
overcentric.trackEvent('button_clicked', {
buttonId: 'signup-button'
});
```
### In Browser
```html
<!DOCTYPE html>
<html>
<head>
<title>My Website</title>
<script src="https://unpkg.com/overcentric/dist/browser/overcentric.min.js"></script>
<script>
// Initialize overcentric
window.overcentric.init('your-project-id', {
debugMode: true,
enableAutoCapture: true,
});
// Identify a user
window.overcentric.identify('user123', {
name: 'John Doe',
email: 'john.com'
});
</script>
</head>
<body>
<!-- Your content here -->
</body>
</html>
```
## Auto-Captured Events
| Event Name | Description | Properties |
|------------|-------------|------------|
| `$page_view` | Triggered when a page is viewed | `url`, `title`, `referrer` |
| `$error` | Triggered when an uncaught JavaScript error occurs | `error_message`, `error_stack` |
| `$click` | Triggered when an element is clicked | `element_id`, `element_tag`, `element_class`, `element_text` |
| `$form_submit` | Triggered when a form is submitted | `form_id`, `form_name`, `form_action` |
| `$scroll` | Triggered when user scrolls | `scroll_percentage`, `scroll_position` |
| `$input_focus` | Triggered when an input receives focus | `input_id`, `input_name`, `input_type` |
| `$page_visible` | Triggered when page becomes visible | `time_hidden` |
| `$page_hidden` | Triggered when page becomes hidden | `time_visible` |
| `$initial_visit` | Triggered on user's first visit | `initial_referrer`, `initial_landing_page`, `utm_parameters` |
| `$identify` | Triggered when a user is identified | `user_id`, `name`, `email` |
## Context Tracking
<!-- TODO: describe context tracking via hostname -->
```javascript
overcentric.init('your-project-id');
```
```html
<script
src="https://unpkg.com/overcentric/dist/browser/overcentric.min.js"
data-project-id="your-project-id">
</script>
```
All events will automatically include the current hostname, allowing you to analyze user behavior across different parts of your application.
## Configuration Options
```javascript
overcentric.init('your-project-id', {
// Enable debug logging
debugMode: true,
// Enable automatic event capturing
enableAutoCapture: true,
// Configure which events to auto-capture
autoCaptureConfig: {
click: true,
scroll: true,
formSubmit: true,
inputFocus: true,
visibilityChange: true
},
// Enable error tracking
enableErrorCapture: true,
// Enable dock interface (optional)
enableDock: false,
// Custom API basepath (optional, defaults to https://app.overcentric.com/api)
basePath: 'https://your-api.com/api'
});
```
## Event Data Structure
When events are sent to the server, they include the following information:
```javascript
{
"event": {
"name": "event_name",
"properties": {/* custom properties */},
"project_id": "your-project-id",
"device_id": "unique-device-id",
"session_id": "current-session-id",
"url": "current-page-url",
"referrer": "referrer-url" // if available
},
"identity": { // if user is identified
"unique_identifier": "user-id",
"email": "user-email", // if provided
"name": "user-name", // if provided
"project_id": "your-project-id"
}
}
```
## User Identification
The `identify` method allows you to associate events with specific users and attach additional user information:
```javascript
overcentric.identify('user123', {
name: 'John Doe', // optional
email: 'john.com' // optional
});
```
After calling `identify`, all subsequent events will include the user ID. The library also automatically:
- Generates and maintains a unique device ID
- Tracks the initial referrer and UTM parameters on first visit
- Associates all events with both device ID and user ID (when available)
## Attribution Tracking
overcentric automatically captures attribution data on the user's first visit:
- Initial referrer
- Landing page URL
- UTM parameters (`utm_source`, `utm_medium`, `utm_campaign`, `utm_term`, `utm_content`)
- Timestamp of first visit
This data is stored locally and sent with the `$initial_visit` event, allowing you to understand where your users are coming from.
## License
MIT