shixue/uvdesk-app-creator
Scaffolds UVdesk applications from Laravel, generating bundle structure, configuration, routes, and boilerplate so developers can quickly build and register custom helpdesk apps without manual setup.
This is a scaffolding package, not a runtime dependency — its whole job is to spit out a directory tree you then own and edit. Treat adoption as a one-off tooling decision rather than an architectural one.
composer require --dev it, and pin the exact version ("0.1.0") rather than a caret range. At v0.1.0 there is no meaningful compatibility promise, and a scaffolding tool that changes its output shape between patches will silently produce inconsistent skeletons across your team.src/ and find the command class (typically under Commands/ or Console/) plus any stubs/ or Resources/ directory. The stubs are the documentation at this stage — reading them tells you exactly what files, namespaces, and placeholders you'll get faster than any README will.ServiceProvider + routes/web.php + config/ conventions. Before you invest time, generate one skeleton into a scratch directory and read the output. If it doesn't match your target, this package is the wrong tool regardless of how clean the generator is.One-shot generation, then own the code. The healthy workflow is: generate into a clean directory, commit the result as a single "scaffold" commit, and never run the generator against that path again. This keeps history readable and makes it obvious which files are machine-authored versus hand-written.
Generate into a namespace you control. Most skeleton generators accept a name/namespace/vendor argument. Always pass an explicit one instead of relying on prompts or defaults — it keeps output deterministic and means two developers running the same command get byte-identical trees.
Use it as a template multiplier. The genuine day-to-day value is when you need the same skeleton more than once — multiple UVDesk apps, or a plugin-per-client pattern. Generate, strip the sample code down to your house style, then keep that stripped copy as your real internal starting point and stop invoking the package.
Wire it into a bootstrap script, not a docs page. If onboarding involves "run this command with these three answers," put it in a composer script or a shell script in the repo so the invocation is version-controlled and reviewable. Interactive console prompts are the enemy of reproducibility.
Bracket the generated output with your own checks. Add the generated directory to whatever static analysis you already run (PHPStan/Psalm, Pint or php-cs-fixer) so the skeleton is normalised to your standards immediately, rather than becoming a permanently un-linted corner of the codebase.
Bridge deliberately if you're staying in Laravel. If the skeleton is Symfony-flavoured and you need it inside a Laravel app, isolate the adapter work: one service provider that registers the pieces, one config file mapping the skeleton's assumptions onto Laravel's container and autoloading. Keep that bridge in a small, well-named namespace so the generated code stays otherwise untouched and re-generatable in spirit.
question()/ask() style prompts, it will hang or take defaults non-interactively. Test with --no-interaction; if it's unsupported, don't put it in any automated path.-vvv) and watch which paths get written. If the command fails silently, the most common cause is a missing writable parent directory rather than a logic bug.composer dump-autoload and possibly a new PSR-4 entry before anything resolves. Add that to the bootstrap script.vendor/ path with no publish step, your only customisation route is forking the package or generating-then-editing. Prefer the latter — it keeps you off a fork you'll have to maintain.How can I help you explore Laravel packages today?