LaravelStarter

laravel-starter-kit-livewire — Laravel Starter Template

By marekmiklusek

An enhanced version of the official Laravel Livewire starter kit, adding database backups, Telegram logging, and a code quality and testing toolchain.

Explore the design

Compare the page layouts and mobile experience. Open any screenshot for a closer look.

3 previews
Desktop homepage1 / 3
Desktop captureTop of page

Actual screenshot captured by the server browser.

All pages & views 3

Screenshots show visual appearance; interactive behavior may differ.

Recorded 2026-10-02View source

What stands out

A quick read of the recorded project description.

01

Extends the official Laravel Livewire starter kit while retaining the original Livewire stack

02

Pre-installs marekmiklusek/database-backup, supporting automatic MySQL backups to local or Google Drive with a 14-day retention policy

03

Pre-installs marekmiklusek/telegram-logger to push logs and exceptions to Telegram in real time, sending only error level and above by default

04

Controls user registration and two-factor authentication via environment variable switches; when disabled, the corresponding routes return 404 and entries are hidden

05

Built-in English and Czech translations, switchable via APP_LOCALE

06

composer lint and composer test cover Rector, Pint, Prettier, PHPStan, Pest, and type and code coverage checks

Template Details

This is the Laravel Livewire starter kit maintained by marekmiklusek, which adds development workflow and code quality tools on top of the official Laravel Livewire starter kit. In addition to Laravel's default Livewire stack, the project pre-installs two packages by the author: marekmiklusek/database-backup for backing up MySQL to local storage or Google Drive, and marekmiklusek/telegram-logger for pushing logs and exceptions to Telegram in real time.

Installation creates the project via composer create-project, then runs composer setup to install dependencies, generate .env and .env.production, generate the application key, run database migrations, install NPM dependencies, and build frontend assets. During development, composer dev starts the Laravel development server, queue listener, Pail log viewer, and Vite development server simultaneously.

Configuration provides several switches: FORTIFY_REGISTRATION_ENABLED controls user self-registration; when disabled, the /register route returns 404 and the registration link on the login page is hidden. FORTIFY_2FA_ENABLED controls two-factor authentication; when disabled, the related routes and settings entry are removed. For languages, English and Czech translations are built in, switchable via APP_LOCALE. Database backups are scheduled daily at 02:00 by default, stored on the local disk at storage/app/private/database-backups, and retained for 14 days. Telegram logging sends only error level and above by default, and requires both enabling the switch and providing a bot token and chat id to take effect.

For code quality, composer lint runs Rector, Laravel Pint, and Prettier in sequence; composer test includes type coverage, code coverage, Pest unit and feature tests, code style checks, and PHPStan static analysis. The project also includes Pest 4 browser testing capabilities, which require installing Playwright separately. The repository uses the MIT license, but third-party assets such as demo images, fonts, and icons, as well as external services like domains, hosting, and databases, must be checked and paid for separately.

LaravelStarter

Is it right for your project?

Use Cases

  • Quickly building a new project with authentication and settings pages based on Laravel Livewire
  • Wanting the project to include scheduled database backups and Telegram exception notifications out of the box
  • Needing to integrate unified code formatting, static analysis, and testing pipelines early in the project
  • Projects targeting English and Czech users that require multilingual interfaces and validation messages

Suitable For

  • Teams or individual developers building web applications with Laravel and Livewire
  • Projects needing out-of-the-box authentication, registration switches, and two-factor authentication configuration
  • Developers who want database backups and error log notifications included in the project's default configuration
  • Projects that value consistent code style and test coverage

Getting started & customization

Use these recorded setup notes alongside the repository instructions for your chosen version.

  1. 1

    Create the project with composer create-project marekmiklusek/laravel-starter-kit-livewire --prefer-dist, then run composer setup to complete initialization

  2. 2

    Requires PHP, Composer, Node.js, and NPM, as well as MySQL or a database of your choice; configure the database connection in .env

  3. 3

    For Pest browser testing, additionally run npm install playwright and npx playwright install to install browser binaries

  4. 4

    Telegram logging requires setting TELEGRAM_LOGGER_ENABLED, TELEGRAM_BOT_TOKEN, and TELEGRAM_CHAT_ID in .env to take effect

  5. 5

    config/essentials.php sets models to unguarded by default; you can switch to protected models using $fillable as needed

Read repository instructions

License & source material

Usage conditions & limitations

Free to use · keep license notice

This entry covers the free version under the MIT license in the public repository; the free scope is the code of this version and does not imply that external services or third-party assets are free.

Must comply with when using

  • You may use, modify, commercially use, and distribute the code of this version for free.
  • When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
  • The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.

Additional costs & items to verify

  • Google Drive backups require configuring the google disk and setting storage.disk yourself; this is an external service integration and requires preparing a Google account and credentials.
  • The Telegram logging feature requires applying for and filling in TELEGRAM_BOT_TOKEN and TELEGRAM_CHAT_ID yourself, and depends on the external Telegram service.
  • Browser testing requires separately installing Playwright and its browser binaries; it is not included by default.
  • You need to provide your own MySQL or other database service; database hosting and operating costs are borne by the user.
  • Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses and cannot be judged solely by the code's MIT license.
  • External services such as domains, hosting, databases, payments, or AI may incur additional charges.
View Original Text Basis

Permission is hereby granted, free of charge

Original License Text

To back up to Google Drive instead of (or alongside) local storage, add a `google` disk to `config/filesystems.php` and set `storage.disk`.

Original README

Add your bot credentials to `.env` (the keys are already present in `.env.example`):

Original README

If you plan to use Pest's browser testing capabilities, install Playwright:

Original README

MySQL (or your preferred database)

Original README
https://github.com/marekmiklusek/laravel-starter-kit-livewire/blob/main/LICENSEhttps://github.com/marekmiklusek/laravel-starter-kit-livewire/blob/main/README.md

Compiled by DeepSeek based on repository license and README ·2026-10-02. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.

Project checks & description sources

Template Information

Source platforms
GitHub
Documentation and maintenance reference score
More documented · 83 / 100
Technologies
Laravel
Website type
Starter
How this score is calculated

Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.

What to verify for this project

Repository update recorded
2026-09-30
Screenshot last checked
2026-10-02

A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.

The catalog identifies Laravel as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.

Use a selection guide →

How this description was prepared

AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.

Automatically checked against source and license rules; no manual editorial review.

Inspect the recorded source material

SHA-256: d82692f97948e40a6cf0e5afca5bb9af70c6963dff15d554a304dc06f56c0193

2026-10-02T14:41:33.240Z

Source file / repository
# 🚀 Laravel Livewire Starter Kit

[Laravel's official Livewire starter kit](https://laravel.com/docs/12.x/starter-kits#livewire) enhanced with development workflow tools, code quality standards, and additional developer experience improvements from [laravel-starter-kit](https://github.com/marekmiklusek/laravel-starter-kit). ✨

## 📦 Bundled Packages

Beyond Laravel's default Livewire stack, this kit ships pre-configured with:

- [marekmiklusek/database-backup](https://github.com/marekmiklusek/database-backup): automated MySQL backups to local storage or Google Drive ([setup](#-database-backups))
- [marekmiklusek/telegram-logger](https://github.com/marekmiklusek/telegram-logger): real-time log and exception delivery to Telegram ([setup](#-telegram-error-logging))

## 📋 Requirements

- PHP: see the `php` constraint in [`composer.json`](composer.json)
- Composer
- Node.js & NPM
- MySQL (or your preferred database)

## 🚀 Quick Start

> [!NOTE]
> - In `config/database.php`, `'engine' => 'InnoDB',` is used as the default for both `mysql` and `mariadb` connections.
> - In `config/essentials.php`, models are unguarded by default via `Unguard::class => true`. This allows mass assignment without explicitly defining `$fillable` properties. You can change this setting if you prefer to use guarded models.

### 📦 Installation

Create a new Laravel Livewire project:

```bash
composer create-project marekmiklusek/laravel-starter-kit-livewire --prefer-dist app-name
```

Run the automated setup script:

```bash
composer setup
```

This command will:
1. Install PHP dependencies via Composer
2. Create `.env` file from `.env.example` (if not exists)
3. Create `.env.production` file from `.env.example` (if not exists)
4. Generate application key
5. Run database migrations
6. Install NPM dependencies
7. Build frontend assets

### ⚙️ Additional Setup

#### 🔧 Environment Configuration

After running `composer setup`, configure your `.env` file with your database credentials:

```env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your_database_name
DB_USERNAME=your_username
DB_PASSWORD=your_password
```

#### 🌐 Browser Testing Setup (Optional)

If you plan to use Pest's browser testing capabilities, install Playwright:

```bash
npm install playwright
npx playwright install
```

This installs the necessary browser binaries for running browser tests.

#### 🌍 Localization

The starter kit ships with English (`en`) and Czech (`cs`) translations. Translation files live in the `lang/` directory:

```
lang/
├── en.json              # UI strings (English)
├── cs.json              # UI strings (Czech)
├── en/
│   ├── auth.php         # Authentication messages
│   ├── passwords.php    # Password reset messages
│   ├── pagination.php   # Pagination labels
│   └── validation.php   # Validation messages
└── cs/
    ├── auth.php
    ├── passwords.php
    ├── pagination.php
    └── validation.php
```

Switch the active language by setting `APP_LOCALE` in your `.env` file:

```env
APP_LOCALE=cs
APP_FALLBACK_LOCALE=en
```

To add another language, create a new `lang/{locale}.json` for UI strings and a matching `lang/{locale}/` directory for the framework files.

#### 🔐 Enable / Disable Registration

User self-registration is controlled by a single switch via the `FORTIFY_REGISTRATION_ENABLED` env variable:

```env
FORTIFY_REGISTRATION_ENABLED=true   # default, registration is open
FORTIFY_REGISTRATION_ENABLED=false  # disable registration
```

When set to `false`:
- The `/register` route is not registered and returns **404**
- The "Don't have an account? Sign up" link on the login page is hidden automatically

The flag is also exposed as `config()->boolean('fortify.registration_enabled')` if you need to read it elsewhere in the application.

#### 🔑 Enable / Disable Two-Factor Authentication

Two-factor authentication is controlled by a single switch via the `FORTIFY_2FA_ENABLED` env variable:

```env
FORTIFY_2FA_ENABLED=true   # default, 2FA is available
FORTIFY_2FA_ENABLED=false  # disable 2FA
```

When set to `false`:
- The `/settings/two-factor` route is not registered and returns **404**
- The "Two-Factor Auth" link in the settings sidebar is hidden automatically
- Fortify's `/two-factor-*` endpoints (challenge, enable, confirm, recovery codes) are not registered

The `TwoFactorAuthenticatable` trait stays on the `User` model. It is inert without the feature registered, and removing it would break factories that fill 2FA columns. Tests always run with 2FA enabled regardless of `.env` (forced via `phpunit.xml`), so the 100% coverage gate is not affected by toggling this flag locally.

#### 💾 Database Backups

The starter kit ships with [marekmiklusek/database-backup](https://github.com/marekmiklusek/database-backup) for automated MySQL backups. The config is already published to `config/database-backup.php`, so no `vendor:publish` is needed.

Backups are stored locally on the `local` disk in `storage/app/private/database-backups`, and old backups are cleaned up automatically after **14 days**.

A daily backup is already scheduled in `routes/console.php`:

```php
Schedule::command('db-backup:run')
    ->dailyAt('02:00')
    ->onOneServer()
    ->runInBackground();
```

Run it manually at any time:

```bash
php artisan db-backup:run      # create a backup
php artisan db-backup:cleanup  # delete backups older than the retention period
```

Adjust the disk, directory, filename pattern, retention period, and mail notifications in `config/database-backup.php`. To back up to Google Drive instead of (or alongside) local storage, add a `google` disk to `config/filesystems.php` and set `storage.disk`. See the [package README](https://github.com/marekmiklusek/database-backup) for the full Google Drive setup guide.

#### 📢 Telegram Error Logging

The starter kit ships with [marekmiklusek/telegram-logger](https://github.com/marekmiklusek/telegram-logger), which forwards Laravel log messages and exceptions to a Telegram chat in real time. The config is already published to `config/telegram-logger.php`.

Add your bot credentials to `.env` (the keys are already present in `.env.example`):

```env
TELEGRAM_LOGGER_ENABLED=true   # default, set to false to disable the logger entirely
TELEGRAM_BOT_TOKEN=your_bot_token
TELEGRAM_CHAT_ID=your_chat_id
```

No logging channel setup is required. The package hooks into Laravel's log events automatically, so ordinary `Log::error()` calls and unhandled exceptions are delivered:

```php
use Illuminate\Support\Facades\Log;

Log::error('User not found', ['user_id' => 42]);
```

By default only `error` and above are sent. Change the threshold or enable silent notifications in `config/telegram-logger.php`:

```php
'level' => 'error',              // debug | info | warning | error | critical
'silent_notification' => false,  // true = no sound/vibration
'is_enabled' => env('TELEGRAM_LOGGER_ENABLED', true),
```

> [!TIP]
> The logger stays idle unless it is enabled **and** both credentials are set, so leaving `TELEGRAM_BOT_TOKEN` and `TELEGRAM_CHAT_ID` empty in local development sends nothing. Use `TELEGRAM_LOGGER_ENABLED=false` to switch it off per environment without clearing the credentials.

#### 🚀 Production Environment

The setup script automatically creates a `.env.production` file. Configure it with production-specific settings:

```bash
# Edit .env.production with your production settings
```

Configure production environment variables:
- Set `APP_ENV=production`
- Set `APP_DEBUG=false`
- Configure production database credentials
- Set secure `APP_KEY` (generated during setup)
- Configure mail, cache, queue, and session drivers
- Set proper logging channels

## 💻 Development

### 🖥️ Running the Development Server

Start all development services concurrently:

```bash
composer dev
```

This starts:
- **Laravel development server** (port 8000) - Your Livewire application
- **Queue listener** - Background job processing
- **Log viewer (Pail)** - Real-time log monitoring
- **Vite dev server** - Hot Module Replacement for CSS/JS

Your Livewire application will be available at `http://localhost:8000` 🎉

## 🔍 Code Quality

### 🧹 Linting & Formatting

Fix code style issues:

```bash
composer lint
```

This runs:
- Rector (PHP refactoring)
- Laravel Pint (PHP formatting)
- Prettier (frontend formatting)

### 🧪 Testing

Run the full test suite:

```bash
composer test
```

This includes:
- Type coverage (100% minimum)
- Code coverage (100% required)
- Unit and feature tests (Pest)
- Code style validation
- Static analysis (PHPStan)

### 🌐 Browser Testing

This starter kit includes Pest 4 with browser testing capabilities. Create browser tests in `tests/Browser/`:

```php
it('displays the login page', function () {
    $page = visit('/login');

    $page->assertSee('Log in')
        ->assertNoJavascriptErrors();
});
```

### 🧪 Testing Livewire Components

Test your Livewire components with Pest's built-in Livewire testing:

```php
use Livewire\Livewire;

it('can update user profile', function () {
    $user = User::factory()->create();
    
    Livewire::actingAs($user)
        ->test(\App\Livewire\Settings\Profile::class)
        ->set('name', 'New Name')
        ->call('save')
        ->assertHasNoErrors()
        ->assertDispatched('profile-updated');
        
    expect($user->fresh()->name)->toBe('New Name');
});
```
## 📜 Available Scripts

### 🎼 Composer Scripts

- `composer setup` - Initial project setup
- `composer dev` - Run all development services
- `composer lint` - Fix code style issues
- `composer test` - Run full test suite
- `composer test:unit` - Run Pest tests only
- `composer test:types` - Run PHPStan analysis
- `composer test:type-coverage` - Check type coverage
- `composer test:lint` - Validate code style
- `composer update:requirements` - Update all dependencies

### 📦 NPM Scripts

- `npm run dev` - Start Vite dev server
- `npm run build` - Build for production
- `npm run lint` - Format frontend code
- `npm run test:lint` - Check frontend code style

## 📄 License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
Report a correction

Explore similar templates

Compare previews and descriptions within the same stack and category.