rdp77/client-management
A Laravel package for managing client records within your application. It offers a structured, Eloquent-backed way to store, organize, and work with client information, and is designed to drop into existing Laravel projects with minimal setup.
rdp77/client-management is at v1.0.1 — a first tagged release containing a single PR titled "Basic feature". Treat this as an early-stage package: the "getting started" path below is deliberately conservative, because the authoritative documentation is likely the source itself.
composer require rdp77/client-management fails, add the VCS repository to your composer.json and require dev-main or the tag explicitly:
"repositories": [{ "type": "vcs", "url": "https://github.com/rdp77/client-management" }]
src/*ServiceProvider.php and note exactly which publishes() tags, mergeConfigFrom() calls, migrations, and route files exist. In a v1.0.x package this file is the real documentation.php artisan vendor:publish --provider="Rdp77\ClientManagement\ClientManagementServiceProvider"
php artisan migrate
Diff the published config against the package defaults so you know what is actually configurable versus hardcoded.Client record with contact details, tied to your existing User/Team models. Walk the happy path — create a client, list clients, attach a client to a user — before wiring it into anything else.If your first use case is multi-tenant, audited, or needs soft-deleted clients with historical reporting, stop here and evaluate whether the v1.0.1 surface area actually supports that. It probably doesn't yet.
Extend the model rather than editing vendor code. Point your app's own model at the package table and add your domain fields there. This keeps you upgradeable when v1.1 lands:
namespace App\Models;
use Rdp77\ClientManagement\Models\Client as BaseClient;
class Client extends BaseClient
{
protected $fillable = ['name', 'email', 'phone', 'account_manager_id'];
}
Wrap package behaviour in your own application service. Given the package is one PR old, its public API is not a contract. Put a thin ClientService in app/ that calls into the package; when a method signature changes in v1.1, you fix one file instead of twenty controllers.
Compose with policies for authorization. A "basic feature" release almost certainly ships no authorization. Generate your own policy and register it against the package model — do not rely on route middleware inside the package:
Gate::policy(\App\Models\Client::class, ClientPolicy::class);
Treat package routes as optional. If the package registers routes, either namespace them behind your own auth + verified middleware group, or disable them (check the config for a routes toggle) and expose your own controllers. For a day-to-day admin panel, owning the routes gives you pagination, search, and filtering the package won't have.
Bridge to your existing models via relation on your side. Don't fork the package to add belongsTo(Team::class). Add the inverse relation in your app's Team model and a team_id column via your own migration that runs after the package migration.
Pin the version and record why. In composer.json use "rdp77/client-management": "1.0.*" — not ^1.0 — until you've reviewed a diff of what's changed. Add a line in your upgrade notes describing which package methods you depend on.
composer update.create_clients_table, rename yours or the migrate order will surprise you. Check vendor/.../database/migrations before running.vendor:publish lists nothing, run php artisan vendor:publish interactively and look for the provider's namespace. If config is merged rather than published, use config('client-management.*') and read the package's config file directly in vendor/.$guarded = []. Before exposing any create/update path, confirm the fillable set — otherwise a request can set your foreign keys or status columns.php artisan route:list | grep -i client and php artisan about will tell you in ten seconds whether the provider registered at all. Laravel's package discovery can silently skip a provider whose extra.laravel.providers key is malformed.Client::create() works and that your policy denies a non-owner. That one test catches most breaking changes on upgrade.main are a better signal of direction than tagged releases.How can I help you explore Laravel packages today?