tomatophp/tomato-pms-module
Laravel module for TomatoPHP that adds a lightweight project management system to your admin panel. Organize projects, tasks, teams, and progress in one place, with a consistent admin interface and Composer-based installation.
composer require tomatophp/tomato-pms-module, then run the module's installer (php artisan tomato-pms:install) which publishes config, migrations, lang files and assets in the standard TomatoPHP way.config/tomato-pms.php (table names, model bindings, feature toggles), src/Providers/TomatoPmsServiceProvider.php (what gets registered, published and loaded), database/migrations/ (the actual schema you'll be extending), and src/Filament/ (the resources/pages your panel exposes).tomato-admin, or by adding the module's plugin to your PanelProvider — and confirm the PMS navigation group appears.php artisan migrate, open the PMS resources in the panel, create one record end-to-end (project → related items) to verify policies, tenancy and media/attachment handling before wiring anything custom.generate command. Discover it with php artisan list | grep tomato-pms rather than guessing the signature, then run php artisan help <command> to see its arguments and options.config/tomato-pms.php (or via the container) instead of editing vendor files. Overriding a resource's form()/table() in a subclass is the cheapest way to add company-specific fields.AuthServiceProvider (or let the module do it) and scope queries by tenant/team at the repository or global-scope layer if the module doesn't already do it for you.config()->set('tomato-pms.…', …) in test setUp and RefreshDatabase against published migrations so generated resources can be feature-tested with Livewire's assertCanSeeTableRecords helpers.loadMigrationsFrom-ed; if you also publish them you can get duplicate-table errors. Decide once: publish (editable) or load-from-package (upgrade-friendly).php artisan config:clear && php artisan optimize:clear and re-publish assets — a stale bootstrap/cache/config.php is the most common cause of "my config change does nothing".--force flag exists. Never run it blindly on a branch with uncommitted work.composer.json constraints against your panel version before upgrading, and re-test resources after any Filament bump.Project, Task, Comment) collide easily when stacking modules — alias imports or namespace your own models, and check for duplicate Filament resource slugs.vendor:publish.config toggles — in that order. php artisan about plus the module's provider boot order usually reveals the culprit.composer update, since vendor publish tags can shift generated stubs.How can I help you explore Laravel packages today?