genealabs/nova-map-marker-field
A Laravel Nova field that lets you pick a location by dragging a marker on an interactive map. Stores latitude and longitude coordinates on your model, making map-based location selection simple within Nova resources.
Architecture fit. This is a Nova field, not a platform — a sanctioned, narrow extension point consisting of one PHP field class extending Laravel\Nova\Fields\Field, one compiled Vue component, a service provider, and published assets/config. It introduces no domain models, migrations, routes, queues, or scheduled jobs, and touches neither authentication nor authorization. The change surface is one line in a Nova resource definition plus a config entry. Leverage is asymmetric in the right direction: low install cost, low removal cost, blast radius describable to a non-technical stakeholder in one sentence. The correct TPM posture is to scope, price, and govern it as a widget — not to file it under "geo platform."
Integration feasibility. Mechanically the path is short: composer require, publish config, set a Google Maps API key, add the field to a resource. The gates that actually decide the outcome are environmental and contractual, and each has lead time:
{lat, lng}. A TPM must force this to a written answer before anyone authors a migration, because it determines whether downstream reporting, indexing, and a future PostGIS migration are cheap or a re-platform.Technical risk. Concentrated in one verifiable fact: the package is archived, last released 2022-06-17 — roughly two Nova majors and several PHP/Laravel majors ago. No patches, no compatibility releases, no security advisories, no issue triage. Supporting signals are weak: 128 stars and 0 dependents means no observable population is running this against modern Nova, so our proof of concept would be the only test in existence. Offsetting factors are genuine: MIT grants clean fork and vendor rights, and the codebase is small enough (one field class, one Vue component, one map initialization) that a native rebuild is a credible estimate rather than a heroic one. High opportunity signal against abandoned supply is the classic underserved-niche signature — demand is real, this specific artifact is not the answer.
Key questions.
Stack fit. Binary. If the estate is Laravel + Nova with an active license, this is a plausible 1–3 dev-day convenience per project. If the team runs Filament, a bespoke admin panel, or headless APIs, fit is zero and the evaluation ends at that sentence. The opportunity score reflects a thin market of Nova map-picker options, not broad applicability — do not let it leak into prioritization outside Nova.
Migration path. There is no traditional schema migration; the field is additive and removable. But there is a data-model commitment, and it is the one-way door: a JSON {lat, lng} blob versus discrete decimal columns changes how you query, index, and later migrate to a spatial type. That decision belongs at the gate, framed as adopt / fork / rebuild:
Compatibility. Pin Nova, PHP, and Node explicitly in both the composer constraint and the CI matrix. Verify the published asset path matches what our Nova version's asset pipeline expects. Test the full round-trip — create, update, detail, index — not just the happy-path form render. Treat "renders a blank map" as an expected failure mode and assert against it.
Sequencing.
Maintenance. The dominant cost, and the one that must show up in the business case. An archived package with no upstream means every Nova upgrade, PHP upgrade, or Google Maps API change lands on us. Budget a named owner, a pinned version, a vendored fork under source control, and a recurring line item — roughly 1–2 days per year of stewardship in a quiet year, materially more in any year that Nova ships a major. The alternative framing is cleaner: the native rebuild's 2–5 days is the maintenance budget amortized forward, with the abandonment risk eliminated rather than managed.
Support. There is no vendor, no maintainer, and no issue backlog to escalate into. Internal support means the owning team reads the source — realistic here given its size. Document the Google Maps key rotation procedure and the config surface in the runbook; the most common support ticket will be "the map is blank," and the answer will almost always be key, billing, CSP, or config rather than code.
Scaling. Two axes. Technically, the field is per-record and stateless; it scales with page views, not data volume — the constraint is Google Maps JS API quota and billing, which scales with admin usage and especially with index-view rendering. Keep the field off index views unless there is a specific need. Organizationally, the pattern scales well: once one resource uses it, templating it across a dozen resources is nearly free, which is precisely why the governance step (owner, pin, smoke test) must happen on the first install rather than the tenth.
Failure modes. Rank them and monitor accordingly:
Ramp-up. Low and front-loaded. A Nova-fluent developer is productive in half a day: read the field class, read the Vue component, wire a throwaway resource. The genuine skill requirement is not this package but Nova frontend competence — a team without it should not operate an unowned fork of an archived package, which is a worse outcome than not adopting at all. Plan the ramp as: one developer, one PoC resource, one written decision record covering storage contract, map provider, key handling, and ownership — then expand. Total elapsed time from kickoff to a production resource should be under a week if the Nova version matches, and roughly a week if it doesn't and we rebuild.
How can I help you explore Laravel packages today?