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

Uberall Bundle Laravel Package

localfr/uberall-bundle

A Symfony bundle for integrating the Uberall location marketing platform into PHP applications. It provides configuration and service wrappers for managing business listings, locations, and related Uberall API data. Use it to connect your app to Uberall APIs for local SEO and directory management.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — low, and the brief is mislabeled. The package is a Symfony bundle, not a Laravel package. It is a Bundle subclass with a DependencyInjection/*Extension.php and services.yaml, none of which Laravel's container discovers or compiles. There is no composer require → artisan command path, no config-cache integration, no facade, no service provider. The value on offer is a thin DI/config wrapper over Uberall's REST API — the useful part is the outbound client and the service definitions, not the Symfony plumbing. A TPM should treat the description's "Laravel/PHP package" framing as a defect to correct before it reaches a sprint plan, because it materially changes the effort estimate.

Integration feasibility — low as a dependency, moderate as a reference. Three routes, and the decision is a TPM decision because it sets the maintenance envelope:

  1. Bypass and build a thin Laravel client. If the bundle is what its own description suggests (config + client wiring + a handful of location calls), a UberallClient over Laravel's Http facade is smaller than the adapter work and gives first-class retries, pooling, and fakes. This is the default recommendation.
  2. Extract framework-agnostic service classes and bind them in an UberallServiceProvider. Worth it only if the bundle encodes non-obvious payload mapping or directory-specific quirks.
  3. Boot a Symfony container inside Laravel. Reject. Pulls framework-bundle into the app, duplicates config/cache concerns, and creates a permanent upgrade tax with no product benefit.

Technical risk — high, driven by signals not by code quality. One star, zero dependents, single maintainer, composite score 0.205, opportunity 14.89. The 2025-01-22 release shows a live maintainer, but that is the entire safety net: no CI matrix is visible, no security disclosure path, no downstream users to absorb the cost of discovering breakage. Bus factor is one. This is effectively sample code published under MIT.

Key questions for the spike (timeboxed, half a day):

  • Which Uberall API version and endpoints are covered — locations, listings, reviews, insights, directories? What is not wrapped?
  • What is the dependency tree? Does it hard-require symfony/framework-bundle, and at which major? That single constraint decides whether extraction is even possible on our Laravel version.
  • Auth model and credential scoping — API key vs. private key, per-account vs. per-location — and where credentials are expected to live.
  • Are pagination, retry/backoff, and 429 handling implemented, or deferred to the caller?
  • Are service classes genuinely container-agnostic and unit-testable, or do they resolve through the container / ContainerAwareInterface?
  • Is there any test coverage at all, and is the Uberall client mocked?

Integration Approach

Stack fit — adapt the ideas, do not adopt the artifact. The Laravel-idiomatic target is one UberallClient (or a small set of typed clients per resource) bound as a singleton, configured from config/services.php under a uberall key, credentials in .env, all mutating calls behind queued jobs. That preserves config caching, Http::fake() testability, and Octane safety without inheriting Symfony kernel semantics.

Migration path and sizing. Sequence the work with explicit gates so the TPM can cut scope early:

Step Effort Gate / exit criterion
Spike: read services.yaml + Extension, enumerate endpoints and payloads 0.5–1 day Endpoint inventory and dependency-tree answer in hand
Build-vs-extract decision 0.5 day Written call, signed off by tech lead
Adapter: UberallClientInterface + UberallClient + service provider + config 1.5–2 days Read endpoints working against sandbox
Queued jobs for writes, idempotency keys, dead-letter handling 1.5–2 days Bulk import survives a simulated 429
Observability, feature flag, shadow-run parity check 1–2 days Dashboards + alert on auth failure

Roughly one engineer-week for a production-ready adapter with jobs, tests, and observability — versus roughly two days if the bundle turns out to be a trivially thin wrapper and we write against Uberall's REST docs directly. The spike exists to decide between those two numbers before committing.

Compatibility — validate before anything else. Pin the constraint set: Laravel 11/12 ride Symfony 7.x components, Laravel 10 rides 6.1/7.x. If the bundle requires framework-bundle:^5.4 we are forced onto an EOL line or blocked outright. Also verify whether it assumes a parameter bag for config, which has no Laravel analogue.

Sequencing discipline. Read-only first (locations, listings, insights) → confirm data parity → then writes (location upsert, listing distribution) → then webhooks/insights ingestion. Never lead with writes: Uberall propagates changes to Google Business Profile, Apple Maps, Facebook, and Yelp, so a bad payload is externally visible and slow to unwind. Feature-flag the integration and shadow-run reads against the incumbent process before cutover.

Operational Impact

Maintenance — adoption means ownership. With zero dependents there is no upgrade path we do not build. Budget for a fork under internals/uberall-client (path or VCS repo) so patching is a normal PR rather than a composer.json override. Treat the 0.205 score as an explicit instruction: this must not sit on a revenue-critical path as a load-bearing dependency.

Support — no SLA, no channel. Single maintainer, MIT, no commercial backing. Escalation during an incident is Uberall's own API support plus our logs. Acceptable for internal tooling; not acceptable for a customer-facing sync with an uptime target unless there is a named on-call owner and a runbook.

Scaling — bounded by Uberall's API, not by PHP. Validate per-account rate limits and burst behaviour, pagination page sizes, and batch vs. per-location write costs from Uberall's docs — the bundle will not tell us. Run everything on a dedicated uberall queue with a concurrency cap so a bulk location import cannot starve interactive jobs or trigger 429s. Cache read-heavy reference data (directory lists, location metadata) with a short TTL. The most likely performance cliff is an unbatched loop over hundreds of locations.

Failure modes to instrument from day one:

  • Credential expiry — 401/403 across the board; alert, never a silent retry loop.
  • Rate limiting (429) — exponential backoff with jitter, capped retries, dead-letter queue after exhaustion.
  • Partial sync — per-location status tracking and replay, not all-or-nothing job semantics.
  • Upstream schema drift — strict DTO mapping plus logging of unknown fields; untyped arrays fail silently.
  • Stale propagation — writes accepted by Uberall but rejected downstream; needs a reconciliation read-back job.
  • Framework/PHP upgrade breakage — the bundle stops installing on the next Laravel major; the fork must be patched or the adapter swapped, and that cost lands on us, not upstream.

Ramp-up — moderate, with a cultural wrinkle. Laravel developers must read Symfony bundle conventions (Extension, Configuration, services.yaml) to interpret the reference implementation — a few hours, but a real friction point for teams without Symfony exposure. The larger learning curve is Uberall's domain model (accounts → business units → locations → listings → directories), which warrants an internal write-up regardless of integration path. Assign one owner for the adapter and one reviewer with Symfony literacy for the spike; that pairing keeps the knowledge from evaporating when the spike ends.

Recommendation. Do not take a runtime dependency on localfr/uberall-bundle. Fund a one-day spike to mine it as a reference for the Uberall API surface, then build a thin Laravel-native client with Http, queued jobs, and explicit failure handling — unless the spike shows non-trivial payload or directory-quirk logic worth vendoring as a small fork. Frame this to stakeholders as cost avoidance on glue code, not as an integration enabler: the build-vs-buy decision lives with the Uberall contract, and this package moves the needle by days, not sprints.

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.
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox
pairus/product-data
fayne/laravel-filament-cms-core