artisanpack-ui/analytics
Composer 安装命令:
composer require artisanpack-ui/analytics
包简介
Privacy-first analytics package for Laravel with local database storage, external provider support (GA4, Plausible), and a beautiful Livewire dashboard.
README 文档
README
ArtisanPack UI Analytics is a privacy-first analytics package for Laravel applications. Built on Livewire 3, it provides local database storage for complete data ownership, GDPR-compliant consent management, real-time dashboards, multi-tenant support, and optional integration with Google Analytics 4 and Plausible.
Quick Start
Installation
# Install the package composer require artisanpack-ui/analytics # Run the installer (migrations, config, assets) php artisan analytics:install # Or manually publish and migrate php artisan vendor:publish --provider="ArtisanPackUI\Analytics\AnalyticsServiceProvider" php artisan migrate
Basic Usage
<!-- Add tracking scripts to your layout --> @analyticsScripts <!-- Add consent banner (if consent required) --> @analyticsConsentBanner <!-- Embed the full dashboard --> <livewire:artisanpack-analytics::analytics-dashboard />
// Track page views programmatically trackPageView('/products', 'Products Page'); // Track custom events trackEvent('button_click', ['button_id' => 'signup']); // Get visitor statistics $stats = analyticsStats(DateRange::last30Days());
Key Features
- Privacy First: Local database storage for complete data ownership
- GDPR Compliant: Built-in consent management with Do Not Track support
- Real-Time Dashboard: Beautiful Livewire dashboard with live visitor counts
- Session Tracking: Track visitors, sessions, page views, and bounce rates
- Event Tracking: Custom event tracking with categories and values
- Goal Tracking: Set up conversion goals with progress tracking
- Multi-Tenant Support: Domain, subdomain, API key, and header-based resolution
- External Providers: Optional integration with Google Analytics 4 and Plausible
- Queue Processing: High-performance async tracking for busy sites
- Data Retention: Configurable retention with automatic cleanup and aggregation
- IP Anonymization: GDPR-compliant IP address handling
- Bot Filtering: Automatic exclusion of known bots and crawlers
AI features
The Analytics package ships four AI agents that plug into artisanpack-ui/ai. Every feature is toggleable via the artisanpack.ai.features.{key}.enabled config (or the AI package's runtime registry) — Livewire, React, and Vue triggers all render a "disabled" state when a feature is off.
| Feature key | Input | Output | Default model |
|---|---|---|---|
analytics.insight_summary |
{ date_range, metrics, compare_to? } |
{ summary, highlights[], concerns[] } |
claude-sonnet-4-6 (streams) |
analytics.explain_anomaly |
{ anomaly: {metric,direction,magnitude,date}, context: {recent_content_changes, referrer_deltas, campaign_launches} } |
{ hypotheses:[{cause,confidence,evidence[]}], recommended_next_steps[] } |
claude-sonnet-4-6 |
analytics.segment_insight |
{ segment:{type,value}, metrics, baseline } |
{ patterns:[{observation,significance,suggested_action}] } |
claude-sonnet-4-6 |
analytics.digest_email |
{ items[], focus?, length? } (inherits SummarizationAgent) |
{ summary, key_points[], caveats[] } |
claude-sonnet-4-6 |
Livewire triggers
<livewire:artisanpack-analytics::ai.insight-summary :date-from="'2026-05-01'" :date-to="'2026-05-07'" :metrics="$weeklyMetrics" /> <livewire:artisanpack-analytics::ai.anomaly-explanation :anomaly="$anomaly" :context="$context" /> <livewire:artisanpack-analytics::ai.segment-insight ... /> <livewire:artisanpack-analytics::ai.digest-subscription />
React / Vue triggers
Publish the components alongside the analytics dashboards (analytics-react / analytics-vue publish tags) and mount them anywhere in your Inertia app:
import { InsightSummary } from '@/vendor/artisanpack-analytics/react/components/ai'; <InsightSummary api={ { baseUrl: '/api/analytics' } } dateRange={ { from: '2026-05-01', to: '2026-05-07' } } metrics={ weeklyMetrics } />
Enabling / disabling features
Every feature is opt-in per-app via config/artisanpack.php (merged from the AI package):
'ai' => [ 'features' => [ 'analytics.insight_summary' => [ 'enabled' => true ], 'analytics.explain_anomaly' => [ 'enabled' => true ], 'analytics.segment_insight' => [ 'enabled' => true ], 'analytics.digest_email' => [ 'enabled' => true ], ], ],
Requests are gated by the analytics.ai.use gate. The ship default allows any authenticated user; override in your AuthServiceProvider for stricter policies.
Digest email opt-in
The analytics.digest_email feature is delivered via a queued job (SendDigestEmailJob) and honors a per-user preference stored in analytics_digest_preferences (off | weekly | monthly). Users pick their cadence via the DigestSubscription component; you schedule SendDigestEmailJob on your cadence of choice (the job is a no-op for users whose preference is off or missing).
use ArtisanPackUI\Analytics\Jobs\SendDigestEmailJob; $schedule->call( function () { AnalyticsDigestPreference::where( 'cadence', 'weekly' )->each( function ( $preference ) { SendDigestEmailJob::dispatch( userId: $preference->user_id, email: $preference->user->email, items: $weeklyDigestItems( $preference->user ), periodLabel: 'Last 7 days', ); } ); } )->weekly();
Components
Livewire Components
| Component | Description |
|---|---|
AnalyticsDashboard |
Full-featured analytics dashboard with all widgets |
StatsCards |
Summary statistics (page views, visitors, sessions, bounce rate) |
VisitorsChart |
Interactive line chart of visitors over time |
TopPages |
Most visited pages table with view counts |
TrafficSources |
Referrer breakdown with percentage charts |
RealtimeVisitors |
Live count of active visitors |
GoalProgress |
Goal completion tracking with progress bars |
ConsentBanner |
GDPR consent collection banner |
Widget Usage
<!-- Individual widgets --> <livewire:artisanpack-analytics::stats-cards /> <livewire:artisanpack-analytics::visitors-chart /> <livewire:artisanpack-analytics::top-pages /> <livewire:artisanpack-analytics::traffic-sources /> <livewire:artisanpack-analytics::realtime-visitors /> <!-- With date range --> <livewire:artisanpack-analytics::stats-cards :start-date="$startDate" :end-date="$endDate" /> <!-- Multi-tenant filtering --> <livewire:artisanpack-analytics::analytics-dashboard :site-id="$tenant->site_id" />
Documentation
Comprehensive documentation is available at our Documentation Site:
- Getting Started - Quick start guide
- Installation Guide - Detailed setup instructions
- Configuration - All configuration options
- Tracking Page Views - Page view tracking
- Tracking Events - Custom event tracking
- Components - Dashboard and widget components
- Multi-Tenancy - Multi-tenant setup
- Privacy & Consent - GDPR compliance
- API Reference - Models, services, and events
Configuration
Publish the configuration file:
php artisan vendor:publish --tag=analytics-config
Environment Variables
The package supports the following environment variables:
| Variable | Description | Default |
|---|---|---|
ANALYTICS_ENABLED |
Enable/disable all tracking | true |
ANALYTICS_ACTIVE_PROVIDERS |
Comma-separated list of providers | local |
ANALYTICS_DB_CONNECTION |
Database connection for analytics | null (default) |
ANALYTICS_TABLE_PREFIX |
Prefix for analytics tables | analytics_ |
ANALYTICS_ANONYMIZE_IP |
Anonymize visitor IP addresses | true |
ANALYTICS_QUEUE_PROCESSING |
Process tracking via queues | true |
ANALYTICS_QUEUE_NAME |
Queue name for async processing | analytics |
ANALYTICS_RETENTION_PERIOD |
Days to retain data (null = forever) | 90 |
ANALYTICS_DASHBOARD_PREFIX |
URL prefix for dashboard routes | analytics |
ANALYTICS_CACHE_DURATION |
Dashboard cache duration in seconds | 300 |
ANALYTICS_MULTI_TENANT |
Enable multi-tenant mode | false |
ANALYTICS_CONSENT_REQUIRED |
Require consent before tracking | false |
ANALYTICS_RESPECT_DNT |
Honor Do Not Track headers | true |
ANALYTICS_GOOGLE_ENABLED |
Enable Google Analytics 4 | false |
ANALYTICS_GOOGLE_MEASUREMENT_ID |
GA4 Measurement ID | null |
ANALYTICS_GOOGLE_API_SECRET |
GA4 API Secret | null |
ANALYTICS_PLAUSIBLE_ENABLED |
Enable Plausible Analytics | false |
ANALYTICS_PLAUSIBLE_DOMAIN |
Plausible domain | null |
ANALYTICS_PLAUSIBLE_API_URL |
Plausible API URL | https://plausible.io/api |
Configuration Options
Key configuration options in config/artisanpack/analytics.php:
return [ // Enable/disable tracking 'enabled' => env('ANALYTICS_ENABLED', true), // Active providers 'active_providers' => ['local'], // Options: local, google, plausible // Local provider settings 'local' => [ 'connection' => null, 'table_prefix' => 'analytics_', 'anonymize_ip' => true, 'queue_processing' => true, 'queue_name' => 'analytics', ], // Privacy settings 'privacy' => [ 'consent_required' => false, 'respect_dnt' => true, 'cookie_name' => 'analytics_consent', 'cookie_duration' => 365, ], // Data retention 'retention' => [ 'period' => 90, // days, null = keep forever 'aggregate_before_delete' => true, ], // Multi-tenant settings 'multi_tenant' => [ 'enabled' => false, 'resolver' => 'domain', // domain, subdomain, api_key, header ], // Dashboard settings 'dashboard' => [ 'prefix' => 'analytics', 'middleware' => ['web', 'auth'], 'cache_duration' => 300, ], ];
Artisan Commands
# Install the package (migrations, config, assets) php artisan analytics:install # Create a new analytics site (multi-tenant) php artisan analytics:create-site "Site Name" --domain=example.com # List all configured sites php artisan analytics:list-sites # Regenerate API key for a site php artisan analytics:regenerate-api-key {site_id} # Clean up old data based on retention settings php artisan analytics:cleanup # Clean up data older than specific days php artisan analytics:cleanup --days=30 # Preview cleanup without deleting php artisan analytics:cleanup --dry-run # Aggregate raw data into summary tables php artisan analytics:aggregate # Export analytics data php artisan analytics:export --format=csv --output=analytics.csv # Delete visitor data (GDPR compliance) php artisan analytics:delete-visitor {visitor_id} # Clear analytics cache php artisan analytics:clear-cache # Warm dashboard cache php artisan analytics:warm-cache # Display quick statistics php artisan analytics:stats --period=month
Scheduling Commands
Add to your scheduler for automated maintenance:
// routes/console.php or bootstrap/app.php use Illuminate\Support\Facades\Schedule; Schedule::command('analytics:cleanup')->daily(); Schedule::command('analytics:aggregate')->hourly(); Schedule::command('analytics:warm-cache')->hourly();
Requirements
- Laravel 11 or 12: PHP 8.2+
- Laravel 13: PHP 8.3+
- Livewire 3.6.4+
Dependencies
The package has minimal external dependencies:
- doctrine/dbal - Database abstraction
- nesbot/carbon - Date handling
- livewire/livewire - Reactive components
Optional integrations with the ArtisanPack UI ecosystem:
- artisanpack-ui/livewire-ui-components - UI components for dashboard
- artisanpack-ui/hooks - WordPress-style hooks for extensibility
Events
The package dispatches events for key actions:
use ArtisanPackUI\Analytics\Events\PageViewRecorded; use ArtisanPackUI\Analytics\Events\EventTracked; use ArtisanPackUI\Analytics\Events\SessionStarted; use ArtisanPackUI\Analytics\Events\GoalCompleted; use ArtisanPackUI\Analytics\Events\ConsentGiven; use ArtisanPackUI\Analytics\Events\ConsentRevoked; // Listen for page views Event::listen(PageViewRecorded::class, function ($event) { // $event->pageView contains the page view model }); // Listen for custom events Event::listen(EventTracked::class, function ($event) { // $event->event contains the tracked event }); // Listen for goal completions Event::listen(GoalCompleted::class, function ($event) { // $event->goal contains the completed goal // $event->conversion contains the conversion record });
Extensibility
Custom Analytics Providers
Create custom providers by implementing AnalyticsProviderInterface:
use ArtisanPackUI\Analytics\Contracts\AnalyticsProviderInterface; use ArtisanPackUI\Analytics\Data\PageViewData; use ArtisanPackUI\Analytics\Data\EventData; class MixpanelProvider implements AnalyticsProviderInterface { public function trackPageView(PageViewData $data): void { // Send to Mixpanel } public function trackEvent(EventData $data): void { // Send to Mixpanel } public function isEnabled(): bool { return config('services.mixpanel.enabled', false); } public function getName(): string { return 'mixpanel'; } } // Register in a service provider Analytics::extend('mixpanel', function ($app) { return new MixpanelProvider(config('services.mixpanel')); });
Custom Site Resolvers (Multi-Tenant)
Create custom resolvers by implementing SiteResolverInterface:
use ArtisanPackUI\Analytics\Contracts\SiteResolverInterface; use Illuminate\Http\Request; class TeamResolver implements SiteResolverInterface { public function resolve(Request $request): ?Site { $teamId = $request->user()?->current_team_id; return Site::where('team_id', $teamId)->first(); } } // Register in config 'multi_tenant' => [ 'enabled' => true, 'resolver' => App\Analytics\TeamResolver::class, ],
Filter Hooks
Extend functionality using filter hooks:
use function addFilter; // Modify page view data before recording addFilter('analytics.pageview.data', function (array $data) { $data['custom_dimension'] = 'value'; return $data; }); // Add custom excluded paths addFilter('analytics.excluded_paths', function (array $paths) { $paths[] = '/internal/*'; return $paths; }); // Modify dashboard query addFilter('analytics.dashboard.query', function ($query) { return $query->where('is_bot', false); });
Contributing
Contributions are welcome! To contribute:
- Fork the repository
- Create your feature branch (
git checkout -b feature/your-feature) - Commit your changes (
git commit -m 'Add feature') - Push to the branch (
git push origin feature/your-feature) - Open a Merge Request
Please read CONTRIBUTING.md for details on our code of conduct and the process for submitting merge requests.
License
ArtisanPack UI Analytics is open-sourced software licensed under the MIT license.
artisanpack-ui/analytics 适用场景与选型建议
artisanpack-ui/analytics 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 78 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 01 月 12 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「analytics」 「laravel」 「dashboard」 「tracking」 「privacy」 「livewire」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 artisanpack-ui/analytics 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 artisanpack-ui/analytics 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 artisanpack-ui/analytics 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A short description of what your package does
Scout support for MoonShine
Analytics chooser extensions for site settings.
Production-ready Laravel Prometheus metrics package with built-in collectors for HTTP, database, cache, queue, events, errors, filesystem, and mail monitoring
A Laravel Nova Card to show Fathom Analytics stats.
Laravel Package for integrating Tabler template and this package is Laravel Mix friendly.
统计信息
- 总下载量: 78
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 25
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-01-12