Documentation

Learn how to install, configure, and deploy ProductDrivers to track user journeys and make data-driven decisions

Open Source
Self-Hosted
Privacy-First

Quick Start

Get up and running in 10 minutes

Get Started →

SDK Integration

Add tracking to your app

View SDKs →

Self-Hosting

Deploy your own instance

Deploy →

Quick Start

Self-Host (Recommended)

Full control over your data

Step 1: Clone the Repository

git clone https://github.com/bhed/open-productdrivers.git
cd productdrivers
pnpm install

Step 2: Set Up Supabase

  1. Create a new project on supabase.com
  2. Run migrations: supabase db push
  3. Deploy Edge Functions: supabase functions deploy

Step 3: Configure Environment

# apps/dashboard/.env.local
NEXT_PUBLIC_SUPABASE_URL=your-project-url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key

Step 4: Start the Dashboard

cd apps/dashboard
pnpm dev

Open http://localhost:3000

SDK Integration

JavaScript / TypeScript (Web)

Download

Installation

# Via Command
npm install @productdrivers/sdk-js

# Alternatively Download and extract sdk-js.zip
# Add to your project: import { init, track } from './sdk-js'

Basic Usage

import { init, track, identify } from '@productdrivers/sdk-js';

// Initialize (once at app startup)
init({
  projectKey: 'YOUR_PROJECT_KEY',
  blockPII: true, // Recommended: automatically blocks PII
  debug: false,
});

// Track events
track({
  event: 'JOURNEY_START',
  journey: 'onboarding',
  step: 'welcome',
});

track({
  event: 'FEATURE_USED',
  journey: 'onboarding',
  feature: 'create_account',
});

track({
  event: 'JOURNEY_SATISFACTION',
  journey: 'onboarding',
  value: 5, // 1-5 scale, auto-normalized
});

// Identify users (optional)
identify('user-123', {
  plan: 'pro',
  signupDate: '2025-01-01',
});

Flutter (iOS / Android)

Download

Installation

# pubspec.yaml
dependencies:
  journey_signal:
    path: ./packages/sdk-flutter  # Local path for now

Basic Usage

import 'package:journey_signal/journey_signal.dart';

// Initialize
await ProductDrivers.init(
  'YOUR_PROJECT_KEY',
  blockPII: true,
  debug: false,
);

// Track events
ProductDrivers.track(
  event: 'JOURNEY_START',
  journey: 'onboarding',
  step: 'welcome',
);

// Identify users
await ProductDrivers.identify('user-123', traits: {
  'plan': 'pro',
});

Kotlin (Android)

Download

Installation

// settings.gradle
include ':sdk-kotlin'
project(':sdk-kotlin').projectDir = file('../packages/sdk-kotlin')

// app/build.gradle
dependencies {
    implementation project(':sdk-kotlin')
}

Basic Usage

import com.productdrivers.ProductDrivers

// Initialize in Application class
class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        ProductDrivers.init(
            context = this,
            projectKey = "YOUR_PROJECT_KEY",
            blockPII = true,
            debug = false
        )
    }
}

// Track events
ProductDrivers.track(
    event = "JOURNEY_START",
    journey = "onboarding",
    step = "welcome"
)

// Identify users
ProductDrivers.identify("user-123", mapOf(
    "plan" to "pro"
))

Event Types

JOURNEY_START

User begins a journey (e.g., onboarding, checkout)

JOURNEY_STEP

User progresses through a step

FEATURE_USED

User interacts with a feature

JOURNEY_COMPLETE

User successfully completes a journey

JOURNEY_SATISFACTION

User rates their satisfaction (1-5, 0-10, binary, etc.)

Deployment

Dashboard (Vercel)

  1. Push your code to GitHub
  2. Import project on vercel.com
  3. Set environment variables (Supabase URL, keys)
  4. Deploy!
Deploy to Vercel

Edge Functions (Supabase)

# Deploy all functions
supabase functions deploy

# Or individually
supabase functions deploy track
supabase functions deploy identify
supabase functions deploy gdpr-export
supabase functions deploy gdpr-delete
supabase functions deploy gdpr-anonymize

Security & Privacy

Domain Restrictions (Web)

In the app, you can whitelist domains that can send events to your project. This is useful to prevent abuse and ensure that only trusted domains can send events to your project.

Mobile Security

Rate limiting, server-side proxy, app attestation

Learn More

PII Blocking

Automatically detect and block personally identifiable information

init({ blockPII: true })

GDPR Tools

Export, anonymize, or delete user data via the dashboard

Important Notice

This is open-source software released under the MIT License. By using ProductDrivers, you acknowledge that:

  • The software is provided "as is" without warranty of any kind
  • You are responsible for your own deployment, security, and data management
  • The authors and contributors are not liable for any damages or data loss
  • You should thoroughly test the software in your own environment before production use
  • You are responsible for ensuring compliance with applicable laws and regulations (GDPR, CCPA, etc.)

For the full license terms, please refer to the MIT License.

Additional Resources

Full Documentation

GitHub Repository

Contributing

Privacy Policy

License (MIT)

Ready to Get Started?

Deploy your own instance or try the hosted demo