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
Requires
- php: ^8.1
- illuminate/support: ^10.0|^11.0|^12.0
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
- 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);
});