Weave 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 Cards Laravel Package

harvirsidhu/filament-cards

Filament Cards turns any Filament page into a card-based navigation hub for settings hubs, cluster front pages, and resource dashboards. It auto-discovers authorized pages, supports grouping and layout, and feels native to Filament.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. The package is additive by design: CardsPage extends Filament's Page, and cards are composed from CardItem/CardGroup objects declared in a static getCards() method. It introduces no tables, migrations, service providers (plugin registration is optional), or changes to existing Resources and Pages. Blast radius is confined to whichever routes you deliberately opt in. That is the right shape for a TPM to approve: it can be piloted behind a single Cluster and removed by deleting one class.

The leverage point is replacing hand-built "settings hub" pages. Teams routinely write bespoke dashboard Blade views that hardcode links, then let them rot as Resources are added. Auto-discovery (discoverClusterCards() / discoverResourceCards()) converts that from a maintained artifact into a derived one, which is a genuine reduction in long-term ownership cost rather than a cosmetic win.

Integration feasibility. Three steps: composer require, add a Tailwind @source line pointing at the vendor views directory, rebuild assets. The npm build step is the only non-PHP dependency and is the part most likely to be missed on a first attempt — styles will render unstyled rather than fail loudly. Budget a half-day including a theme pipeline walkthrough; budget a sprint including pilot and rollout.

Technical risk. The dominant risk is not code quality, it is concentration. Twelve stars, zero dependents, and a single maintainer mean no downstream validation and no community fallback if the maintainer stops. Declaring support for both Filament v4 and v5 simultaneously doubles the surface area that must be tested per Filament release, and a v6 would likely strand the package. The discovery mechanism is the deepest coupling: it reads Filament navigation internals (getNavigationLabel, getNavigationBadge, canAccess, shouldRegisterNavigation) reflectively, so upstream refactors are a breaking-change vector that semantic versioning on this package cannot protect you from.

Second risk is authorization semantics. Discovery calls canAccess() per component on render. That is correct behaviour, but it means hub page render cost scales with component count and policy complexity — worth measuring before pointing it at a large Cluster. Third, the "multi-tenant SaaS" positioning in the description is not backed by tenant-aware primitives in the documented API; tenancy is achieved via the generic visible()/hidden() closures, which is workable but is your code, not the package's.

Key questions.

  1. Which Filament major are we actually on, and is a v4→v5 upgrade on the roadmap within 12 months?
  2. Do we have frontend build ownership (npm/Tailwind) in the deploy pipeline, or is the theme build a shared-service dependency?
  3. How many components will the largest Cluster hub surface, and what is the policy-query cost of canAccess() at that scale?
  4. Does the existing authorization model (policies vs. role checks vs. Filament's canAccess overrides) map cleanly onto per-card visibility?
  5. Is the intended value a one-off settings hub, or a repeatable pattern across tenants? The former justifies composer require; the latter argues for a vendored fork or in-house reimplementation.
  6. What is our acceptable bus-factor here — is a single-maintainer, MIT-licensed, 500-line-style package something we are willing to fork if abandoned?

Integration Approach

Stack fit. Hard requirements are PHP 8.2+, Laravel 11+, Filament v4 or v5. Confirm the application baseline first; on Laravel 10 or PHP 8.1 the package is simply unavailable, and the cost of this decision becomes an unrelated platform upgrade. If the platform is already current, fit is clean.

Migration path. There is no data migration and no brownfield coercion. Existing Pages and Resources require zero changes to appear as cards — the only optional edit is adding $navigationDescription or $filamentCardsGroup statics to enrich cards. That means the migration path is "add one page," not "refactor existing pages," which keeps the rollback story trivial.

Compatibility. Three things to verify before committing:

  • Theme build. The @source '../../../../vendor/harvirsidhu/filament-cards/resources/views' path must be added to the Filament theme CSS and the asset build run in CI, not just locally. If the vendor path differs (path repositories, non-standard installs) the glob silently misses and Tailwind purges the card classes.
  • Authorization parity. Confirm canAccess() resolves consistently with how the rest of the panel gates navigation, so cards do not leak visibility of pages the sidebar hides.
  • Filament version pin. Pin the package version in composer.json and treat Filament upgrades as requiring a re-test of the hub, not as routine patch bumps.

Sequencing.

  1. Spike: one throwaway branch, one manual CardsPage with three CardItems. Validates install + theme build end to end. Half a day.
  2. Pilot: convert one real Cluster front page to discoverClusterCards() with the exclude list populated. Compare discovered output against the sidebar manually, including with a low-privilege test account.
  3. Hardening: wire theme build into CI, add showInFilamentCards() opt-outs for internal-only pages, pin the version.
  4. Rollout: replicate per Cluster. Because each hub is a leaf page, rollout is per-cluster and independently revertible.
  5. Decide on ownership: at scale, evaluate vendoring the source into the repo to remove the single-maintainer dependency. MIT license makes this a one-commit decision.

Operational Impact

Maintenance. Low steady-state surface — the package is declarative configuration, not infrastructure. Real maintenance load is concentrated at Filament upgrade time, where you must re-verify discovery still reads the correct navigation internals. Pin the version, watch the changelog, and assign a named owner for the Filament upgrade review.

Support. Self-support only. In practice this is acceptable because the README is unusually complete for a package of this size — API reference covers every CardItem and CardGroup method, plus discovery hooks and dynamic registration. A developer can read the source in an afternoon. Do not expect upstream fixes on your timeline; assume you will patch by fork.

Scaling. Two dimensions degrade. Client-side search filters rendered cards in the browser, which is fine at dozens of cards and wasteful at hundreds — it does not reduce server work, only visual noise. Per-component canAccess() during discovery means hub render cost grows with component count times policy cost; for large Clusters with expensive Gates, cache or curate via exclude lists. Multi-tenant instances multiply both but don't change the shape of the problem.

Failure modes to instrument for.

  • Silent empties. A hub page renders with no cards because discovery returned nothing — wrong Cluster reference, all components excluded, or $resource mis-set. Fails open into a blank page, not an error. Add a smoke test asserting a minimum card count per hub.
  • Silent disappearances. A card vanishes because shouldRegisterNavigation() or canAccess() flipped false. This is correct authorization but indistinguishable from a bug. The showInFilamentCards() override is the escape hatch; document it.
  • Unstyled render. Missing theme @source or an unbuilt asset pipeline ships a broken-looking page. Catch in CI, not in review.
  • Upgrade breakage. Filament minor releases changing navigation internals break discovery without a package version change. Treat the hub as part of the Filament upgrade test plan.
  • Sort/group drift. Cards fall back to $navigationGroup and $navigationSort, so unrelated navigation reorganisations silently reshuffle the hub. Acceptable, but worth knowing before someone files it as a regression.

Ramp-up. Fast for anyone already fluent in Filament — the API deliberately mirrors label/schema/columnSpan/visible, so there is almost no new vocabulary. One to two days to productive, most of it spent on the theme build and discovery semantics rather than the card API. For developers new to Filament, the package adds little marginal difficulty; the cost sits with Filament itself. The main onboarding risk is conceptual over-reliance: teams should understand that the hub is derived from navigation state, so debugging a missing card starts at the Page/Resource, not at the hub.

Verdict for planning purposes. Low-cost, low-blast-radius adoption for settings/Cluster hubs, contingent on a current Filament stack and frontend build access. The technical risk is modest; the supply-chain risk (single maintainer, 12 stars, zero dependents, dual-major version support) is the deciding factor. Recommend a bounded pilot with a pinned version and a pre-agreed trigger for forking under MIT if upstream stalls.

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.
andydefer/laravel-notification
adachsoft/cli-process-tester
jhaskell13/laraflow
sebastienheyd/boilerplate-media-manager
ccast/tagixo-primix
pretendtrue/laravel-builder
sawmainek/laravel-scout-tntsearch-driver
tomshaw/laravel-calendar-table
dibakar/laravel-ownership
steadrun/laravel-monitor
labyrinthe/connect-laravel
elmogy/layan
drewdan/sentinel-client
dskripchenko/laravel-llm
fatryst/nuonuo
stevenay/myanfont
gmostafa/php-graphql-client
xeviant/paystack
snowsoft/faker
meditationsteps/blogetc