Installation:
composer require benmacha/mousetracker dev-master
Laravel Integration:
AppServiceProvider:
public function boot()
{
$this->app->singleton('mouseTracker', function ($app) {
return new \benmacha\mousetracker\Tracker();
});
}
First Use Case:
use benmacha\mousetracker\Tracker;
public function index(Tracker $tracker)
{
$tracker->startTracking(); // Initialize tracking
return view('home');
}
<script>
Mousetracker.init({
token: '{{ config("mousetracker.token") }}',
callback: '{{ route("mousetracker.callback") }}'
});
</script>
Tracking Initialization:
public function show(Tracker $tracker)
{
$tracker->startTracking($userId, $pageUrl);
return view('page');
}
Event-Based Tracking:
Event::listen('form.submitted', function ($event) {
app('mouseTracker')->logEvent('form_submit', $event->data);
});
Middleware Integration:
public function handle($request, Closure $next)
{
app('mouseTracker')->startTracking($request->user()->id, $request->url());
return $next($request);
}
Blade Directives:
Blade::directive('track', function ($expression) {
return "<?php app('mouseTracker')->logEvent('{$expression}'); ?>";
});
Usage:
@track('button_click')
User-Specific Tracking:
$tracker->startTracking(auth()->id(), request()->fullUrl());
A/B Testing:
$tracker->logEvent('button_color', ['variant' => 'red']);
Heatmaps:
mousetracker.Frontend Setup:
resources/js/app.js:
window.Mousetracker = {
init: function(config) {
// Adapted from original library
const script = document.createElement('script');
script.src = `https://tracker.example.com/track?token=${config.token}`;
script.onload = () => {
fetch(config.callback, {
method: 'POST',
body: JSON.stringify({ event: 'page_view' })
});
};
document.body.appendChild(script);
}
};
Mousetracker.init() in your main app entry point.Backend Logging:
mouse_events) with columns:
Schema::create('mouse_events', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id')->nullable();
$table->string('event_type');
$table->json('metadata');
$table->timestamps();
});
Laravel Queues:
$tracker->logEvent('click', ['element' => 'cta_button'])
->dispatch();
Outdated Package:
Symfony\Component\HttpKernel).No Built-in Database Support:
JavaScript Dependency:
Token Management:
token for authentication. Store it securely in .env:
MOUSETRACKER_TOKEN=your_secure_token_here
Performance Overhead:
user_id and event_type.shouldQueue() to batch inserts.Verify Tracking:
console.log('Tracking initiated:', Mousetracker);
tail -f storage/logs/laravel.log | grep mouse_tracker
Common Issues:
Route::post('/tracker/callback', [TrackerController::class, 'callback']);
App\Http\Middleware\HandleCors:
$this->allowMethods(['POST']);
$this->allowCredentials();
$this->allowOrigins(['https://yourdomain.com']);
Data Validation:
$metadata = json_decode($request->input('metadata'), true);
$tracker->logEvent('custom', array_filter($metadata));
Manual Configuration:
config/mousetracker.php:
return [
'token' => env('MOUSETRACKER_TOKEN'),
'callback_url' => route('mousetracker.callback'),
'events_whitelist' => ['click', 'hover', 'scroll'],
];
Environment-Specific Tokens:
.env variables for different environments:
MOUSETRACKER_TOKEN_LOCAL=local_token
MOUSETRACKER_TOKEN_PROD=prod_token
Custom Event Types:
class CustomTracker extends \benmacha\mousetracker\Tracker
{
public function logCheckoutStep($step, $data)
{
$this->logEvent('checkout_step', [
'step' => $step,
'data' => $data,
'timestamp' => now()
]);
}
}
Data Transformation:
logEvent method to transform data before storage:
$tracker->setTransformer(function ($event, $metadata) {
return [
'event' => strtolower($event),
'metadata' => array_merge($metadata, ['processed_at' => now()])
];
});
Third-Party Integrations:
Event::listen('mouse.tracked', function ($event) {
\Analytics::track($event->userId, $event->eventType, $event->metadata);
});
Real-Time Processing:
broadcast(new MouseEvent($event->userId, $event->eventType, $event->metadata));
How can I help you explore Laravel packages today?