Appearance
Analytics & Insights
Overview & Architecture
The Analytics System provides comprehensive tracking and insights for user interactions, asset performance, and system usage across the Admin Frontend application. It tracks user actions, collects browser and location data, and provides visual analytics dashboards with insights graphs.
Key Features
- Event Tracking: Comprehensive tracking of user actions (views, downloads, shares, searches, uploads, etc.)
- User Context: Automatic collection of browser, OS, and geographic location data
- Insights Dashboard: Visual analytics with weekly insights graphs (views, downloads, shares)
- Transaction Tracking: Secure transaction activity logging with data encoding
- Asset Analytics: Per-asset analytics summary with views, downloads, and shares counts
- Subscription-Based Access: Insights visibility controlled by subscription plans
File Structure
Core Analytics Store & State Management
JavaScript Files (.js)
store/analytics/index.js- Analytics Vuex store- Manages analytics state
- User agent and location data
- Transaction tracking
- Insights transaction data
Analytics Tracking Functions
JavaScript Mixin Files (.js)
mixins/common-functions.js- Common functions mixindispatchAnalyticsmethod for tracking user actions, events, and transactionsdispatchAnalyticsSharemethod for share-specific analytics- User agent and location data collection
- Data encoding and obfuscation
mixins/upload-common.js- Upload common mixin- Tracks upload analytics events
- Version upload analytics
- Handles analytics dispatch for uploaded files
Insights Display Components
Vue Component Files (.vue)
components/dam/Insights/InsightsGraph.vue- Insights graph component- Displays weekly insights with bar charts
- Shows views, downloads, and shares data
- Chart.js-based visualization
components/dam/Insights/InsightsTabGraph.vue- Insights tab graph component- Displays insights in tabbed format with bar charts
- Handles subscription-based access
- Weekly insights visualization
Chart/Visualization Components
Vue Component Files (.vue)
components/plugins/Bar.vue- Bar chart component- Chart.js-based bar chart
- Used for displaying analytics data
- Configurable chart options
Analytics Integration in Pages
Vue Page Files (.vue)
pages/_workspace_id/dam/dashboard/index.vue- Dashboard page- Displays weekly insights card with analytics data
- Tracks dashboard views
pages/_workspace_id/dam/files_id.vue- File details page- Displays asset insights tab
- Shows views, downloads, shares counts
- Weekly insights graphs
- Calls
getAssetsAnalyticsSummaryAPI
pages/_workspace_id/dam/folders/index.vue- Folders list page- Tracks folder-related analytics
pages/_workspace_id/dam/folders_id/index.vue- Folder details page- Tracks folder view and operation analytics
pages/_workspace_id/dam/collage/index.vue- Collage list page- Tracks collage list analytics
pages/_workspace_id/dam/collage_id/index.vue- Collage details page- Tracks collage view and operation analytics
pages/_workspace_id/dam/uploaded.vue- Uploaded assets page- Tracks uploaded assets analytics
pages/_workspace_id/dam/search.vue- Search page- Tracks search analytics
pages/shared-assets_type.vue- Shared assets page- Tracks shared asset view analytics for anonymous users
pages/_brand_name/shared-assets_type.vue- Brand portal shared assets page- Tracks brand portal asset view analytics
Analytics Integration in Components
Vue Component Files (.vue)
components/dam/Collage/FileListingCard.vue- File listing card component- Tracks asset views
- Builds analytics payload for asset viewing events
components/dam/Folders/FolderCard.vue- Folder card component- Tracks folder-related analytics events
components/dam/Collage/index.vue- Collage component- Tracks collage-related analytics events
components/dam/SearchAssets.vue- Search assets component- Tracks search and asset view analytics
components/dam/SearchFolders.vue- Search folders component- Tracks folder search analytics
components/dam/SearchCollages.vue- Search collages component- Tracks collage search analytics
components/dam/BreadCrumbs.vue- Breadcrumbs component- Tracks navigation analytics
components/dam/SearchBreadCrumbs.vue- Search breadcrumbs component- Tracks search navigation analytics
components/dam/AssetList/Versions.vue- Versions component- Tracks version-related analytics events
components/dam/AssetList/AddTags.vue- Add tags component- Tracks tag-related analytics
components/dam/FileTagInput.vue- File tag input component- Tracks tag input analytics
components/dam/AssetUpload.vue- Asset upload component- Tracks upload analytics events
- Includes version upload analytics
components/dam/Dialogs/ShareAssetDialog/index.vue- Share asset dialog- Tracks sharing analytics events
components/dam/Dialogs/SaveToCollage.vue- Save to collage dialog- Tracks collage save analytics
components/dam/Dialogs/PermissionDialog.vue- Permission dialog- Tracks permission change analytics
components/dam/Dialogs/CreateCollageDialog.vue- Create collage dialog- Tracks collage creation analytics
components/dam/Dialogs/AddTags/AddMultipleTags.vue- Add multiple tags dialog- Tracks bulk tag operations analytics
components/dam/Dialogs/FileConversionDialog.vue- File conversion dialog- Tracks file conversion analytics
components/dam/Dialogs/miniUploadDialog.vue- Mini upload dialog- Tracks mini upload analytics
components/dam/Dialogs/FolderDialogs/FolderDialog.vue- Folder dialog- Tracks folder operation analytics
components/dam/Dialogs/QuickViewDialog.vue- Quick view dialog- Tracks quick view analytics
components/dam/table/shareLinkListTable.vue- Share link list table- Tracks share link analytics
components/theme/global/DamNotification.vue- DAM notification component- Tracks notification click analytics
- Builds analytics payload for navigation from notifications
components/theme/global/LeftMenu.vue- Left menu component- May track navigation analytics
Analytics Icons
Vue Component Files (.vue)
components/svg/CollageInsightIcon.vue- Insight icon SVG component- Used in UI to indicate insights/analytics
Component Documentation
Analytics Store (store/analytics/index.js)
The Analytics Vuex store manages analytics state and transaction data.
State Structure:
javascript
{
userAgentAndLocation: {
location: {}, // Geographic location data
agent: {} // Browser and OS information
},
emailTracking: {}, // Email-related tracking
eventQueue: [] // Queued analytics events
}Actions:
fetchUserAgentAndLocation- Fetches browser and location dataaddTransactionActivity- Adds transaction to queuegetInsightsTransactionData- Retrieves insights transaction data
Getters:
userAgentAndLocation- Returns browser and location dataeventQueue- Returns queued events
Common Functions Mixin (mixins/common-functions.js)
dispatchAnalytics(payload)
Dispatches analytics event to backend with automatic browser and location data collection.
Parameters:
payload(Object) - Analytics event dataevent(String, required) - Main event type:'asset','collage','folder','shared'sub_event(String, required) - Specific action:'viewed','downloaded','update','deleted', etc.environment(String, required) - Context:'admin'(authenticated) or'anonymous'(public)asset_id(Number[], optional) - Array of asset IDs (for asset events)collection_id(Number, optional) - Collage/collection ID (for collage events)category_id(Number[], optional) - Array of folder IDs (for folder events)version_id(Number, optional) - Version ID (for version-specific events)share_id(Number, optional) - Share ID (for shared events)workspace_id(Number, optional) - Workspace identifier (usually auto-detected)
Example:
javascript
await this.dispatchAnalytics({
asset_id: [asset.id],
event: 'asset',
sub_event: 'viewed',
environment: 'admin'
})Features:
- Automatically collects browser and location information
- Encodes and obfuscates transaction data
- Sends to backend API endpoint
- Handles errors gracefully
dispatchAnalyticsShare(payload)
Dispatches share-specific analytics event for anonymous/public access tracking.
Parameters:
payload(Object) - Share analytics datashare_id(Number, required) - Share identifierevent(String, required) - Event type:'asset','collage','folder', or'shared'sub_event(String, required) - Action:'viewed','downloaded','shared','embeded'environment(String, required) - Always'anonymous'for shared accessasset_id(Number[], optional) - Array of asset IDs (if sharing assets)category_id(Number[], optional) - Array of folder IDs (if sharing folders)collection_id(Number, optional) - Collage ID (if sharing collage)workspace_id(Number, optional) - Workspace identifier
Example:
javascript
await this.dispatchAnalyticsShare({
share_id: shareId,
asset_id: [asset.id],
event: 'shared',
sub_event: 'viewed',
environment: 'anonymous',
workspace_id: this.workspaceId
})Insights Graph Component (components/dam/Insights/InsightsGraph.vue)
Displays weekly insights with bar charts for views, downloads, and shares.
Props:
insightsData(Object) - Insights data objectviews(Array) - Weekly views datadownloads(Array) - Weekly downloads datashares(Array) - Weekly shares data
loading(Boolean) - Loading state
Features:
- Bar chart visualization using Chart.js
- Weekly data aggregation
- Responsive design
- Loading states
Insights Tab Graph Component (components/dam/Insights/InsightsTabGraph.vue)
Displays insights in tabbed format with subscription-based access control.
Props:
insightsData(Object) - Insights datasubscriptionPlan(String) - Current subscription planloading(Boolean) - Loading state
Features:
- Tabbed interface for different metrics
- Subscription-based visibility
- Chart visualization
- Access control integration
Analytics Events
The analytics system uses a structured event model with event and sub_event properties. All events are tracked with browser and location data automatically collected by the mixin.
Event Structure
Analytics events follow this structure:
event: Main entity type ('asset','collage','folder','shared')sub_event: Specific action performed on the entityenvironment: Context ('admin'for authenticated users,'anonymous'for shared/public access)- Entity IDs:
asset_id,collection_id(for collages),category_id(for folders),share_id,version_id
Components Tracking Analytics
Asset-Related Events
FileListingCard.vue - Tracks:
- Asset views
- Asset viewing events with analytics payload
QuickViewDialog.vue - Tracks:
- Quick view interactions
Asset Details Page (files_id.vue) - Tracks:
- Asset view analytics
- Calls
getAssetsAnalyticsSummaryAPI for insights
AssetUpload.vue - Tracks:
- Upload events
- Version upload analytics
Versions.vue - Tracks:
- Version-related analytics events
FileConversionDialog.vue - Tracks:
- File conversion analytics
miniUploadDialog.vue - Tracks:
- Mini upload analytics
Folder-Related Events
FolderCard.vue - Tracks:
- Folder-related analytics events
FolderDialog.vue - Tracks:
- Folder operation analytics (create, edit, move, copy, delete)
Folders Pages (folders/index.vue, folders_id/index.vue) - Tracks:
- Folder view and operation analytics
Collage-Related Events
Collage Component (index.vue) - Tracks:
- Collage-related analytics events
CreateCollageDialog.vue - Tracks:
- Collage creation analytics
SaveToCollage.vue - Tracks:
- Collage save analytics
Collage Pages (collage/index.vue, collage_id/index.vue) - Tracks:
- Collage list and view analytics
Search-Related Events
SearchAssets.vue - Tracks:
- Search analytics
- Asset view analytics from search
SearchFolders.vue - Tracks:
- Folder search analytics
SearchCollages.vue - Tracks:
- Collage search analytics
Search Page (search.vue) - Tracks:
- Search analytics
BreadCrumbs.vue - Tracks:
- Navigation analytics
SearchBreadCrumbs.vue - Tracks:
- Search navigation analytics
Tag-Related Events
AddTags.vue - Tracks:
- Tag-related analytics
FileTagInput.vue - Tracks:
- Tag input analytics
AddMultipleTags.vue - Tracks:
- Bulk tag operations analytics
Share & Permission Events
ShareAssetDialog - Tracks:
- Sharing analytics events
PermissionDialog.vue - Tracks:
- Permission change analytics
shareLinkListTable.vue - Tracks:
- Share link analytics
Shared Assets Pages (shared-assets_type.vue, _brand_name/shared-assets_type.vue) - Tracks:
- Shared asset view analytics (for anonymous users)
- Brand portal asset view analytics
Navigation Events
DamNotification.vue - Tracks:
- Notification click analytics
- Navigation from notifications with analytics payload
LeftMenu.vue - May track:
- Navigation analytics
Dashboard Events
Dashboard Page (dashboard/index.vue) - Tracks:
- Dashboard views
- Displays weekly insights card with analytics data
Uploaded Assets Page (uploaded.vue) - Tracks:
- Uploaded assets analytics
Event Types
Asset Events (event: 'asset')
| Sub Event | Description | Required Fields | Optional Fields |
|---|---|---|---|
viewed | Asset viewed | asset_id | collection_id, category_id |
downloaded | Asset downloaded | asset_id | collection_id |
update | Asset updated/metadata changed | asset_id | |
updated | Asset updated (alternative) | asset_id | |
deleted | Asset deleted | asset_id | |
archived | Asset archived | asset_id | |
added | Asset added/uploaded | asset_id | |
tags-added | Tags added to asset | asset_id | |
tags-removed | Tags removed from asset | asset_id | |
permission-updated | Asset permissions changed | asset_id | |
version-delete | Asset version deleted | asset_id, version_id | |
version-restore | Asset version restored | asset_id, version_id | |
duplicated | Asset duplicated | asset_id | |
moved | Asset moved to different folder | asset_id | category_id (destination) |
shared | Asset shared | asset_id | share_id |
embeded | Asset embed code created | asset_id | share_id |
converted | Asset file format converted | asset_id |
Collage Events (event: 'collage')
| Sub Event | Description | Required Fields | Optional Fields |
|---|---|---|---|
viewed | Collage viewed | collection_id | |
downloaded | Collage assets downloaded | collection_id | asset_id (array) |
update | Collage updated/renamed | collection_id | |
deleted | Collage deleted | collection_id | |
created | Collage created | collection_id | asset_id (array) |
asset-added | Asset added to collage | collection_id, asset_id | |
asset-removed | Asset removed from collage | collection_id, asset_id | |
permission-updated | Collage permissions changed | collection_id | |
shared | Collage shared | collection_id | share_id |
Folder Events (event: 'folder')
| Sub Event | Description | Required Fields | Optional Fields |
|---|---|---|---|
viewed | Folder viewed | category_id | |
downloaded | Folder assets downloaded | category_id | |
update | Folder updated/renamed | category_id | |
deleted | Folder deleted | category_id | |
created | Folder created | category_id | |
moved | Folder moved | category_id | |
permission-updated | Folder permissions changed | category_id |
Shared Events (event: 'shared')
Used for anonymous/public access tracking via share links.
| Sub Event | Description | Required Fields | Optional Fields |
|---|---|---|---|
viewed | Shared asset/folder viewed (anonymous) | share_id | asset_id, category_id |
downloaded | Shared asset/folder downloaded (anonymous) | share_id | asset_id, category_id |
Event Examples
Asset View
javascript
this.dispatchAnalytics({
asset_id: [asset.id],
event: 'asset',
sub_event: 'viewed',
environment: 'admin'
})Asset Download
javascript
this.dispatchAnalytics({
asset_id: [asset.id],
event: 'asset',
sub_event: 'downloaded',
environment: 'admin'
})Collage View
javascript
this.dispatchAnalytics({
collection_id: collage.id,
event: 'collage',
sub_event: 'viewed',
environment: 'admin'
})Folder Creation
javascript
this.dispatchAnalytics({
category_id: [folder.id],
event: 'folder',
sub_event: 'created',
environment: 'admin'
})Shared Asset View (Anonymous)
javascript
this.dispatchAnalyticsShare({
share_id: shareId,
asset_id: [asset.id],
event: 'shared',
sub_event: 'viewed',
environment: 'anonymous',
workspace_id: workspaceId
})Analytics Payload Structure
Standard Payload
javascript
{
// Entity Identifiers (at least one required)
asset_id: number[], // Array of asset IDs (for asset events)
collection_id: number, // Collage/collection ID (for collage events)
category_id: number[], // Array of folder IDs (for folder events)
version_id: number, // Version ID (for version-specific events)
share_id: number, // Share ID (for shared events)
// Event Definition (required)
event: string, // Main event type: 'asset', 'collage', 'folder', 'shared'
sub_event: string, // Specific action: 'viewed', 'downloaded', 'update', etc.
environment: string, // Context: 'admin' (authenticated) or 'anonymous' (public)
// Workspace Context (optional, usually auto-detected)
workspace_id: number, // Workspace identifier
// Browser & Location Data (automatically added by mixin)
userAgentAndLocation: {
location: {
country: string,
region: string,
city: string,
latitude: number,
longitude: number
},
agent: {
browser: string,
browserVersion: string,
os: string,
osVersion: string,
device: string,
userAgent: string
}
}
}Share Payload (dispatchAnalyticsShare)
javascript
{
// Share-specific identifiers
share_id: number, // Share identifier (required)
asset_id: number[], // Asset IDs (if sharing assets)
category_id: number[], // Folder IDs (if sharing folders)
collection_id: number, // Collage ID (if sharing collage)
// Event Definition
event: string, // 'asset', 'collage', 'folder', or 'shared'
sub_event: string, // 'viewed', 'downloaded', 'shared', 'embeded'
environment: 'anonymous', // Always 'anonymous' for shared access
workspace_id: number, // Workspace identifier
// Browser & Location Data (automatically added)
userAgentAndLocation: {
// ... browser and location data
}
}Payload Examples
Asset View with Context
javascript
{
asset_id: [123],
event: 'asset',
sub_event: 'viewed',
environment: 'admin',
collection_id: 456, // If viewed from collage
category_id: [789] // If viewed from folder
}Collage Download
javascript
{
collection_id: 456,
asset_id: [123, 124, 125], // Assets being downloaded
event: 'collage',
sub_event: 'downloaded',
environment: 'admin'
}Folder Creation
javascript
{
category_id: [789],
event: 'folder',
sub_event: 'created',
environment: 'admin'
}Version Operations
javascript
{
asset_id: [123],
version_id: 5,
event: 'asset',
sub_event: 'version-delete', // or 'version-restore'
environment: 'admin'
}Tag Operations
javascript
{
asset_id: [123],
event: 'asset',
sub_event: 'tags-added', // or 'tags-removed'
environment: 'admin'
}Browser Information Collection
The analytics system automatically collects:
User Agent Information:
- Browser name and version
- Operating system and version
- Device type
- Full user agent string
Geographic Location (via API):
- Country
- Region/State
- City
- Latitude and longitude
Collection Method:
- Fetched from
/api/browser-osendpoint - Cached in Vuex store
- Automatically included in all analytics events
- Fetched from
Data Encoding & Security
Analytics data is processed through multiple encoding layers for security:
- JSON Stringification: Converts payload object to JSON string
- Base64 Encoding: Encodes JSON string to Base64
- String Reversal: Reverses the string (obfuscation)
- API Transmission: Sends encoded data to backend
Example Flow:
javascript
// Original payload
{ action: 'view_asset', asset_id: 123 }
// Step 1: JSON stringify
'{"action":"view_asset","asset_id":123}'
// Step 2: Base64 encode
'eyJhY3Rpb24iOiJ2aWV3X2Fzc2V0IiwiYXNzZXRfaWQiOjEyM30='
// Step 3: Reverse string
'=03M2d1i_tessa_2i:noitca{je'
// Step 4: Send to APIAPI Integration
Analytics Endpoints
POST /add-transaction-activity
Main endpoint for tracking user actions and events.
Request Body:
javascript
{
transaction_data: string, // Encoded and obfuscated analytics payload
workspace_id: string|number
}Response:
javascript
{
success: boolean,
message: string,
transaction_id: string // Optional transaction identifier
}POST /transaction-activity
Alternative endpoint for tracking share-related transactions.
Request Body:
javascript
{
transaction_data: string, // Encoded share analytics payload
workspace_id: string|number
}POST /digital-assets/analytics/summary
Get analytics summary for assets.
Request Body:
javascript
{
asset_ids: string[]|number[], // Array of asset IDs
workspace_id: string|number,
date_range: { // Optional
start_date: string,
end_date: string
}
}Response:
javascript
{
summaries: [
{
asset_id: string|number,
views: number,
downloads: number,
shares: number,
weekly_data: {
views: number[],
downloads: number[],
shares: number[]
}
}
]
}GET /api/browser-os
Get user agent and location information.
Response:
javascript
{
location: {
country: string,
region: string,
city: string,
latitude: number,
longitude: number
},
agent: {
browser: string,
browserVersion: string,
os: string,
osVersion: string,
device: string,
userAgent: string
}
}Workflows
Asset View Tracking
- User views an asset (FileListingCard, QuickViewDialog, or Asset Details page)
- Component builds analytics payload with
event: 'asset',sub_event: 'viewed' - Component calls
dispatchAnalyticswith the payload - Mixin collects browser and location data automatically
- Payload is encoded and sent to
/add-transaction-activity - Backend processes and stores the transaction
Upload Tracking
- User uploads a file (AssetUpload component)
- File uploads to S3
- Upload completes →
event: 'asset',sub_event: 'added'withasset_id - If folder created during upload →
event: 'folder',sub_event: 'created' - Analytics payload includes asset_id and environment context
Share Tracking
- User shares an asset (ShareAssetDialog)
- Share link/embed created →
event: 'asset',sub_event: 'shared'or'embeded' dispatchAnalyticscalled with share creation event- When share is accessed by anonymous user →
dispatchAnalyticsSharecalled - Anonymous access tracked with
event: 'shared',sub_event: 'viewed'or'downloaded' - Share analytics sent to
/transaction-activityendpoint
Insights Display
- User navigates to Dashboard or Asset Details page
- Component calls
getAssetsAnalyticsSummaryAPI - Backend returns views, downloads, shares counts and weekly data
- InsightsGraph or InsightsTabGraph displays data in bar charts
- Subscription plan checked for access control
Search Tracking
- User performs search (SearchAssets, SearchFolders, SearchCollages)
- When user views asset from search →
event: 'asset',sub_event: 'viewed' - When user views folder from search →
event: 'folder',sub_event: 'viewed' - When user views collage from search →
event: 'collage',sub_event: 'viewed' - User interactions from search results tracked with standard asset/folder/collage events
Component Integration Examples
Tracking Asset View
vue
<template>
<div @click="handleAssetClick(asset)">
<!-- Asset display -->
</div>
</template>
<script>
import commonFunctions from '~/mixins/common-functions'
export default {
mixins: [commonFunctions],
methods: {
async handleAssetClick(asset) {
// Track asset view
const payload = {
asset_id: [asset.id],
event: 'asset',
sub_event: 'viewed',
environment: 'admin'
}
// Add context if viewing from folder or collage
if (this.currentFolderId) {
payload.category_id = [this.currentFolderId]
}
await this.dispatchAnalytics(payload)
// Navigate to asset details
this.$router.push(`/${this.$route.params.workspace_id}/dam/files/${asset.id}`)
}
}
}
</script>Tracking Upload
vue
<script>
import commonFunctions from '~/mixins/common-functions'
import uploadCommon from '~/mixins/upload-common'
export default {
mixins: [commonFunctions, uploadCommon],
methods: {
async handleUploadComplete(file, asset) {
// Track upload completion
await this.dispatchAnalytics({
asset_id: [asset.id],
event: 'asset',
sub_event: 'added',
environment: 'admin'
})
}
}
}
</script>Displaying Insights
vue
<template>
<div>
<InsightsGraph
v-if="insightsData"
:insights-data="insightsData"
:loading="loading"
/>
</div>
</template>
<script>
import InsightsGraph from '~/components/dam/Insights/InsightsGraph.vue'
export default {
components: {
InsightsGraph
},
data() {
return {
insightsData: null,
loading: false
}
},
async mounted() {
await this.fetchInsights()
},
methods: {
async fetchInsights() {
this.loading = true
try {
const response = await this.$axios.post('/digital-assets/analytics/summary', {
asset_ids: [this.assetId],
workspace_id: this.$route.params.workspace_id
})
this.insightsData = response.data.summaries[0]
} finally {
this.loading = false
}
}
}
}
</script>Tracking Share Events
vue
<script>
import commonFunctions from '~/mixins/common-functions'
export default {
mixins: [commonFunctions],
methods: {
async handleShareCreated(share) {
// Track share creation
await this.dispatchAnalytics({
asset_id: [share.asset_id],
event: 'asset',
sub_event: share.type === 'embed' ? 'embeded' : 'shared',
environment: 'admin'
})
// Track anonymous access when share is viewed
// This would be in the shared assets page
await this.dispatchAnalyticsShare({
share_id: share.id,
asset_id: [share.asset_id],
event: 'shared',
sub_event: 'viewed',
environment: 'anonymous',
workspace_id: this.workspaceId
})
}
}
}
</script>Permission Management
Subscription-Based Insights Access
Insights visibility is controlled by subscription plans:
- Premium Plans: Full access to insights and analytics
- Basic Plans: Limited or no access to insights
- Free Plans: No insights access
The InsightsTabGraph component checks subscription plan before displaying data:
javascript
computed: {
canViewInsights() {
const plan = this.$store.getters['subscription/currentPlan']
return ['premium', 'enterprise'].includes(plan)
}
}Best Practices
- Always Include Workspace ID: Most analytics events require
workspace_id - Use Appropriate Action Names: Follow the event naming convention
- Include Context: Add
additional_datafor event-specific context - Handle Errors Gracefully: Analytics failures should not break user experience
- Respect Privacy: Only track necessary data, respect user privacy settings
- Batch When Possible: For bulk operations, consider batching analytics events
- Test Analytics: Verify events are being tracked correctly in development
Related Documentation
- Common Functions Mixin - Analytics tracking methods
- Store Overview - Analytics store module
- Asset Sharing - Share analytics integration
- Upload Flow - Upload analytics integration
- Search & Discovery - Search analytics integration