wmds/mindbodyonline-api-bundle
Symfony bundle that integrates the Mindbody Online API into your PHP application, offering ready-made services and configuration for booking, scheduling, and client data access. Simplifies authentication and API calls so you can connect to Mindbody faster.
Architecture fit — the headline risk. Despite being catalogued here as a Laravel/PHP package, this is a Symfony 2 bundle, not a Laravel package. It ships a Bundle subclass, DI extension, and YAML service definitions that only the Symfony 2 kernel can load. Laravel has no equivalent container-compilation or bundle-registration mechanism, so the package cannot be installed and used as-is. The reusable asset is the inner client layer — the code that speaks to MindBody — and even that is likely entangled with Symfony's EventDispatcher, DependencyInjection, and configuration tree.
API-surface risk. The bundle targets the MindBody SOAP-era API (WSDL-generated client via ext-soap). MindBody has since moved to a REST Public API with OAuth2 source credentials, and legacy SOAP endpoints have been progressively sunset. There is a real possibility the wire protocol this package implements is no longer served at all — which would make the client code a historical reference rather than a functioning integration.
Technical risk summary (high). Four compounding factors: (1) Symfony 2 reached end-of-life in November 2018; (2) 4 stars and 0 dependents means no downstream testing, no issue traffic, and no community to lean on; (3) PHP 5.x/7.0-era code will fight PHP 8.x on dynamic properties, ext-soap typing, and Guzzle major-version conflicts; (4) the underlying vendor API contract has moved. Any one of these is manageable; together they argue strongly against adopting it as a dependency.
Key questions to resolve in a timeboxed spike (2–3 days, not more):
Stack fit. Do not attempt to bridge Symfony's container into Laravel. Treat the repository as a reference implementation: mine it for endpoint shapes, request/response field mappings, and domain modeling (appointments, clients, staff, services), then reimplement against a Laravel-native transport.
Recommended shape. A first-party packages/mindbody module inside the monorepo:
config/mindbody.php for source credentials, site ID, base URI, and timeout/retry policy.MindBodyServiceProvider binding a typed client singleton, with credentials pulled from env and never from committed config.Http client for REST (retry, timeout, middleware) — this also gives you clean test doubles via Http::fake().CatalogService, BookingService) that return DTOs, so vendor payload churn stays in one layer.Migration path. Two-track decision tree:
ext-soap, and wrap it. Fastest to first data, but you inherit an interface with no future.Compatibility notes. Laravel 10/11 run PHP 8.1+, so Symfony 2 code will not load; Guzzle 5/6 constraints from that era conflict with Laravel's HTTP stack. Plan on zero code reuse at the transport layer regardless of which track you choose — the value being extracted is domain knowledge, not executable code.
Sequencing.
Maintenance. Effectively zero upstream. With 0 dependents and a Symfony 2 target, expect no fixes, no security patches, and no responsiveness from maintainers. If we vendor any of this code, we own it outright and should document it as a fork with a named owner. Budget a standing line item for API-version tracking, since the vendor contract — not the package — is the thing most likely to break us.
Support. No usable documentation beyond the repository, no vendor support path for third-party wrappers, and MindBody partner support is gated on account tier. Internal ramp-up requires familiarity with SOAP/XML debugging and the MindBody data model simultaneously, which narrows the pool of engineers who can pick this up cold.
Scaling. MindBody enforces per-site rate limits and offers no meaningful batching on the legacy interface, so a naive "call on every page load" design will degrade quickly. Mitigations: cache catalog reads with a TTL measured in minutes-to-hours, queue write operations rather than performing them in the request cycle, and instrument call counts per endpoint from day one. Booking endpoints are the throughput bottleneck, not catalog reads.
Failure modes to design for explicitly:
ext-soap extension absent in a container image — fails at boot, not at call time.Ramp-up realism. Expect one engineer, roughly one week, to reach a confident go/no-go on API viability, plus 1–2 weeks for a production-grade read path. The package itself saves perhaps a day of domain discovery. Frame the decision to stakeholders accordingly: we are not adopting a dependency, we are evaluating an abandoned reference implementation against a live vendor API — and the value is bounded, the risk is not.
How can I help you explore Laravel packages today?