Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Filament Simple Stats Laravel Package

spatie/filament-simple-stats

Opinionated, prebuilt stat widgets for Filament dashboards. Quickly add daily counts and sums using Flowframe/laravel-trend, with helpers like last 30 days to generate clean, consistent stats cards with minimal setup.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture Fit

  • Pros:

    • Filament Integration: Seamlessly extends Filament’s widget ecosystem, leveraging its existing architecture for dashboard customization. Aligns with Filament’s modular design (v5.2+ compatibility).
    • Trend Analysis: Built on flowframe/laravel-trend (now inlined), providing period-over-period comparisons without additional dependencies. Reduces complexity for time-series metrics.
    • Opinionated Simplicity: Abstracts query logic (e.g., dailyCount(), dailySum()) and UI rendering, adhering to Laravel’s Eloquent patterns. Ideal for teams prioritizing rapid iteration over customization.
    • Extensibility: Supports Eloquent Builder modifications (e.g., where() clauses) and custom trend logic (e.g., invertTrendColors()), balancing flexibility with convention.
  • Cons:

    • Filament Dependency: Tight coupling to Filament v5.x+ may limit adoption in projects using older versions or alternative admin panels (e.g., Nova, Backpack).
    • Limited Customization: Prebuilt widgets (e.g., count/sum) may not cover niche use cases (e.g., complex aggregations, non-Eloquent data sources).
    • Trend Logic: Hardcoded period-over-period comparisons might not suit all analytical needs (e.g., year-over-year, custom time windows).

Integration Feasibility

  • Laravel Ecosystem: Native support for Laravel 12–13, Eloquent, and Filament’s widget system ensures low-friction integration. No database migrations or schema changes required.
  • Query Performance: Underlying laravel-trend uses efficient SQL queries (e.g., GROUP BY with window functions). Risk of performance degradation if stats are overused on high-traffic dashboards.
  • Frontend: Uses Filament’s Blade/React components; no custom JavaScript or CSS needed. UI consistency is guaranteed but limits styling flexibility.

Technical Risk

  • Filament Version Lock: Requires Filament v5.2+. Downgrading or upgrading Filament may break compatibility (monitor Filament’s changelog).
  • Trend Calculation: Period-over-period logic assumes consistent time intervals. Edge cases (e.g., partial days, holidays) may require custom overrides.
  • Testing: Limited test coverage for edge cases (e.g., empty datasets, null values). Teams must validate behavior with their data models.
  • Dependency Bloat: Inlining laravel-trend reduces external dependencies but increases package size slightly (~1MB).

Key Questions

  1. Filament Adoption: Is Filament already in use, or would this require a migration from another admin panel?
  2. Customization Needs: Are prebuilt widgets sufficient, or will custom queries/trends be needed (e.g., for financial metrics)?
  3. Performance: How many concurrent users will access dashboards? Are stats cached (e.g., via Filament’s cacheFor or Laravel’s remember)?
  4. Data Sources: Are all metrics Eloquent-based? Non-database sources (e.g., API calls) would need custom implementations.
  5. Trend Logic: Does the default period-over-period comparison align with business KPIs, or are custom time windows required?
  6. Maintenance: Who will handle updates if Filament or Laravel versions change? Is the team comfortable forking if needed?

Integration Approach

Stack Fit

  • Primary Stack: Laravel 12–13 + Filament 5.x + Eloquent.
  • Secondary Stack:
    • Alternative Admin Panels: Not directly compatible with Nova/Backpack, but similar logic could be ported.
    • Non-Eloquent Data: Requires custom query builders or adapters (e.g., using SimpleStat::custom() if exposed).
    • Frontend Frameworks: Works with Filament’s React/Vue components; no direct integration with vanilla JS frameworks.

Migration Path

  1. Prerequisites:
    • Upgrade Filament to v5.2+ if not already done.
    • Ensure Laravel is on 12 or 13 (or use a fork for older versions).
  2. Installation:
    composer require spatie/filament-simple-stats
    
  3. Implementation:
    • Extend a Filament widget class (e.g., StatsOverview) and override getStats():
      protected function getStats(): array {
          return [
              SimpleStat::make(User::class)->last7Days()->dailyCount(),
              SimpleStat::make(Order::class)->last30Days()->dailySum('amount'),
          ];
      }
      
    • Register the widget in app/Providers/Filament/AdminPanelProvider.php.
  4. Testing:
    • Validate stats with sample data (e.g., seed test databases).
    • Test edge cases: empty datasets, null values, custom where clauses.

Compatibility

  • Backward Compatibility: Breaking changes are unlikely given Spatie’s conservative release cycle, but major Filament updates may require adjustments.
  • Forward Compatibility: Supports Laravel 13; teams on newer versions (e.g., 14+) should monitor for updates.
  • Customization Hooks: Limited but sufficient for common needs (e.g., withoutTrend(), invertTrendColors()). Complex cases may need extending the package.

Sequencing

  1. Phase 1: Integrate core stats (e.g., user activity, revenue) with default configurations.
  2. Phase 2: Customize queries (e.g., where() clauses) and trends for business-specific metrics.
  3. Phase 3: Optimize performance (e.g., caching, query tuning) if dashboards are slow under load.
  4. Phase 4: Extend for non-Eloquent data sources or advanced aggregations if needed.

Operational Impact

Maintenance

  • Dependencies: Minimal (Filament, Laravel, Eloquent). Updates are straightforward via Composer.
  • Bug Fixes: Spatie’s MIT license allows forking if issues arise. Community support is active (GitHub discussions, Spatie’s Slack).
  • Deprecation Risk: Low for core features, but trend logic or Filament API changes could require updates.

Support

  • Documentation: Comprehensive README with examples. Changelog tracks breaking changes.
  • Community: 27 stars and active contributions suggest a small but engaged user base. Issues are resolved promptly.
  • Enterprise Support: Spatie offers paid support for commercial use; MIT license allows internal modifications.

Scaling

  • Performance:
    • Small/Medium: No issues expected with default configurations.
    • Large: Stats queries may become bottlenecks. Mitigations:
      • Cache results (e.g., cacheFor(3600) in widgets).
      • Use database indexing for filtered queries (e.g., user_id).
      • Offload trend calculations to a queue (e.g., Laravel Horizon) for precomputed stats.
  • Database Load: Trend calculations involve window functions (e.g., LAG()). Test with production-like data volumes.

Failure Modes

  • Data Errors: Null values or invalid queries may break stats. Validate with try-catch or default fallbacks:
    SimpleStat::make(Order::class)->dailySum('amount')->default(0);
    
  • Trend Calculation: Division by zero (e.g., comparing to zero) could crash. Package handles this gracefully but test edge cases.
  • Filament Crashes: If Filament updates break widget rendering, roll back or patch the package.

Ramp-Up

  • Developer Onboarding:
    • Time: 1–2 hours to integrate basic stats; additional time for customizations.
    • Skills: Familiarity with Filament widgets and Eloquent queries is required.
  • Training:
    • Provide a sandbox project with preconfigured widgets.
    • Document common patterns (e.g., filtering by auth user, caching strategies).
  • Adoption Barriers:
    • Filament Learning Curve: Teams new to Filament may need training on widget development.
    • Customization Limits: Teams with complex needs may resist the opinionated approach.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
codraw/framework-extra-bundle
codraw/messenger
codraw/security
codraw/mailer
codraw/contracts
codraw/profiling
codraw/dependency-injection
codraw/tester
codraw/core
nexmo/api-specification
capell-app/block-library
axium/identity
cetria/laravel-dummy-models
cetria/reflection-helper
agropredict/sso-auth-bundle
evolvestudio/spam-protection
datacore/hub-sdk
develia/commons
cuci/prototurk-sdk
cuci/prototurk-sdk-symfony