# Where a Laravel and Vue file goes

Copied from the setup guide at https://laravel-vuejs.space/application-setup. The app entry row is from the Inertia 3.9 article. These are the paths the guide names for the official Vue starter kit.

| Thing | Path | Command | Rule | Source |
| --- | --- | --- | --- | --- |
| New app | `blog/` | `laravel new blog` | Yes to a starter kit, then Vue and built-in authentication. Pest installs unless you pass --phpunit. | [Setup guide](https://laravel-vuejs.space/application-setup) |
| Dev servers | `blog/` | `composer run dev` | Starts the PHP server, the queue worker, the log viewer, and Vite. The app is at http://localhost:8000. | [Setup guide](https://laravel-vuejs.space/application-setup) |
| Model | `app/Models/Post.php` | `php artisan make:model Post -mfs` | The same command creates the migration, factory, and seeder. | [Setup guide](https://laravel-vuejs.space/application-setup) |
| Migration | `database/migrations/xxxx_xx_xx_create_posts_table.php` | `php artisan migrate` | Title, unique slug, excerpt, and a nullable published_at. | [Setup guide](https://laravel-vuejs.space/application-setup) |
| Factory | `database/factories/PostFactory.php` | Edit the file | Fake title, slug, excerpt, and published_at. | [Setup guide](https://laravel-vuejs.space/application-setup) |
| Seeder | `database/seeders/PostSeeder.php` | `php artisan db:seed --class=PostSeeder` | Creates 12 posts from the factory. | [Setup guide](https://laravel-vuejs.space/application-setup) |
| Controller | `app/Http/Controllers/PostController.php` | `php artisan make:controller PostController` | Inertia::render('posts/Index') passes the posts prop. The guide adds no API route for this list. | [Setup guide](https://laravel-vuejs.space/application-setup) |
| Route | `routes/web.php` | Edit the file | GET /posts, named posts.index. | [Setup guide](https://laravel-vuejs.space/application-setup) |
| Vue page | `resources/js/pages/posts/Index.vue` | Edit the file | The folder is pages, lowercase. The Inertia component name is posts/Index. Props use defineProps in script setup. | [Setup guide](https://laravel-vuejs.space/application-setup) |
| Feature test | `tests/Feature/PostsTest.php` | `php artisan test` | Pest. assertInertia checks the component posts/Index. | [Setup guide](https://laravel-vuejs.space/application-setup) |
| App entry | `resources/js/app.ts` | Edit the file | Register an Inertia navigate listener here once. | [Inertia 3.9](https://laravel-vuejs.space/inertia-3-9-background-polling-navigate-type) |
| Production | Command only | `npm run build:ssr` | npm run dev already server-renders. Deploy the SSR bundle with npm run build:ssr. | [Setup guide](https://laravel-vuejs.space/application-setup) |

Vue pages live in `resources/js/pages/posts/Index.vue`. The Inertia component name for that list is `posts/Index`.
The list is an Inertia page on a web route. The setup guide does not add an API route for it.
The first test is Pest in `tests/Feature/PostsTest.php`, run with `php artisan test`.
Dev servers start with `composer run dev`. The app is at http://localhost:8000.
Create the app with `laravel new blog`. Answer yes to a starter kit, then Vue, then Laravel's built-in authentication. Pest is installed unless you pass --phpunit.
The Vue starter kit in that guide includes Inertia 3, Vue 3, TypeScript, Tailwind CSS 4, and shadcn-vue. Tailwind CSS 4 and shadcn-vue are not in the download chart.
Setup guide: https://laravel-vuejs.space/application-setup
Inertia 3.9 article: https://laravel-vuejs.space/inertia-3-9-background-polling-navigate-type
HTML table: https://laravel-vuejs.space/tools/files