Search by

webmintydotcom / laravel-quickstart-inertia

webmintydotcom

Laravel starter kit with common addons.

Package info

github.com/webmintydotcom/laravel-quickstart-inertia

Language:TypeScript

Type:project

pkg:composer/webmintydotcom/laravel-quickstart-inertia

Statistics

Installs: 20

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

2.0.0 2026-03-26 20:20 UTC

This package is auto-updated.

Last update: 2026-10-06 18:59:10 UTC


README

Introduction

A starter kit for Laravel applications with React, Inertia.js, Shadcn UI, and Tailwind CSS v4. Designed to help you quickly set up a new full-stack Laravel project with a modern development environment.

Installation

laravel new my-app --pest --npm --using=webmintydotcom/laravel-quickstart-inertia

Tech Stack

Layer Technology
Backend Laravel 13, PHP 8.4
Frontend React 19, TypeScript 7
Routing Inertia.js
UI Components Shadcn UI
Styling Tailwind CSS v4
Build Vite 8
Testing Pest 5, Larastan

Included Packages

Laravel

Version 13 of Laravel is used in this starter kit.

Inertia.js

Inertia.js connects the Laravel backend to the React frontend without needing an API. Pages are React components rendered via Inertia::render() in your routes and controllers.

Homepage | Docs

Ziggy

Ziggy provides a route() helper in JavaScript, so you can use Laravel named routes in your React components. Call the global route() or import { route } from 'ziggy-js'. Both work in the browser and under SSR, because HandleInertiaRequests shares the route list as a ziggy prop that resources/js/ssr.tsx hands to Ziggy before rendering.

Docs

Spatie Laravel Data

Spatie Laravel Data is included to help you create data transfer objects (DTOs) in a simple and elegant way.

Docs

Laravel Person Name

A Unicode-safe validation rule for first and last names, from any language or culture.

use Webminty\PersonName\Rules\ValidPersonName;

$request->validate([
    'first_name' => ['required', new ValidPersonName],
    'last_name'  => ['required', new ValidPersonName],
]);

Docs

Frontend

React

React 19 with TypeScript 7. Entry point is resources/js/app.tsx with SSR support via resources/js/ssr.tsx.

Docs

Shadcn UI

Pre-configured with components.json pointing to resources/js/components/ui/. Includes all required dependencies (Radix UI, class-variance-authority, clsx, tailwind-merge, Lucide icons).

Homepage | Docs

Tailwind CSS

Tailwind CSS v4 with the Vite plugin. Themed with the Webminty brand: a mint color scale, warm stone neutrals, and Plus Jakarta Sans / JetBrains Mono typefaces loaded from Google Fonts.

Colors are semantic tokens (--background, --primary, --card, ...) defined as CSS variables in resources/css/app.css, with a .dark block for dark mode. Add the dark class to <html> to switch themes.

Homepage | Docs

Debugging

Spatie Laravel Ray

Spatie Laravel Ray is included to help you debug your Laravel applications with ease.

Homepage | Docs

Testing

Pest

Pest 5 is included to help you write expressive and elegant tests for your Laravel applications.

Homepage | Docs

Spatie Pest Expectations

Docs

Pest Plugin - Faker

Docs

Pest Plugin - Laravel

Docs

Pest Plugin - Type Coverage

Docs

Larastan

Larastan is included to help you catch type errors in your Laravel applications using PHPStan.

Docs

Pint

Pint is included to help you format your Laravel code according to the Webminty coding standard.

Docs

Laravel Rector

Rector is included to help you refactor and upgrade your Laravel codebase automatically.

Docs

Formatting

Prettier

Prettier is included to help you format your code consistently across your project.

Homepage | Docs

Prettier Plugin - Tailwind CSS

Docs

Prettier Plugin - Blade

Docs

Additional Configurations

Changes to the default Laravel files are included in this starter kit to improve performance and developer experience.

app/Providers/AppServiceProvider.php

Model::preventLazyLoading();

if ($this->app->isProduction()) {
    Model::handleLazyLoadingViolationUsing(function ($model, $relation) {
        $class = get_class($model);

        info("Attempted to lazy load [{$relation}] on model [{$class}].");
    });
    DB::prohibitDestructiveCommands();
} else {
    Model::preventAccessingMissingAttributes();
    Model::preventSilentlyDiscardingAttributes();
    Model::shouldBeStrict();
}

Vite::usePrefetchStrategy('aggressive');

Thank you Webminty Team