mortenebak/tallstarter
mortenebak/tallstarter is an opinionated Laravel starter kit for the TALL stack, combining Tailwind CSS, Alpine.js, and Livewire with ready-made authentication, layouts, and common scaffolding so you can skip boilerplate and start building features faster.
Architecture fit. tallstarter is a starter kit, not a library. That single fact drives the entire evaluation: there is no composer require upgrade path, no semver contract, and no vendor patch stream. Adopting it means either forking the repository as an application base or harvesting components and patterns out of it into an existing codebase. Architecture fit therefore has to be judged against our current conventions, and the two diverge in ways worth naming up front:
| Dimension | Our declared stack (from AGENTS.md) | tallstarter | Fit risk |
|---|---|---|---|
| Framework | Laravel 12 | Laravel 12 | Aligned |
| PHP | 8.5.1 | Unverified constraint | Medium — verify before spike |
| Component model | Livewire 3 + Volt 1 | Livewire 3 (Volt usage unverified) | Medium — mixing class-based and Volt SFCs is a permanent convention tax |
| UI layer | Flux UI Free v2 | Likely Flux; Pro components unverified | High — a single Pro component blocks adoption or forces a rewrite |
| CSS | Tailwind 4 | Unverified | Low–Medium |
| Authz | Laravel gates/policies, built-ins first | Role/permission management bundled (probably spatie/laravel-permission) |
Medium — introduces a dependency requiring explicit approval under our rules |
| Testing | Pest 3, tests mandatory per change | Unverified (PHPUnit vs Pest) | Medium — porting cost is real but bounded |
| Static analysis | Larastan v3 | Unverified baseline | Low — we inherit cleanup debt either way |
The bundled user/role/permission domain and localization are the actual value. Both are commodity problems that every internal app re-solves badly, so an opinionated, pre-wired implementation with working UI is legitimately worth 134 stars and the 8.39 opportunity score. The 3.94 maturity score is the counterweight: the problem is valuable, the artifact is not yet hardened.
Integration feasibility. Two viable paths, and the choice should be made explicitly rather than by default:
Given that we already have a fully specified stack and code conventions, path 2 is the default recommendation, with path 1 held open only if we are standing up a new internal app in the next quarter.
Technical risk. Ranked:
flux:* Pro component in the starter means either buying Pro or rewriting views. Verify in the first hour of the spike, not the last.~8.2|~8.3|~8.4 blocks installation outright.lang/ files or a database-backed table, determines how much of it we can reuse honestly.Key questions for the maintainer / spike:
Stack fit. Our stack and tallstarter's stack are close enough that a cherry-pick is cheap and a fork is expensive. The decision hinges on one variable: whether we are greenfield or brownfield. Greenfield with no users table and no translation corpus → fork is reasonable. Brownfield → harvest, full stop, because the migration cost of substituting an auth/authorization foundation under live data dwarfs the savings.
Migration path. Treat the roles/permissions layer as the only genuinely hard-to-rebuild asset; everything else (layout, nav, auth screens) is commodity we already have opinions about.
php artisan migrate:fresh in a scratch environment, then strip every component we would not ship. The strip list will be longer than expected — budget for it.php artisan make:migration, and backfill roles from existing data. The project rule about including all prior attributes when modifying columns applies to every table we touch.lang/ scaffolding separately and define our supported-locale list before importing anyone else's translation files — importing their de/fr strings wholesale is a review burden with unclear provenance.Compatibility. Concrete gates, in order:
vendor/bin/pint --dirty clean after our edits; Larastan passes at our configured level; rector compatible.main.Sequencing.
Maintenance. The dominant operational fact: after adoption we own 100% of the code and 0% of the upstream roadmap. 134 stars and a single maintainer imply a bus factor of one and no support contract. The recurring obligation is a manual upstream diff on a schedule — realistically a half-day per quarter for security-relevant changes, plus whatever we accumulate from our own drift. Compare that against the alternative cost of building role/permission UI from scratch (roughly two to three engineer-weeks) and the fork math usually clears, but only if the quarterly review is actually staffed.
Support. No SLA, no CVE process, no upgrade guides. For an internal admin surface this is acceptable; for anything customer-facing or handling regulated data it is not, and the authorization layer specifically is a security-sensitive component that we must review line by line rather than trust.
Scaling. Role and permission checks typically sit behind a cache; the failure mode at scale is stale caches after role changes, not query volume. Two specifics to watch: Livewire's per-interaction round trips mean component-heavy admin screens degrade under latency faster than static pages, and permission checks inside loops are a classic N+1 on the authorization layer. Both are addressable but must be designed in, not patched later.
Failure modes, in rough order of likelihood:
lang/ with unclear ownership and no review gate.Ramp-up. Low for the Laravel-fluent, and this is the package's strongest operational argument: an opinionated starter with working auth, roles, and localization gets a new engineer to a functioning admin screen on day one instead of day five. Our AGENTS.md conventions are the constraint, though — new contributors must learn our conventions plus the starter's, and where the two disagree ours wins. Budget a day of documentation per deviation to stop the second-guessing. Because the project mandates tests with every change, the ramp-up investment pays back fastest if we port the auth/roles layer with Pest coverage intact; an untested authorization layer is the one thing that will repeatedly cost us the most time downstream.
How can I help you explore Laravel packages today?