What the ecosystem is
innoboxrr is a set of packages for building Laravel 13 applications with a Vue or React interface. It is not a template you copy once and forget. It is a way of working where a generator writes the structure of every model, always the same way, and you write the part only you know.
One rule drives everything else:
Architecture is declared, not hand-written. What you do write by hand is business logic, and only in the slots the generator leaves for it.
The problem it solves
Building many models, by hand or with an AI, rarely fails because it is slow. It fails because of drift: each model comes out slightly different from the last, and thirty models later the application no longer has one architecture, it has thirty.
Here each model is described in a small, verifiable JSON file, laraimport.json, and LaraPack generates around 58 files per model that come out identical every time. On top of that, checks with exit codes tell you when the code stops matching the contract.
The three pieces
| Piece | Package | What it does |
|---|---|---|
| Base application | innoboxrr/laravel-setup | Turns a fresh Laravel 13 app into an editable public site, authentication (register, login, password reset, impersonation) and an admin panel with a menu, notifications and a profile. In Vue or React. |
| LaraPack | innoboxrr/larapack-generator | Reads laraimport.json and generates the API and the admin module for every model. Keeps the result honest with validate, verify and audit. |
| Satellite packages | laravel-auth, laravel-options, laravel-notifications, laravel-uploads… and on npm innoboxrr-form-core, innoboxrr-form-elements, the tables… | Authentication, site settings, notifications, files, form components, tables, named routes, translations and validation. What the base app and the generated code rely on. |
The base app's user is generated by LaraPack too, so it has the same architecture as any model you add later.
What you get for each model
On the Laravel side:
- A migration, a model with relation, operation, storage and mutator traits, and search filters.
- A controller with no logic, one request per action, and a Resource that carries each row's actions.
- A policy that starts closed: only an administrator gets through.
- Events and listeners, an observer, and an Excel export that notifies by email.
- A named routes file, a factory, and a test that exercises every endpoint.
On the interface side, in Vue or React:
- A table with per-row permissions, bulk actions on selected rows and in-cell editing.
- Create and edit forms in drawers over the table, a record view, and a command palette on Ctrl+K.
- Text as English keys with translations kept separately, and styling that comes from CSS variables, with no CSS framework.
How you work
laraimport.json → larapack:validate → larapack:import → your logic in the slots → larapack:verify + tests- You decide the shape of the domain: models, columns, relations, which actions each table has.
larapack:validatetells you whether the JSON is valid and consistent before anything is written.larapack:importgenerates. When regenerating, it never overwrites what you edited by hand: it keeps it and tells you.- You write business logic, authorization and visibility in the slots.
larapack:verifyand the tests confirm everything still lines up.
Three checks, each exiting non-zero when something is wrong:
| Command | What it checks |
|---|---|
larapack:validate | That laraimport.json is valid and consistent, before generating. |
larapack:verify | That the generated code still says what the contract says: missing files, undeclared routes, exposed secrets. |
larapack:audit | That a package meets the ecosystem baseline: versions, tests and release workflows. |
Where to start
| Your situation | Start here |
|---|---|
| You are starting an application from scratch | A new application, then Your first model |
| You want a feature you can reuse across applications | A new package |
| You already have a Laravel package or application | In an existing project |
| You want to understand how it fits together before installing | How it fits together |
First, check the requirements.
If you are an AI agent
The whole loop is designed so you can follow it without guessing. larapack:schema prints the contract's schema, and validate, import and verify accept --format=json so you can read what to fix. larapack:skill installs the ecosystem instructions into .claude/skills/larapack/SKILL.md (or AGENTS.md with --path=AGENTS.md). Details in AI-assisted development.
What it is not
- Not a scaffolder that walks away. LaraPack stays in the project: it regenerates, verifies and audits for the whole life of the code.
- No CSS framework. Nothing generated carries Tailwind, UIkit or Font Awesome classes. Styling comes from the
--fe-*variables ininnoboxrr-form-core, dark mode included. - Not Ziggy. The frontend asks for every URL by route name with
innoboxrr-route-resolver, from theroutes.jsonthatphp artisan route:jsonexports. - It does not decide your domain or your permissions. Policies start closed precisely so that opening them is your decision.