Skip to content

maestroh1git/e2e-analytics

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

E2E Analytics

Self-hosted analytics service for tracking user behavior across your applications. Own your data, track who came, from where, and what they did.

Go MongoDB

Features

  • Event Tracking - Track any custom event with properties
  • Session Management - Automatic session tracking with timeout handling
  • User Identification - Link anonymous users to identified users
  • Attribution - Track referrers and UTM parameters
  • Multi-Platform SDKs - Flutter and JavaScript SDKs included
  • Query API - Query events, sessions, users, and aggregated metrics
  • Self-Hosted - Full control over your data

Quick Start

1. Start the Server

# Using Docker Compose
docker-compose up -d

# Or run locally
cp .env.example .env
go mod download
go run ./cmd/server

Server runs at http://localhost:8091

2. Create a Project

curl -X POST http://localhost:8091/v1/admin/projects \
  -H "Content-Type: application/json" \
  -d '{"project_id": "my-app", "name": "My Application"}'

Response:

{
  "project_id": "my-app",
  "name": "My Application",
  "api_key": "ak_abc123...",
  "active": true
}

3. Integrate SDK

Flutter

# pubspec.yaml
dependencies:
  e2e_analytics:
    path: path/to/e2e-analytics/pkg/sdk/flutter
import 'package:e2e_analytics/e2e_analytics.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await E2EAnalytics.init(
    endpoint: 'https://analytics.yourapp.com',
    projectId: 'my-app',
    debug: true,
  );

  runApp(MyApp());
}

// Track events
E2EAnalytics.track('button_clicked', properties: {'button': 'signup'});

// Identify users (after login)
await E2EAnalytics.identify('user-123', traits: {'plan': 'premium'});

// Track screen views
E2EAnalytics.screen('HomeScreen');

// Reset on logout
await E2EAnalytics.reset();

JavaScript

<script src="https://your-cdn.com/analytics.js"></script>
<script>
  E2EAnalytics.init({
    endpoint: 'https://analytics.yourapp.com',
    projectId: 'my-app',
    debug: true,
    trackPageViews: true,  // Auto-track page views
    trackClicks: false,    // Auto-track button/link clicks
  });

  // Track events
  E2EAnalytics.track('signup_started', { source: 'hero_button' });

  // Identify users
  E2EAnalytics.identify('user-123', { plan: 'premium' });

  // Track page views manually
  E2EAnalytics.page('Pricing');

  // Reset on logout
  E2EAnalytics.reset();
</script>

API Reference

Ingest Endpoints

Track Event

POST /v1/track
{
  "project_id": "my-app",
  "session_id": "uuid",
  "anonymous_id": "uuid",
  "user_id": "user-123",        // optional
  "event_name": "purchase",
  "properties": {               // optional
    "product": "Pro Plan",
    "price": 29.99
  },
  "context": {                  // optional
    "platform": "web",
    "page_url": "https://...",
    "utm_source": "google"
  }
}

Batch Track

POST /v1/track/batch
{
  "project_id": "my-app",
  "events": [...]
}

Identify User

POST /v1/identify
{
  "project_id": "my-app",
  "user_id": "user-123",
  "anonymous_id": "uuid",       // optional - links anonymous to user
  "traits": {                   // optional
    "email": "user@example.com",
    "plan": "premium"
  }
}

Session Management

POST /v1/session/start
POST /v1/session/end
POST /v1/session/heartbeat

Query Endpoints

Get Events

GET /v1/query/events?project_id=my-app&event_name=purchase&limit=100

Get Sessions

GET /v1/query/sessions?project_id=my-app&user_id=user-123

Get Metrics

GET /v1/query/metrics/events?project_id=my-app&start_time=2024-01-01T00:00:00Z
GET /v1/query/metrics/daily?project_id=my-app
GET /v1/query/metrics/referrers?project_id=my-app
GET /v1/query/metrics/utm?project_id=my-app

Data Model

Event

{
  "id": "ObjectId",
  "project_id": "my-app",
  "session_id": "uuid",
  "user_id": "user-123",
  "anonymous_id": "uuid",
  "event_name": "purchase",
  "properties": {},
  "context": {
    "platform": "web",
    "browser": "Chrome",
    "page_url": "...",
    "referrer": "...",
    "utm_source": "...",
    "utm_medium": "...",
    "utm_campaign": "..."
  },
  "timestamp": "2024-01-15T10:30:00Z",
  "received_at": "2024-01-15T10:30:01Z"
}

Session

{
  "id": "ObjectId",
  "project_id": "my-app",
  "session_id": "uuid",
  "user_id": "user-123",
  "anonymous_id": "uuid",
  "started_at": "2024-01-15T10:00:00Z",
  "ended_at": "2024-01-15T10:45:00Z",
  "duration": 2700,
  "event_count": 15,
  "first_referrer": "https://google.com",
  "first_utm_source": "google",
  "landing_page": "/pricing"
}

User

{
  "id": "ObjectId",
  "project_id": "my-app",
  "user_id": "user-123",
  "anonymous_id": "uuid",
  "traits": {
    "email": "user@example.com",
    "plan": "premium"
  },
  "first_seen": "2024-01-01T00:00:00Z",
  "last_seen": "2024-01-15T10:30:00Z",
  "total_sessions": 25,
  "total_events": 342
}

Environment Variables

Variable Description Default
PORT Server port 8091
ENV Environment (development/production) development
MONGODB_URI MongoDB connection string mongodb://localhost:27017
MONGODB_DATABASE Database name analytics
ADMIN_API_KEY API key for admin endpoints (none)

Deployment

Railway

Deploy on Railway

  1. Connect your repository
  2. Add MongoDB plugin
  3. Set environment variables
  4. Deploy

Docker

docker build -t e2e-analytics .
docker run -p 8091:8091 \
  -e MONGODB_URI=mongodb://host:27017 \
  -e MONGODB_DATABASE=analytics \
  e2e-analytics

Project Structure

e2e-analytics/
├── cmd/server/main.go        # Entry point
├── internal/
│   ├── config/               # Configuration
│   ├── handlers/             # HTTP handlers
│   ├── models/               # Data models
│   └── storage/              # MongoDB storage
├── pkg/sdk/
│   ├── flutter/              # Flutter SDK
│   └── js/                   # JavaScript SDK
├── docker-compose.yml
├── Dockerfile
└── README.md

License

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors