Skip to content

What the base application includes

innoboxrr/laravel-setup turns a fresh Laravel 13 application into the ecosystem's base application, with the interface in Vue or React. It is a development package: you install it with --dev, it writes the files, and from then on everything left in the application is yours.

bash
composer require --dev innoboxrr/laravel-setup
php artisan app:setup            # Vue
php artisan app:setup --react    # React
php artisan app:install

Every step is explained in Install.

What you see in the browser

PartRoutesWhat it does
Public site/, /privacy, /terms, /contact, /joinFive pages rendered from the theme option of laravel-options, with 13 sections and a complete example site. Edited from the admin panel.
Authentication/auth/login, /auth/register, /auth/forgot-password, /auth/reset-password/:token/:emailLog in, register, password reset, an email verification notice and returning from impersonation, with laravel-auth.
Admin panel/admin, /admin/profile, /admin/site and the module routesA menu built from the LaraPack modules, home cards, a notifications bell, dark mode, a profile with photo and password, the site editor, and links to the logs and to the .env editor.
UsersGenerated module, admins onlyThe User model is generated by LaraPack from laraimport.json, with its API, policies, tests and screens, like any other model.

Each part has its own page: The site and its editor, Authentication and users, The admin panel.

What ends up in the backend

app:setup copies these files into the application (from the package's stubs/app/common):

FileWhat it is for
bootstrap/app.phpstatefulApi() so the SPA uses the Sanctum session; redirectGuestsTo('/auth/login'), because Laravel's login route does not exist; the admin alias for EnsureUserIsAdmin; JSON errors for api/* and for requests that expect JSON.
bootstrap/providers.phpAppServiceProvider, EventServiceProvider and RouteServiceProvider. LaraPack generates the last two: without the route provider routes/api/models/*.php is not loaded, and without the event provider an export sends no notification.
routes/web.php/ serves the app view and a fallback serves the SPA on every other route. A missing api/* or JSON request gets a 404.
app/Providers/AppServiceProvider.phpJsonResource::withoutWrapping(), because tables read data, meta and links at the root; and the viewLogViewer gate, admins only.
app/Http/Middleware/EnsureUserIsAdmin.phpThe admin middleware: 403 unless the user returns true from isAdmin().
config/env-editor.phpThe .env editor enabled (ENV_EDITOR_ENABLED, default true) behind web, auth and admin.
database/migrations/0001_01_01_000010_add_payload_and_soft_deletes_to_users_table.phpAdds payload and deleted_at to users. LaraPack does not alter that table because Laravel wrote its migration.
database/seeders/SiteOptionsSeeder.phpThe example site: site_name, site_description and theme.
laraimport.jsonThe user declaration. Whatever you add later goes here.

It also writes config/routes-to-json.php, adds admins to config/auth.php, generates the user with LaraPack and copies a UserPolicy that lets each person view and edit their own account.

The packages it installs

app:setup writes them into composer.json and app:install installs them. The right-hand column says what actually uses them:

PackageVersionUsed by
innoboxrr/laravel-auth^6.1.0Authentication, session, verification and impersonation. 6.1 is the minimum because returning from impersonation is a POST.
innoboxrr/laravel-options^2.1The site and its editor.
innoboxrr/laravel-notifications^2.1The admin notifications bell.
innoboxrr/laravel-uploads^2.1The profile photo.
innoboxrr/laravel-env-editor^2.1The "Environment" admin link.
opcodesio/log-viewer^3.24The "Logs" admin link.
innoboxrr/routes-to-json^2.1php artisan route:json, which writes the interface's routes.json.
innoboxrr/search-surge, innoboxrr/support, innoboxrr/traits^3.0, ^2.1, ^2.1The code LaraPack generates: filtering and pagination, metas and payload.
maatwebsite/excel^4.0The exports LaraPack generates.
laravel/sanctum^4.3The SPA session against the API.
innoboxrr/locale-generator^2.1The locale:generate and locale:translate commands.
league/flysystem-aws-s3-v3^3.0Flysystem's S3 driver, for anyone using an S3 disk.
staudenmeir/belongs-to-through, staudenmeir/eloquent-has-many-deep^2.18, ^1.22Not used directly by the base application.
innoboxrr/laravel-audit^2.1Installed with no UI. Its API exists; no screen uses it.
innoboxrr/aws-file-manager^2.0Installed with no UI. Its API exists and answers 503 until S3 is configured; no screen uses it.
algolia/scout-extended^5.0Installed, not configured or used.
google/recaptcha^1.3Installed, not used. No form has reCAPTCHA.
innoboxrr/larapack-generator (dev)^7.10.2Generating models.

It also removes lab404/laravel-impersonate: laravel-auth handles impersonation.

What is not wired

  • Social login. app:setup writes VITE_GOOGLE_LOGIN, VITE_FACEBOOK_LOGIN and VITE_MICROSOFT_LOGIN, but neither interface reads any VITE_* variable. laravel-auth has the Socialite routes; the screens have no buttons.
  • Starting an impersonation. The interfaces only include "Back to my account". There is no button to log in as another user; see Authentication and users.
  • Auditing, the S3 file manager, Scout and reCAPTCHA. Installed, with no screens or configuration.
  • Interface tests in your application. The Vue and React tests live in the package and are not copied.

Vue or React

Both interfaces are the same application: same routes, same screens, same site JSON and same backend calls. The interface contract pins that down. What changes is the stack and where some things are configured:

VueReact
Entryresources/vue/app/main.jsresources/react/app/main.jsx
Routervue-router 4, guards in beforeEachReact Router 7 (data router), a guard in each route's loader
StatePinia 3Zustand 5
Componentsinnoboxrr-form-elementsinnoboxrr-react-form-elements
Tablesinnoboxrr-vue-datatableinnoboxrr-react-datatable
Settingsconfig.js only exports adminOnly; the rest is written in its own fileconfig.js exports adminOnly, adminBase, userUpdateRoute, adminTools, notificationsInterval and sitePages

Each one has its page: With Vue and With React. The behavioral differences are listed in Customize and extend.

Who owns each file

WhereWhatOwner
resources/<ui>/app/Site, authentication, admin panel, state and routesYours once installed: laravel-setup never touches it again.
resources/<ui>/index.js, resources/<ui>/src/The generated modules (users and whatever you generate)LaraPack's: they are regenerated. The base application imports them and never edits them.
laraimport.jsonThe user declaration and your modelsYours
database/seeders/SiteOptionsSeeder.phpThe example siteYours
app/Http/Middleware/EnsureUserIsAdmin.phpThe admin middlewareYours
config/auth.phpadminsWho administers (ADMIN_EMAILS)Yours

<ui> is vue or react.

Next step

Install the base application, or follow the complete guide in A new application.