Packstub.

Customizing the UI

Every user-facing surface the package ships — the provisioning "waiting room", the billing stub page, and all wizard/profile/notification wording — can be customized without forking: views are publishable, and every string flows through the packstub-tenancy:: translation namespace. Change wording with translation overrides; change markup or styling with published views. Prefer translations when wording is all you need — published views shadow future view fixes, translations don't.

Changing the wording (translations)

php artisan vendor:publish --tag=packstub-tenancy-translations

This copies the language files to lang/vendor/packstub-tenancy/en/:

File What it covers
onboarding.php The "create your organization" wizard: titles, field labels, notifications
profile.php The tenant profile page
provisioning.php The waiting room: progress, slow-queue hint, failure state
billing.php The billing stub page
pool.php Database-pool widget strings (tenant counts)

Edit any string and delete the ones you don't override — Laravel falls back to the package copy per key. For example, to call tenants "workspaces" on the onboarding wizard, override the relevant onboarding.php strings.

Adding a locale

Create a sibling directory named after the locale and translate the same files:

lang/vendor/packstub-tenancy/de/onboarding.php
lang/vendor/packstub-tenancy/de/provisioning.php
...

Any key you don't translate falls back to the package's English string.

Changing markup or styling (views)

php artisan vendor:publish --tag=packstub-tenancy-views

This copies the Blade views to resources/views/vendor/packstub-tenancy/:

View What it renders
filament/pages/tenant-provisioning.blade.php The waiting room shown while a tenant provisions (and its failure state)
filament/pages/tenant-provisioning-layout.blade.php The standalone layout around it — self-contained styles, no app Vite build required
filament/pages/null-billing.blade.php The stub billing page

To restyle the waiting room — your logo, brand colors, different copy layout — edit the published tenant-provisioning views. They are deliberately self-contained (inline styles, no dependency on your app's Vite/Tailwind build), because they render mid-signup when the tenant context may have no compiled assets; keep that property if you rework them.

Caveat: a published view shadows the package copy permanently. When an update changes the shipped views (see the CHANGELOG), re-publish with --force and re-apply your changes:

php artisan vendor:publish --tag=packstub-tenancy-views --force

Published views and the translation namespace are public API — view data and translation keys follow semver like config keys do.