dwivedianuj9118/behavior-tracker

Consent-first behavior & preference tracking for Laravel.

Installs: 2

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/dwivedianuj9118/behavior-tracker

dev-main 2025-10-10 13:23 UTC

This package is auto-updated.

Last update: 2025-10-10 13:24:23 UTC


README

Consent-first, privacy-aware behavior & preference tracking for Laravel 10/11.

Features

  • Consent banner + tiny JS collector (beacon/fetch).
  • POST endpoint to store events (page_view, click, preference, time_on_page, consent).
  • Eloquent model + migration.
  • Profile widget Blade partial.
  • Optional middleware to auto-inject the script.

Install

  1. Add the package to your project (path repo during local dev):
{
"repositories": [
{ "type": "path", "url": "dwivedianuj9118/behavior-tracker" }
]
}
Then:

composer require wwivedianuj9118/behavior-tracker:@dev

Publish & migrate

php artisan vendor:publish --provider="Dwivedianuj9118\\BehaviorTracker\\BehaviorTrackerServiceProvider" --tag=behavior-tracker-migrations
php artisan vendor:publish --provider="Dwivedianuj9118\\BehaviorTracker\\BehaviorTrackerServiceProvider" --tag=behavior-tracker-config
php artisan vendor:publish --provider="Dwivedianuj9118\\BehaviorTracker\\BehaviorTrackerServiceProvider" --tag=behavior-tracker-assets
php artisan migrate

Inject banner + script (layout)

{{-- resources/views/layouts/app.blade.php --}}
@include('behavior-tracker::consent-banner')
<script src="{{ asset('vendor/behavior-tracker/behavior-collector.js') }}" data-endpoint="{{ config('behavior-tracker.endpoint_path') }}"></script>

Or enable auto-inject via middleware:

Set auto_inject => true in config/behavior-tracker.php.

Add middleware to your web group (optional):

protected $middlewareGroups = [
  'web' => [
     // ...
     \Dwivedianuj9118\BehaviorTracker\Http\Middleware\InjectBehaviorScript::class,
  ],
];

Show profile widget

@include('behavior-tracker::profile-widget', ['user' => auth()->user()])
Usage

Auto page view is sent on DOMContentLoaded (after consent=Yes).

Track clicks by adding data-behavior="add_to_cart" on elements; events are POSTed to endpoint_path.

Send custom events from your app:

window.BehaviorTracker.sendEvent('preference', { key: 'category', value: 'electronics' });
Config

See config/behavior-tracker.php.

Privacy

Consent required by default (require_consent true).

Provide export/delete UI in your app if needed using /behavior/my-data and your own deletion endpoint.

Testing
vendor/bin/phpunit


---


## 🧪 tests/Feature/CollectEndpointTest.php
```php
<?php


use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Route;
use Dwivedianuj9118\BehaviorTracker\Models\UserBehavior;


uses(RefreshDatabase::class);


it('rejects without consent when required', function () {
    config(['behavior-tracker.require_consent' => true]);
    $response = $this->postJson('/behavior/collect', [
        'event_type' => 'page_view',
        'payload' => ['url' => '/'],
    ]);
    $response->assertStatus(403);
});


it('accepts with consent header', function () {
    config(['behavior-tracker.require_consent' => true]);
    $response = $this->postJson('/behavior/collect', [
        'event_type' => 'page_view',
        'payload' => ['url' => '/']
    ], ['X-Behavior-Consent' => 'yes']);


    $response->assertOk();
    $this->assertDatabaseCount('user_behaviors', 1);
});