PHPackages                             ziming/filament-oh-dear - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Logging &amp; Monitoring](/categories/logging)
4. /
5. ziming/filament-oh-dear

ActiveLibrary[Logging &amp; Monitoring](/categories/logging)

ziming/filament-oh-dear
=======================

A read-only Filament 4/5 panel plugin for Oh Dear monitor insights.

0.1(1mo ago)00[1 PRs](https://github.com/ziming/filament-oh-dear/pulls)MITPHPPHP ^8.4CI failing

Since Jun 2Pushed 4w agoCompare

[ Source](https://github.com/ziming/filament-oh-dear)[ Packagist](https://packagist.org/packages/ziming/filament-oh-dear)[ Docs](https://github.com/ziming/filament-oh-dear)[ GitHub Sponsors](https://github.com/ziming)[ RSS](/packages/ziming-filament-oh-dear/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (1)Dependencies (15)Versions (3)Used By (0)

Filament Oh Dear
================

[](#filament-oh-dear)

[![Latest Version on Packagist](https://camo.githubusercontent.com/900765477c513172d9d89c135ef3c434319bdfb892e2eca3d479ea7422ad0a1c/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f7a696d696e672f66696c616d656e742d6f682d646561722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/ziming/filament-oh-dear)[![GitHub Tests Action Status](https://camo.githubusercontent.com/b179b444944aa39c6c91d61245abde34efbb94e24ba60d4bf9c8131f7795ee70/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f7a696d696e672f66696c616d656e742d6f682d646561722f72756e2d74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/ziming/filament-oh-dear/actions?query=workflow%3Arun-tests+branch%3Amain)[![GitHub Code Style Action Status](https://camo.githubusercontent.com/6cdfd137983ccc880cebe7c672d21be6b74c01fad9052f0dca82e39424cd83f4/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f7a696d696e672f66696c616d656e742d6f682d646561722f6669782d7068702d636f64652d7374796c652d6973737565732e796d6c3f6272616e63683d6d61696e266c6162656c3d636f64652532307374796c65267374796c653d666c61742d737175617265)](https://github.com/ziming/filament-oh-dear/actions?query=workflow%3A%22Fix+PHP+code+style+issues%22+branch%3Amain)[![Total Downloads](https://camo.githubusercontent.com/a6c36c40a53e2500f542a68d7b351d3d7b851c4816febb2adde2fa4fb0ef2783/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f7a696d696e672f66696c616d656e742d6f682d646561722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/ziming/filament-oh-dear)

Read-only Oh Dear insights for Filament 4 and 5 panels. The plugin renders remote Oh Dear monitor data directly from the API, caches responses through Laravel, and avoids local sync tables or CRUD flows.

This package is still very much in progress, when it is ready I will tag a 1.0

Support Us
----------

[](#support-us)

You can donate to my github sponsor or use my referral link for Oh Dear so I get a small reward if you become a paid customer in the future. This comes at no extra cost to you and helps support my open source work.

Features
--------

[](#features)

- `Overview` page composed of pluggable widgets — stats, needs-attention list, monitors-by-group breakdown
- `Monitors` page powered by Filament custom table data
- Hidden `Monitor details` page composed of pluggable per-monitor widgets: summary, check summaries, latency chart, certificate health, broken links, downtime, mixed content, latest Lighthouse report, application health checks, maintenance periods, domain info
- Add, remove, or replace any widget on either page via the plugin fluent API or package config
- Package config defaults with per-panel plugin overrides
- `php artisan filament-oh-dear:verify` for connection checks

Installation
------------

[](#installation)

```
composer require ziming/filament-oh-dear
```

Publish the config if you want to customize defaults:

```
php artisan vendor:publish --tag="filament-oh-dear-config"
```

Environment
-----------

[](#environment)

```
OH_DEAR_API_TOKEN=
OH_DEAR_TEAM_ID=
OH_DEAR_MONITOR_IDS=1,2,3
OH_DEAR_CACHE_STORE=
OH_DEAR_CACHE_TTL=300
```

- `OH_DEAR_API_TOKEN` is required.
- `OH_DEAR_TEAM_ID` is optional. When omitted, the token default scope is used.
- `OH_DEAR_MONITOR_IDS` is optional. When set, only those monitors are shown and their order is preserved.
- `OH_DEAR_CACHE_TTL=0` disables caching.

Register The Plugin
-------------------

[](#register-the-plugin)

```
use Ziming\FilamentOhDear\FilamentOhDearPlugin;

public function panel(Panel $panel): Panel
{
    return $panel
        ->id('admin')
        ->path('admin')
        ->plugin(FilamentOhDearPlugin::make());
}
```

Per-Panel Overrides
-------------------

[](#per-panel-overrides)

```
use Ziming\FilamentOhDear\FilamentOhDearPlugin;

FilamentOhDearPlugin::make()
    ->apiToken(fn (): string => decrypt(config('services.oh_dear.token')))
    ->teamId(10)
    ->monitorIds([12, 55, 89])
    ->cacheStore('redis')
    ->cacheTtl(120)
    ->navigationGroup('Observability')
    ->navigationIcon('heroicon-o-signal')
    ->navigationSort(40);
```

Precedence is always `plugin override > package config`.

Configuring widgets
-------------------

[](#configuring-widgets)

Both the `Overview` and `Monitor details` pages render a list of Filament widgets that you can freely mix and match. Defaults come from `Ziming\FilamentOhDear\Support\OhDearSettings::defaultOverviewWidgets()` and `defaultMonitorWidgets()`.

```
use Ziming\FilamentOhDear\FilamentOhDearPlugin;
use Ziming\FilamentOhDear\Widgets\Monitor\ApplicationHealthChecksWidget;
use Ziming\FilamentOhDear\Widgets\Monitor\BrokenLinksWidget;
use Ziming\FilamentOhDear\Widgets\Monitor\DomainInfoWidget;
use Ziming\FilamentOhDear\Widgets\Monitor\LighthouseReportWidget;
use Ziming\FilamentOhDear\Widgets\Monitor\MaintenancePeriodsWidget;
use Ziming\FilamentOhDear\Widgets\Monitor\MixedContentWidget;
use Ziming\FilamentOhDear\Widgets\Overview\MonitorsByGroupWidget;
use Ziming\FilamentOhDear\Widgets\Overview\MonitorsByTypeWidget;

FilamentOhDearPlugin::make()
    // Append additional widgets to the defaults
    ->addOverviewWidgets([
        MonitorsByTypeWidget::class,
        MonitorsByGroupWidget::class,
    ])
    ->addMonitorWidgets([
        MixedContentWidget::class,
        LighthouseReportWidget::class,
        ApplicationHealthChecksWidget::class,
        MaintenancePeriodsWidget::class,
        DomainInfoWidget::class,
    ])
    // Or drop one you don't want
    ->removeMonitorWidgets(BrokenLinksWidget::class)
    // Or replace the entire list outright
    // ->overviewWidgets([OverviewStatsWidget::class])
    // ->monitorWidgets([MonitorSummaryWidget::class])
;
```

You can also point the package at your own widget classes — anything that extends `BaseMonitorWidget` (with a public `int $monitorId` property) or any Filament widget accepting an `overview` array prop will work.

### Available widgets

[](#available-widgets)

Overview (`Ziming\FilamentOhDear\Widgets\Overview\…` and `Ziming\FilamentOhDear\Widgets\OverviewStatsWidget`):

- `OverviewStatsWidget` – totals and active issue counts
- `NeedsAttentionWidget` – list of monitors needing attention
- `MonitorsByGroupWidget` – healthy / issue breakdown per group
- `MonitorsByTypeWidget` – stat tiles per monitor type

Monitor (`Ziming\FilamentOhDear\Widgets\Monitor\…`):

- `MonitorSummaryWidget` – basic monitor info and status
- `CheckSummariesWidget` – per-check summaries
- `LatencyChartWidget` – 24-hour latency sparkline
- `CertificateHealthWidget` – TLS certificate details and checks
- `BrokenLinksWidget` – broken link findings
- `DowntimeWidget` – recent downtime periods
- `MixedContentWidget` – mixed-content findings (HTTPS pages loading HTTP assets)
- `LighthouseReportWidget` – latest Lighthouse scores and web vitals
- `ApplicationHealthChecksWidget` – application-reported health checks
- `MaintenancePeriodsWidget` – configured maintenance windows
- `DomainInfoWidget` – WHOIS / RDAP snapshot for the domain

Verify Command
--------------

[](#verify-command)

```
php artisan filament-oh-dear:verify
```

The command checks:

- an API token is configured
- `me()` succeeds
- the configured team scope is accessible when `team_id` is set
- each configured monitor is accessible when `monitor_ids` is set

Support Matrix
--------------

[](#support-matrix)

- PHP: `^8.4`
- Filament: `^4 | ^5`
- Laravel / illuminate contracts: `^12 | ^13`
- Oh Dear SDK: `^4`

Screenshots
-----------

[](#screenshots)

- Overview page: placeholder
- Monitors table: placeholder
- Monitor detail page: placeholder

Local Development
-----------------

[](#local-development)

The repository ships with a Testbench workbench panel:

```
composer install
composer build
php vendor/bin/testbench serve
```

Then open `/admin/oh-dear`.

Testing
-------

[](#testing)

```
composer test
composer analyse
composer format
```

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for recent changes.

License
-------

[](#license)

The MIT License (MIT). Please see [LICENSE.md](LICENSE.md) for more information.

###  Health Score

37

—

LowBetter than 81% of packages

Maintenance92

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity42

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 81.3% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

52d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/20bbe714df709bd31994360fbba65adce9f28fd930c5590265d4d58c452fe32e?d=identicon)[ziming.opensource](/maintainers/ziming.opensource)

---

Top Contributors

[![ziming](https://avatars.githubusercontent.com/u/679513?v=4)](https://github.com/ziming "ziming (13 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (2 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (1 commits)")

---

Tags

laravelmonitoringfilamentfilament-pluginoh dear

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/ziming-filament-oh-dear/health.svg)

```
[![Health](https://phpackages.com/badges/ziming-filament-oh-dear/health.svg)](https://phpackages.com/packages/ziming-filament-oh-dear)
```

###  Alternatives

[rawilk/profile-filament-plugin

Profile &amp; MFA starter kit for filament.

3914.8k](/packages/rawilk-profile-filament-plugin)[croustibat/filament-jobs-monitor

Background Jobs monitoring like Horizon for all drivers for FilamentPHP

274333.4k9](/packages/croustibat-filament-jobs-monitor)[stephenjude/filament-jetstream

A Laravel starter kit built with Filament inspired by Jetstream.

17760.2k3](/packages/stephenjude-filament-jetstream)[stephenjude/filament-debugger

About

104162.2k2](/packages/stephenjude-filament-debugger)[finity-labs/fin-mail

A powerful email template manager and composer for Filament with dynamic token replacement, template versioning, and inline email sending.

284.8k2](/packages/finity-labs-fin-mail)[backstage/mails

View logged mails and events in a beautiful Filament UI.

16121.5k](/packages/backstage-mails)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
