interaction-design-foundation/nova-worldclock-card
A Laravel Nova card that displays world clocks for multiple time zones, helping you keep an eye on local times across offices and teams directly from your dashboard.
Architecture fit. nova-worldclock-card is a Laravel Nova dashboard card: a Vue component compiled with laravel-mix/webpack and distributed as a Composer dependency. It is architecturally peripheral by construction — it renders inside the existing Nova admin surface and touches no application domain code, no database, no queue, no auth path, and makes no outbound network calls. For a TPM the correct framing is that adoption is a UI-surface decision, not an architecture decision, and should be reviewed at that altitude. The one architecturally meaningful item in 3.4.0 is the runtime floor moving to PHP 8.4 (breaking, up from 8.3), which converts what reads like a routine package bump into a platform-gating dependency whose critical path is owned by another team. The 8-star / 0-dependent profile is a weak external signal for viability; it is partly offset by the maintainer being an established organisation (Interaction Design Foundation) rather than an individual. That provenance is acceptable for cosmetic admin chrome and would not be acceptable for anything on a critical path.
Integration feasibility. Feasible in isolation within hours: composer require, register the card in the Nova service provider, publish the config, enumerate cities and time zones. Every real constraint sits outside the team doing the work — the host runtime must be PHP ≥ 8.4, the installed Laravel major must be one our Nova release supports, and our Nova release must be one this card supports. The changelog's "Laravel 13 support groundwork" is forward-looking language, not a support statement; it must not enter a compatibility matrix. A second feasibility branch deserves early resolution: if the published artifact ships pre-compiled assets, the webpack/laravel-mix churn is not ours to carry; if consumers compile from source, we inherit a dependency on a build toolchain in maintenance mode.
Technical risk. Low blast radius, three non-zero risks, one triaged non-risk:
webpack: ^5.60.0, and webpack 5.107.0 removed lib/SizeFormatHelpers while 5.102+ tightened ProgressPlugin option validation. Pinning webpack is correct remediation and strictly improves our position — but it confirms the asset pipeline is a slowly decaying moving part that breaks without upstream warning.HttpUriPlugin allowedUris bypass via redirects requires experiments.buildHttp, which this package does not enable. Build-time only, unreachable here. Log the triage decision and do not open remediation.Key questions.
composer.lock?Stack fit. Clean if and only if three layers align: PHP ≥ 8.4, a Laravel major supported by our Nova release, and a Nova major supported by this card. Any mismatch blocks, and the mismatch is resolved outside this repository. The package adds no services, storage, credentials, or background work, so it does not change runtime topology or the deployment model — which keeps the change-review surface small and keeps TPM attention on the prerequisite chain rather than the code.
Migration path. Treat 3.4.0 as baseline adoption (no prior assessment exists). Three paths, in preference order:
^3.4, register, configure, verify.composer remove is a legitimate and often preferable outcome. It deletes the PHP constraint entirely at zero feature cost — a rare case where the cheapest option is also the cleanest.Compatibility. Verify against the Nova version in composer.lock, never against changelog aspiration. Build- and CI-side changes (@vue/compiler-sfc 3.5.40, actions/checkout v7, actions/setup-node v7, actions/cache v6, composer cs chaining PHP-CS-Fixer ahead of phpcbf) affect the consumed artifact only if we build from source; otherwise they are noise in review and should be explicitly excluded so reviewers do not spend time on them.
Sequencing. Milestones, owners, and gates:
composer remove.Maintenance. Near-zero steady state: no database, no scheduled work, no storage, no secrets, no external calls. The real maintenance surface is upgrade hygiene — this maintainer ships breaking runtime-floor bumps per minor line (8.3 → 8.4), so budget a small review each cycle rather than assuming silent patch-level churn. Pin the constraint deliberately and upgrade on our cadence, not on composer update.
Support. No commercial support tier and a single-maintainer organisation. The internal Nova admin owner is the de facto support path. Because the failure mode is cosmetic, escalation is trivial: the card can be disabled or removed without touching application behaviour. Document that explicitly so on-call does not treat a blank card as an incident.
Scaling. Not a scaling concern. There is no server-side work beyond Nova's normal dashboard render, and a handful of client-side timers per open browser tab. The only tunable is the number of configured time zones, which is a readability decision, not a capacity one.
Failure modes.
| Failure | Signal | Impact | Mitigation |
|---|---|---|---|
| Blank/unstyled card after Nova upgrade | Silent — no error, no test | Cosmetic, but erodes trust in the dashboard | Manual QA on every Nova upgrade; card is non-critical, so no rollback urgency |
| Composer resolution failure on PHP < 8.4 | Loud, at install time | Blocks deploy of the host app | Correctly attributed; sequence as separate change set |
| Upstream asset build breakage (webpack/laravel-mix) | Only if compiling from source | Build pipeline friction, no runtime impact | Prefer consuming published assets; otherwise pin webpack |
| DST / time zone display inconsistency | Users report wrong-looking times | Display-only; no logic depends on it | Confirm the card is never used as an input to scheduling or notification logic |
| Orphaned dependency | Audit finds card rendered nowhere | Pure drag on every platform upgrade (the 8.4 floor) with zero value | Usage audit is the decision gate; remove rather than upgrade |
Ramp-up. Negligible for engineers — a composer require plus a handful of config lines. TPM-specific ramp-up is the documentation cost: record the decision, the confirmed Nova/Laravel/PHP matrix, and the named owner of the time zone list. That last item outlives the code, because the list of cities reflects who is on call and where the team is distributed, and it will drift silently if nobody owns it. Also set expectations explicitly with stakeholders that this is a display widget, not a scheduling capability — timezone conversion, availability search, and timezone-aware notifications belong in application code via Carbon, and the presence of a clock on the dashboard must not be mistaken for a roadmap commitment to any of that.
How can I help you explore Laravel packages today?