rohanadhikari/filament-nepali-datetime
Filament Nepali DateTime adds Bikram Sambat (Nepali) date and time support to your admin panels, with Nepali date pickers, table columns, and formatting for forms, filters, and infolists—making it easy to work with Nepali dates alongside standard Laravel and Filament components.
Architecture fit. Unchanged in principle: the package wraps FilamentDateTimePicker/TextColumn/TextEntry (and now, with v2.1.0, the time-bearing variants) to render and accept Bikram Sambat dates while persisting Gregorian values — correct localization placement, no schema coupling. The release does not alter the core structural critique: calendar logic remains reachable only through UI components, not through an application-owned conversion service. If anything, the addition of a timepicker sharpens it. Date-only conversion has one boundary (the calendar day); datetime conversion adds hour, minute, and second across a UTC+05:45 offset, which is exactly the logic that should live in one owned, tested service rather than inside a Filament component wrapper. Treat the package as a UI adapter, not a calendar library — and now also not a timezone library.
Integration feasibility. Still Composer-installable, MIT, small surface (three-ish components), single maintainer, negligible dependents. v2.1.0 is a minor bump, which suggests semver-compatible and non-breaking, but the release note is a single line ("Timepicker by @rohanAdhikari1 in #13") with no migration guidance, no deprecation notes, and no stated compatibility matrix. We should not infer "non-breaking" from the version number alone — verify that the timepicker is additive (new component/option) rather than a behavioral change to the existing date-only components. The decisive gating questions are now: which Filament major, and does the timepicker wrap Filament's DateTimePicker internals or reimplement its Alpine/JS layer? The former is upgrade-fragile; the latter is upgrade-fragile and requires a manual audit.
Technical risk. Ranked, with the release's effect noted:
DateTimePicker is a more complex component than DatePicker — more internals, more Livewire binding, more Alpine state. The most upgrade-fragile integration point in the TALL stack just got broader.Key questions. Updated for the release; the timepicker questions are the new gate.
composer.json allow, and is that constraint an upper bound or open-ended?Asia/Kathmandu, config('app.timezone'), or naive? What exactly is persisted — UTC, app tz, or local wall clock?DateTimePicker or reimplement the picker JS? If reimplemented, has the Alpine/Livewire layer been audited for clearable state, min/max bounds, keyboard entry, and step/seconds handling?Stack fit. Unchanged: Laravel 10/11+, PHP 8.1+, Filament v3 (verify v4), Livewire 3, standard TALL admin panel. Still a pure-admin-surface concern touching no queues, APIs, migrations, or auth. The timepicker widens the blast radius modestly — any resource that captures timestamps (appointments, shifts, deadlines, audit-style fields) becomes a candidate, which is a larger set than date-only fields.
Migration path. The five-step additive/reversible path stands, with one addition driven by v2.1.0:
Compatibility. Build the explicit three-axis support matrix (Filament major, PHP minor, Livewire) and pin all of it — the package's own constraints may be looser than reality. Two checks before committing, unchanged but sharper post-release: (a) is our Filament version inside the package's tested range or merely its composer.json range; (b) does the timepicker pass through Filament's picker JS or replace it. Given a one-line release note and no changelog detail, also verify empirically that v2.0.5 → v2.1.0 does not alter existing date-only rendering before promoting the upgrade into a shared branch.
Sequencing. Compatibility audit → v2.0.5→v2.1.0 regression check on existing date-only screens → fork-or-facade decision → golden-dataset harness (dated + datetime) → date-only single-resource pilot → timepicker pilot on a separate resource → documented conventions (AD canonical, BS at the edge, timezone explicit) → broader rollout → upstream contribution policy. Steps 1–4 remain the gate; the timepicker adds roughly a half-week of edge-case testing and one JS audit. Realistically: one engineer-week for a defensible date-only pilot, plus three to five days to extend to datetime. The harness is reusable even if the package is abandoned.
Maintenance. Still vendored code with a friendly upstream. 5 stars, 0 dependents, single maintainer, no downstream production signal, and a release whose entire documentation is a PR link. The steady state is unchanged: we carry the fork, backport Filament compatibility fixes, and extend BS tables. v2.1.0 adds a new component to carry — small, but it means our fork diverges faster. Budget and assign it; the table horizon remains a scheduled maintenance item with a calendar reminder years ahead.
Support. No SLA, no vendor, GitHub issues only; internal escalation terminates at our own engineer. The timepicker slightly raises the cost of being the terminal support tier, because datetime bugs reported by users are harder to reproduce and triage than date-only ones. Still acceptable for admin-panel convenience; still unacceptable for anything a customer invoices against.
Scaling. Runtime cost remains negligible. Organizational scaling risk is unchanged and now slightly worse: every timestamped Filament resource is a new place to draw the AD/BS and local/UTC boundaries incorrectly. Without a written convention — including the timezone contract — divergence accumulates. Multi-region deployments get a sharper edge case: operators in different timezones viewing the same record may expect different calendars and different wall-clock times, and a globally-configured BS rendering with an implicit Nepal timezone is a one-size-fits-none answer that will be wrong for the non-Nepali operator.
Failure modes. Ordered by insidiousness:
Ramp-up. Still low mechanically — component-swap, not paradigm shift; productive in under a day for a Filament-fluent engineer. The domain cost is unchanged and the timepicker adds a second axis to it: BS month irregularity, the ~56.7-year offset, Baisakh 1, the UTC+05:45 boundary, and now the local-vs-stored wall-clock semantics. Require a named owner for calendar and timezone correctness, and at least one Nepali-literate reviewer in QA for date- and time-facing acceptance tests. Without that, the date-only pilot will pass, the timepicker will ship, and the edge cases will surface as a slow trickle of "the meeting shows the wrong day" tickets.
How can I help you explore Laravel packages today?