team-nifty-gmbh/flux-erp
Flux ERP provides a Laravel-based ERP foundation for Team Nifty apps, with reusable models, migrations, and workflows for customers, products, orders, invoices, and related business data. It helps teams add ERP features quickly while keeping code maintainable.
flux-erp looks like a meta/ERP layer on top of flux-core; open composer.json in the repo and confirm whether it pulls flux-core plus modules, what Laravel/Livewire/PHP versions it constrains, and whether it expects a specific frontend stack (Vite + Alpine + Tailwind). That one file determines half your integration risk.composer require team-nifty-gmbh/flux-erp
php artisan vendor:publish --provider="Flux\\..." # confirm provider name via composer.json / src/
php artisan migrate
php artisan route:list --path=flux # or whatever prefix the provider registers
src/*ServiceProvider.php (bindings, routes, Livewire registration, config merges), config/ (feature flags, table prefixes, auth guard), database/migrations/ (existing table names — this is where collisions bite), routes/, and any src/Contracts or src/Events directory. With 4 stars and likely thin docs, src/ is the documentation.php artisan about, check config/app.php providers, and confirm whether the package registers a panel/route prefix and auth guard you must log into. Most "it renders blank" reports are an unseeded permission/role table or a guard mismatch.docs/upstream.md note of every place you deviate — you will need it at upgrade time.final, prefer: (a) relations + observers, (b) traits/concerns, (c) subclassing with a config-driven model map, and only last (d) forking. Check whether the provider resolves models via config('...models.contact') — if it does, swapping in your subclass is a one-line config change and is the cleanest hook available.float. Find the package's money value object / cast and use it consistently in your own tables; ERP rounding bugs surface months later in tax reports.@fluxScripts-style directives) — a missing asset manifest is the most common "nothing works" failure.DB::transaction(), queue external sync as jobs, and make them idempotent on the package's document/order identifiers.RefreshDatabase runs the package's migrations for you — good. Build factories for your models only, and assert against upstream factories where they exist rather than recreating fixtures.composer.json. At this maturity, ^0.x will hand you breaking changes silently.contacts, products, addresses, media, or orders, resolve this before the first migrate. Check for a configurable table prefix and decide early — renaming after data exists is painful.php artisan permission:cache-reset (or cache:clear). If a menu item or button is invisible, this is the first thing to check.config:cache hides your changes. Config merges from the provider are frozen into the cached config; remember to re-cache in deploy scripts after vendor:publish.composer require time, not later.php artisan route:list --path=<prefix>, Log::info() inside the package's service provider boot() (temporarily, via a local fork or dd()), and Laravel Telescope on a scratch install to see exactly which queries the UI fires. Telescope on a seeded demo DB is the fastest way to learn an undocumented ERP package.repositories + path/VCS entry in composer.json) so you can patch a blocker on a Friday afternoon without waiting upstream. Keep your patches as a separate commit stack so rebasing on new releases stays tractable.How can I help you explore Laravel packages today?